Como definir variáveis ​​de ambiente automaticamente?

Como definir variáveis ​​de ambiente automaticamente?

Então, faço pesquisas em aprendizado de máquina e uso um servidor GPU remoto para fazer isso. O que costumo fazer quando venho trabalhar é acessar o servidor com um cliente SSH e executar meu hicomando de alias que é:

alias hi='conda activate userconda; export CUDA_VISIBLE_DEVICES=1; alias hi'

O servidor geralmente é compartilhado entre duas a três pessoas e possui duas GPUs, cada uma com ID 0ou 1.

O que estou pensando é: haveria algum tipo de maneira de determinar automaticamente qual ID de GPU atribuir à variável de ambiente CUDA_VISIBLE_DEVICEScom base em qual GPU não está sendo usada? No momento, meu alias está codificado para ser CUDA_VISIBLE_DEVICES=1, mas seria mais conveniente se o programa pudesse fazer isso automaticamente.

Eu estava pensando que talvez pudesse haver uma maneira de usar a saída de nvidia-smi, mas não tenho certeza se essa seria a abordagem correta.

Obrigado!

Responder1

Nvidia smi informa o barramento da placa de vídeo ativa:

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 |
+-----------------------------------------------------------------------------+

Então:00000000:01:00.0 Ligadoé o barramento do dispositivo. Portanto, você pode executar nvidia-smi grep para obter esse resultado e avaliar o outro dispositivo cujo barramento você pode obter por lspci.

informação relacionada