複数のGPUを搭載した環境で使用するGPUを指定する方法

本トピックでは複数GPU環境での使用GPU指定について解説します。

GPUの指定

MENOU-TEの学習画面やランタイム評価画面で、使用デバイス(GPU)を指定することができます。

複数GPUを搭載した環境では、デバイスを適切に設定することで高速化する場合があります。

ランタイム評価画面

複数のGPUがある場合、「GPU:0」「GPU:1」などから選択することでタスクが利用するGPUを指定できます。

このときの「GPU:0」がどのGPUに割り当たるか、については確認が少し難しくなっています。

GPUの番号は確認方法によってばらばらな例

使用しているGPUの確認方法はいろいろありますが、次のものすべて順序が異なります。

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の確認が可能です。
ぜひご活用ください。

「いいね!」 5