Windows11のWSL2にTensorFlow環境を作る
作業日:2024/8/11
2024/8/11 13:04
CUDAドライバの確認
code:sh
nvidia-smi
GPUが認識可能な場合,GPUの状態とCUDAドライバのバージョンが表示される.
code:出力例
~$ nvidia-smi
Wed Jul 17 19:33:53 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.05 Driver Version: 545.84 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti On | 00000000:01:00.0 On | N/A |
| 0% 45C P8 12W / 165W | 1303MiB / 16380MiB | 3% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
TensorFlowに対応するCudaバージョンの確認
https://gyazo.com/282bc8ef8dfbbfdafa18a5e2a53dfe76
https://gyazo.com/552410a1d2aeffc5597940aa3f5b2d59
table:今回使用するバージョン
TensorFlow 2.16.1
Python 3.12
CUDA: 12.3
CuDNN: 8.9
install CUDA toolkit
cudaが入っていないことを確認する
code:sh
cuda --version
cudaが入っていない場合の出力
Command 'cuda' not found, ...
CUDA Toolkit Archiveから「CUDA Toolkit 12.3」を選択
https://gyazo.com/d2845bd261b2773d5bbc3044805c2390
https://gyazo.com/e0f563960ccd1380030bbb7871f55d5e
表示されるインストールスクリプトを実行する.
今回表示されたスクリプト
sudo sh cuda_12.3.0_545.23.06_linux.run
https://gyazo.com/d25a0982db84ffe048c32798debdee7e
インストール後の確認
code:sh
nvidia-smi
https://gyazo.com/b02800e0fad85b64ced198de6c200955
cuDNNのインストール
※以下はCuDNN: 8.9をインストールする場合を想定した記述である
cudnnが入っていないことを確認(応答が空なら良い)
code:sh
dpkg -l | grep cudnn
目的のバージョンの中からLinux x86_64版をダウンロード
ダウンロードしたファイルをWSL 2に転送
ダウンロードしたtarファイル(例: cudnn-x.x-linux-x64-v8.x.x.x.tgz)をWSL 2環境にコピーする
CuDNNのアーカイブを展開
ケース1:tar.xzファイルの場合
(1)xzファイルの解凍
code:sh
xz -dv ファイルパス
(2)tarファイルの解凍
code:sh
sudo tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar
ケース2:tgzファイルの場合
code:sh
tar -xzvf cudnn-x.x-linux-x64-v8.x.x.x.tgz
ここで,エラーが出る場合はsudoを付けて解決する
cuDNNライブラリをCUDAディレクトリにコピー
code:sh
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
cudnnディレクトリに移動(pathは状況に応じたものに変更)
code:sh
cd cudnn-linux-x86_64-8.9.0.131_cuda12-archive
ファイルをcudaディレクトリにコピー
code:sh
sudo cp include/cudnn*.h /usr/local/cuda/include
code:sh
sudo cp lib/libcudnn* /usr/local/cuda/lib64
code:sh
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
bashrcに登録(Cudaのバージョンに応じてコマンドを変更する)
code:sh
echo 'export CUDA_HOME=/usr/local/cuda-12.3' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.3/lib64' >> ~/.bashrc
パスを通す
code:sh
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
変更を適用
code:sh
source ~/.bashrc
確認
code:sh
echo $CUDA_HOME
echo $LD_LIBRARY_PATH
CUDNNの動作を確認
1. 必要なライブラリのインストール
ターミナルを開き、以下のコマンドを実行してTensorFlowをインストールします。
code:sh
pip install tensorflow
2. テストスクリプトの作成
任意のディレクトリに cudnn_test.py というファイル名で、以下のPythonスクリプトを保存します。
code:python
import tensorflow as tf
import platform
def check_cudnn():
print("===== システム情報 =====")
print(f"オペレーティングシステム: {platform.system()} {platform.version()}")
print(f"Pythonバージョン: {platform.python_version()}")
print(f"TensorFlowバージョン: {tf.__version__}")
print("\n===== CUDA と GPU の状態 =====")
cuda_available = tf.test.is_built_with_cuda()
print(f"CUDA利用可能: {'はい' if cuda_available else 'いいえ'}")
gpus = tf.config.list_physical_devices('GPU')
if gpus:
print(f"利用可能なGPU: {len(gpus)}台")
for gpu in gpus:
print(f" - {gpu.name}")
else:
print("利用可能なGPU: なし")
if cuda_available:
print("\n===== GPU性能テスト =====")
try:
with tf.device('/GPU:0'):
a = tf.constant(1.0, 2.0, 3.0], [4.0, 5.0, 6.0)
b = tf.constant(1.0, 2.0], 3.0, 4.0, [5.0, 6.0) c = tf.matmul(a, b)
print("行列乗算結果:")
print(c.numpy())
print("\nGPUでの行列乗算: 成功")
except:
print("GPUでの行列乗算: 失敗")
print("\n===== 総合評価 =====")
if cuda_available and gpus and 'c' in locals():
print("結果: CUDNNとGPUは正常に動作しています。")
print("深層学習タスクを実行する準備が整っています。")
else:
print("結果: CUDNNまたはGPUの設定に問題がある可能性があります。")
print("上記の情報を確認し、必要に応じてシステム設定を見直してください。")
if __name__ == "__main__":
check_cudnn()
3. スクリプトの実行
ターミナルで、スクリプトを保存したディレクトリに移動し、以下のコマンドを実行します。
code:sh
python3 cudnn_test.py
4. 結果の確認
スクリプトの実行結果を確認します。以下の点に注目してください:
a. システム情報
TensorFlowのバージョンが表示されていることを確認
b. CUDA と GPU の状態
CUDA利用可能が「はい」になっていることを確認
利用可能なGPUが1台以上表示されていることを確認
CUDNNバージョンが表示されていることを確認
c. GPU性能テスト
行列乗算結果が表示されていることを確認
"GPUでの行列乗算: 成功" と表示されていることを確認
d. 総合評価
"結果: CUDNNとGPUは正常に動作しています。" と表示されていることを確認
5. 結果の解釈
全ての確認点が期待通りであれば、CUDNNは正常に動作していると判断できます。
深層学習フレームワーク(TensorFlow等)でGPUを利用した学習や推論が可能な状態です。
注意: スクリプトの実行中にいくつかの警告メッセージが表示される場合がありますが、
多くの場合これらは無視して問題ありません。重要なのは、上記の確認点を満たしているかどうかです。
補遺
参考