私は機械学習の研究をしており、リモート GPU サーバーを使用して作業を行っています。仕事に来たときに私が通常行うことは、SSH クライアントでサーバーにアクセスし、次のエイリアスhi
コマンドを実行することです。
alias hi='conda activate userconda; export CUDA_VISIBLE_DEVICES=1; alias hi'
サーバーは通常 2 ~ 3 人で共有され、それぞれ ID0
またはを持つ 2 つの GPU があります1
。
CUDA_VISIBLE_DEVICES
私が知りたいのは、使用されていない GPU に基づいて、環境変数に割り当てる GPU ID を自動的に決定する方法があるかどうかです。現在、エイリアスは にハードコードされていますCUDA_VISIBLE_DEVICES=1
が、プログラムがそれを自動的に実行できればもっと便利です。
の出力を使用する方法があるかもしれないと考えていましたがnvidia-smi
、それが正しいアプローチかどうかはわかりません。
ありがとう!
答え1
Nvidia smi はアクティブなビデオ カードのバスを報告します:
nvidia-smi
Sat Apr 11 04:02:56 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00 Driver Version: 440.64.00 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 2070 On | 00000000:01:00.0 On | N/A |
| 45% 33C P8 11W / 175W | 252MiB / 7974MiB | 4% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1089 G /usr/lib/xorg/Xorg 106MiB |
| 0 1355 G /usr/bin/kwin_x11 79MiB |
| 0 1361 G /usr/bin/krunner 2MiB |
| 0 1364 G /usr/bin/plasmashell 56MiB |
| 0 5152 G /usr/lib/firefox/firefox 2MiB |
+-----------------------------------------------------------------------------+
それで:00000000:01:00.0 オンデバイス バスです。したがって、この結果を取得するために nvidia-smi grep を実行し、lspci でバスを取得できる他のデバイスを特定できます。