Así que investigo sobre aprendizaje automático y uso un servidor GPU remoto para hacer todo. Lo que suelo hacer cuando vengo a trabajar es acceder al servidor con un cliente SSH y ejecutar mi hi
comando alias que es:
alias hi='conda activate userconda; export CUDA_VISIBLE_DEVICES=1; alias hi'
El servidor suele compartirse entre dos o tres personas y tiene dos GPU, cada una con ID 0
o 1
.
Lo que me pregunto es, ¿habría algún tipo de forma de determinar automáticamente qué ID de GPU asignar a la variable de entorno CUDA_VISIBLE_DEVICES
en función de qué GPU no se está utilizando? En este momento mi alias está codificado como CUDA_VISIBLE_DEVICES=1
, pero sería más conveniente si el programa pudiera hacerlo automáticamente.
Estaba pensando que tal vez podría haber una manera de utilizar la salida de nvidia-smi
, pero no estoy seguro de si ese sería el enfoque correcto.
¡Gracias!
Respuesta1
Nvidia smi le informa el bus de la tarjeta de video activa:
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 |
+-----------------------------------------------------------------------------+
Entonces:00000000:01:00.0 Activadoes el bus del dispositivo. Por lo tanto, puede ejecutar nvidia-smi grep para obtener este resultado y evaluar el otro dispositivo cuyo bus puede obtener mediante lspci.