環境変数を自動的に設定するにはどうすればよいですか?

環境変数を自動的に設定するにはどうすればよいですか?

私は機械学習の研究をしており、リモート 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 でバスを取得できる他のデバイスを特定できます。

関連情報