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 hi
comando 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 0
ou 1
.
O que estou pensando é: haveria algum tipo de maneira de determinar automaticamente qual ID de GPU atribuir à variável de ambiente CUDA_VISIBLE_DEVICES
com 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.