動機
- ml-agentsでVisualObservationを行うとき、GPUで行うと計算速度の向上が見込めそう。
- →なので、CUDAを導入することにした
- (追記)GPUに変えて、学習を行ったがそこまでクリティカルな学習時間の変化はなかった。こちらのissueにあるように、ml-agentsでGPUの恩恵がフルに受けられるシチュエーションは相当限られているのかも。
環境
- Windows 11(GPU対応のPC)
- ml-agents release22
- python3.10
手順
1. CUDA Toolkitのインストール
- こちらからCUDA Toolkitをダウンロード。
- バージョン: CUDA 12.1
2. インストール確認
-
環境変数の確認
- インストール後、以下のパスが通っていることを確認。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
- インストール後、以下のパスが通っていることを確認。
- コマンドプロンプトで
nvcc -V
と打ち込んで、以下のようなログが出れば成功Copyright (c) 2005-2023 NVIDIA Corporation Built on Wed_Feb__8_05:53:42_Coordinated_Universal_Time_2023 Cuda compilation tools, release 12.1, V12.1.66 Build cuda_12.1.r12.1/compiler.32415258_0
3. cuDNNのインストール
- こちらからCUDA 12.1に対応したバージョン(8.9.0など)をダウンロード。
-
下記フォルダを作成(管理者権限が必要かも):
C:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN
- ダウンロードしたファイルを解凍し、以下2.で作成したcuDNNフォルダ配下にコピー:
-
bin
,include
,lib
フォルダとLICENSE
ファイル。
-
4. 環境変数の登録
- システム環境変数に以下を追加:
-
変数名:
CUDNN_PATH
値:C:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN
-
Pathに以下を追加:
C:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN\bin
-
変数名:
5. 仮想環境(venv)の作成と有効化
python -m venv venv
.\venv\Scripts\activate
6. PyTorchのインストール
- 公式サイトでstable → windows → Pip → Python → CUDA12.1 と選択
- おそらく下記と同じコマンドが表示されるので、コマンドプロンプトに打ち込んでインストール
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
7. ml-agentsのインストール(参考)
以下のコマンドを実行:
pip3 install -e ./ml-agents-envs
pip3 install -e ./ml-agents
8. インストール確認
以下のPythonスクリプトを実行し、どちらも True
なら成功:
import torch
print(torch.cuda.is_available()) # CUDAが有効
print(torch.backends.cudnn.enabled) # cuDNNが有効
強化学習実行方法
-
InferenceDevice設定:
- GPUを使用する場合、InferenceDeviceを
ComputeShader
に設定。
- GPUを使用する場合、InferenceDeviceを
-
学習コマンドにオプションを追加:
-
mlagents-learn
コマンドに--torch-device=cuda
オプションを付与。
-
-
GPU使用確認:
- タスクマネージャーのGPUのCuda使用率または
nvidia-smi
コマンドでGPUが正しく使用されている事を確認。 -
nvidia-smi
でGPU情報が見れるのに、タスクマネージャーでCudaの使用率が見れない場合、以下の手順を踏むと治る。(参考)- システム > ディスプレイ > グラフィック > 既定のグラフィック設定 >「ハードウェア アクセラレータによる GPU スケジューリング」を「オフ」にする
- タスクマネージャーのGPUのCuda使用率または