1. ホーム
  2. cuda

[解決済み] ジョブを実行するGPUはどのように選択するのですか?

2022-02-01 11:54:13

質問内容

マルチGPUコンピュータで、CUDAジョブがどのGPUで実行されるべきかを指定するにはどうすればよいですか?

例として、CUDA をインストールする際に、私は NVIDIA_CUDA-<#.#>_Samples のインスタンスを複数回実行した後 nbody シミュレーションを実行しましたが、それらはすべて1つのGPU 0で実行され、GPU 1は完全にアイドル状態でした(GPU 1で監視しているのは watch -n 1 nvidia-dmi ). 確認中 CUDA_VISIBLE_DEVICES を使って

echo $CUDA_VISIBLE_DEVICES

これが設定されていないことがわかりました。 を使用して設定してみました。

CUDA_VISIBLE_DEVICES=1

を実行すると nbody を再度実行しましたが、やはりGPU 0になりました。

関連する質問を見てみました。 CUDAプログラムを実行するために指定されたGPUを選択する方法を教えてください。 しかし deviceQuery コマンドはCUDA 8.0のbinディレクトリにはありません。 さらに $CUDA_VISIBLE_DEVICES$ 他の投稿では、環境変数である $CUDA_DEVICES が、これらは設定されておらず、使用方法についての情報も見つかりませんでした。

私の質問とは直接関係ないのですが nbody -device=1 GPU 1 でアプリケーションを動作させることができましたが、GPU 2 で動作させるには nbody -numdevices=2 は、GPU0と1の両方で実行されませんでした。

このテストは、CentOS 6.8、CUDA 8.0、2つのGTX 1080 GPU、およびNVIDIAドライバ367.44で、bashシェルを使って実行するシステムで行っています。

CUDA を使用して記述する場合、使用する CUDA リソースを管理および制御できることは知っていますが、コンパイルされた CUDA 実行ファイルを実行する場合、コマンド ラインからどのように管理するのでしょうか。

どのように解決するのですか?

を設定していないことが原因でした。 CUDA_VISIBLE_DEVICES 変数が正しく設定されています。

CUDAデバイスを指定する場合 1 を設定すると、例えば CUDA_VISIBLE_DEVICES を使って

export CUDA_VISIBLE_DEVICES=1

または

CUDA_VISIBLE_DEVICES=1 ./cuda_executable

前者は現在のシェルの寿命に対して変数を設定し、後者はその特定の実行可能な呼び出しの寿命に対してのみ変数を設定します。

複数のデバイスを指定したい場合は

export CUDA_VISIBLE_DEVICES=0,1

または

CUDA_VISIBLE_DEVICES=0,1 ./cuda_executable