構築について
GPU(NVIDIA)で構築する方法について覚書として示しておきます。
- OS:Windows11 pro
※windows10 proでもインストールを確認済み - Anaconda:Anaconda3-2023.07-1-Windows-x86_64
※2023年7月時点での最新版 - GPU:NVIDIA GeForce RTX 2070 SUPER
Visual Studio (community) 2019のインストール
下記の公式サイトからインストーラーをダウンロードし、インストールを行います。インストール後、MSVC2019を起動し、「ツール」メニューから「ツールと機能を取得」を選択して下さい。起動した画面の中から「C++ Build Tools」パッケージのチェックを入れて必要なパッケージを追加します(MSVCを追加すること)。
NVIDIAドライバー
下記の公式サイトからドライバーをダウンロードしインストールします。この後にインストールするCUDAとの構成はここで確認できます。
ビルドの構成
GPUが正常に動作させるためには、TensorflowやCUDAのバージョンを合わせて構築しないといけません。構成については、下記のサイトで紹介されているので、そちらを参考にして構築を進めて下さい。
参考までに、私の構成は下記のようにしました。
Tensorflow | Python | VisualStudio | Bazel | cuDNN | CUDA |
tensorflow_gpu-2.10.0 | 3.7~3.10 ※3.9にした |
MSVC2019 | 5.1.1 | 8.1 | 11.2.2 |
CUDAのインストール
下記の公式サイトから対象のパッケージをダウンロードしてインストールします。
cuDNNのインストール
下記の公式サイトから対象のパッケージをダウンロードします。ダウンロードしたファイルを解凍し、Anacondaがインストールされたフォルダ内にある「Tools」フォルダの直下に移動させます。binフォルダを環境変数(PATH)に追加します。
※「where cudnn_adv_infer64_8.dll」を実行して、PATHが表示されればOKです。
注意
cuDNNの古いパッケージをダウンロードするためには、NVIDIAのアカウントが必要です。
私の場合、NVIDIAのドライバーのアプリケーションでアカウントを発行していたため、そのアカウントを使用しました。公式サイトのFAQにアカウント発行について説明がありますので、そちらを参考にして下さい。
DeepLabCut
動画や画像から動物や人間の姿勢を追跡するためのオープンソースの姿勢推定ツールです。ニューラルネットワークをベースとした深層学習を用いて動物や人間の体の特徴点を検出し、追跡することが可能です。
公式WEBサイト
DeepLabCutの構築
- Anacondaのインストール。
下記の公式サイトからAnacondaのインストーラーをダウンロードし、インストールします。インストールする場所はCドライブの直下にフォルダ(例、anaconda)を作成し、そこにインストールすると良い。
※ユーザ名を日本語にしているとトラブルの原因になるため、Cドライブ直下にフォルダを作成して下さい。
公式サイト - 環境PATHを登録
Anacondaのインストール時にPATHの設定を追加する項目にチェックを入れておけば必要はありません。もし、手動で追加する場合は下記のPATHを通して下さい。
C:[インストールフォルダ]\Anaconda3」
C:[インストールフォルダ]\Anaconda3\Library\mingw-w64\bin」
C:[インストールフォルダ]\Anaconda3\Library\usr\bin」
C:[インストールフォルダ]\Anaconda3\Library\bin」
C:[インストールフォルダ]\Anaconda3\Scripts」 - DEEPLABCUT.yamlのダウンロード
DeepLabCutの公式サイトに仮想環境を構築するためのファイルが公開されているので、下記のサイトよりダウンロードして下さい。ダウンロードしたファイルはAnaconda Promptからコマンドで実行するため、実行しやすい場所に移動させて下さい。私の場合、Cドライブ直下に「deeplabcut」のフォルダを作成し、そこに移動させました。
公式サイト ページの下の方にリンクがあります - Anacondaの起動(管理者権限)
Anacondaを管理者権限で起動し、DEEPLABCUT.yamlのファイルがあるフォルダに移動します。
(base) C:WINDOWS\system32>cd ../.. ※2つ上の階層(フォルダ)に移動
(base) C:>cd deeplabcut ※deeplabcutに移動
(base) C:>dir ※これは実行しなくても良い - DEEPLABCUT.yamlの編集
自分の環境に合わせてDEEPLABCUT.yamlを一部編集します。
# DEEPLABCUT.yaml
#DeepLabCut2.0 Toolbox (deeplabcut.org)
#息 A. & M. Mathis Labs
#https://github.com/DeepLabCut/DeepLabCut
#Please see AUTHORS for contributors.#https://github.com/DeepLabCut/DeepLabCut/blob/master/AUTHORS
#Licensed under GNU Lesser General Public License v3.0
#
# DeepLabCut environment
# FIRST: INSTALL CORRECT DRIVER for GPU, see https://stackoverflow.com/questions/30820513/what-is-the-correct-version-of-cuda-for-my-nvidia-driver/30820690
#
# install: conda env create -f DEEPLABCUT.yaml
# update: conda env update -f DEEPLABCUT.yaml
name: DEEPLABCUT
channels:
– conda-forge
– defaults
dependencies:
– python=3.9
– pip
– jupyter
– nb_conda
– ffmpeg
– pip:
– “deeplabcut[gui,tf]” - DEEPLABCUT用仮想環境の構築
仮想環境を構築します。
(base) C:>conda env create -f DEEPLABCUT.yaml環境によっては下記のようなエラーが発生するため、エラーが発生する場合はファイルの「nb_conda」の下の行に「- notebook<7.0.0」を追加します。
<省略>jupyter-nbextension.exe”‘ is not recognized as an internal or external command# DEEPLABCUT.yaml
#DeepLabCut2.0 Toolbox (deeplabcut.org)
#息 A. & M. Mathis Labs
#https://github.com/DeepLabCut/DeepLabCut
#Please see AUTHORS for contributors.#https://github.com/DeepLabCut/DeepLabCut/blob/master/AUTHORS
#Licensed under GNU Lesser General Public License v3.0
#
# DeepLabCut environment
# FIRST: INSTALL CORRECT DRIVER for GPU, see https://stackoverflow.com/questions/30820513/what-is-the-correct-version-of-cuda-for-my-nvidia-driver/30820690
#
# install: conda env create -f DEEPLABCUT.yaml
# update: conda env update -f DEEPLABCUT.yaml
name: DEEPLABCUT
channels:
– conda-forge
– defaults
dependencies:
– python=3.9
– pip
– jupyter
– nb_conda
– notebook<7.0.0 ←この行を追加
– ffmpeg
– pip:
– “deeplabcut[gui,tf]” - 仮想環境に切り替え
DEEPLABCUT用の仮想環境に切り替えます。
(base) C:>conda activate DEEPLABCUT - 深層学習用のパッケージTensorflowのインストール
GPU用のTensorflowをインストールします。
(DEEPLABCUT) C:>pip install tensorflow-gpu==2.10.0 - GUI版のDeepLabCutのインストール
DeepLabCutをGUIとTensorflowを指定してインストールします。
(DEEPLABCUT) C:>pip install deeplabcut[gui,tf] - DeepLabCutの起動
DeepLabCutを起動します。
(DEEPLABCUT) C:>python -m deeplabcut
GPUの動作確認
GPUの動作確認をするため、下記の方法があります。すべて実行する必要はありませんが、参考までに示しておきます。実行する場合は仮想環境内で行うようにして下さい。また、Widnowsのタスクマネージャーを起動し、パフォーマンスにGPUの動作状況が確認できるので、そちらを表示しながら実行するのも良いと思います。
NVIDIAのドライバーの確認
CUDAのバージョン確認
GPUの認識 その1(Trueが表示すればOK)
>>>import tensorflow as tf
>>>tf.test.is_gpu_available()
GPUの認識 その1(GPUが表示すればOK。CPUも表示されます)
>>>from tensorflow.python.client import device_lib
>>>device_lib.list_local_devices()
TensorFlowやcuDNNの動作テスト その1
下記のコードをtest1.pyとして保存し実行して下さい。ここでは「deeplabcut」フォルダに移動しました。
import tensorflow as tf
import time
# GPUデバイスを指定
physical_devices = tf.config.list_physical_devices(‘GPU’)
if not physical_devices:
raise RuntimeError(“GPUが見つかりません。TensorFlowのGPUサポートを確認してください。”)
# GPUの性能測定関数
def measure_gpu_performance():
# テスト用のデータを生成 (適宜変更してください)
input_shape = (1000, 1000)
x = tf.random.normal(input_shape)
# TensorFlowのモデルを構築 (適宜変更してください)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1000, activation=’relu’, input_shape=input_shape),
tf.keras.layers.Dense(500, activation=’relu’),
tf.keras.layers.Dense(10, activation=’softmax’)
])
# GPUで計算
start_time = time.time()
for _ in range(10000): # ループ回数は適宜調整してください
_ = model(x)
end_time = time.time()
# 実行時間を計算
elapsed_time = end_time – start_time
return elapsed_time
if __name__ == “__main__”:
elapsed_time = measure_gpu_performance()
# 結果を表示
print(f”GPUでの計算時間: {elapsed_time:.2f}秒”)
TensorFlowやcuDNNの動作テスト その2
下記のコードをtest2.pyとして保存し実行して下さい。ここでは「deeplabcut」フォルダに移動しました。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets import mnist
import time
def create_cnn_model():
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation=’relu’, input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation=’relu’))
model.add(Dense(10, activation=’softmax’))
return model
def train_model_on_gpu(x_train, y_train, x_test, y_test):
# TensorFlowデバイスがGPUを使用するように設定
tf.config.experimental.set_memory_growth(tf.config.list_physical_devices(‘GPU’)[0], True)
# CNNモデルを構築
model = create_cnn_model()
# モデルのコンパイル
model.compile(loss=’sparse_categorical_crossentropy’, optimizer=Adam(), metrics=[‘accuracy’])
# モデルのトレーニング
start_time = time.time()
model.fit(x_train, y_train, batch_size=128, epochs=5, validation_data=(x_test, y_test), verbose=1)
end_time = time.time()
return end_time – start_time
if __name__ == “__main__”:
# MNISTデータセットをロード
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 前処理:データの正規化と形状変更
x_train = x_train.reshape(-1, 28, 28, 1).astype(‘float32’) / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype(‘float32’) / 255.0
# CNNモデルのトレーニングとGPUでの計算時間計測
elapsed_time = train_model_on_gpu(x_train, y_train, x_test, y_test)
print(“CNN training and computation on GPU”)
print(f”Elapsed time: {elapsed_time:.2f} seconds”)