本トピックでは複数GPU環境での使用GPU指定について解説します。
GPUの指定
MENOU-TEの学習画面やランタイム評価画面で、使用デバイス(GPU)を指定することができます。
複数GPUを搭載した環境では、デバイスを適切に設定することで高速化する場合があります。
ランタイム評価画面
複数のGPUがある場合、「GPU:0」「GPU:1」などから選択することでタスクが利用するGPUを指定できます。
このときの「GPU:0」がどのGPUに割り当たるか、については確認が少し難しくなっています。
GPUの番号は確認方法によってばらばらな例
使用しているGPUの確認方法はいろいろありますが、次のものすべて順序が異なります。
-
デバイスマネージャー
-
タスクマネージャー
-
nvidia-smiコマンド
GPU:0 がどのGPUか…分かり辛いですよね。
実はこれらのどれとも一致しない場合があります。
GPU指定の仕様
「GPU:0」と指定するとどのGPUが使われるか、については、NVIDIAのGPU演算ライブラリCUDAの仕様によって決まります。
参考
環境変数の CUDA_DEVICE_ORDER によってGPUの列挙順が指定され、デフォルト(指定なし)の場合は FASTEST_FIRST という仕様で決定されます。これは端的には「スペックの高いGPUから順に並べる」ものと解釈できます。
(原文: FASTEST_FIRST causes CUDA to enumerate the available devices in fastest to slowest order using a simple heuristic.)
この順序はPCの構成が同じであれば変わることはないと考えられますが、実際にどのように番号が振られたか確認できないのは困ります。
nvidia-smiコマンドでGPU番号を確認する方法
nvidia-smiコマンドは PCI BUS の順にGPUを列挙しているようです。
このため、環境変数 CUDA_DEVICE_ORDER に PCI_BUS_ID を指定することで、CUDA 側の列挙順を nvidia-smiコマンドに合わせることができます。
環境変数を指定せずGPU番号を確認する方法
ランタイムのパフォーマンス計測機能を使用すると、CUDAが認識する順番にGPUを列挙します。
このため環境変数を変更せずにGPUの確認が可能です。
ぜひご活用ください。