
Ich forsche im Bereich maschinelles Lernen und verwende dafür einen Remote-GPU-Server. Wenn ich zur Arbeit komme, greife ich normalerweise mit einem SSH-Client auf den Server zu und führe meinen Alias- hi
Befehl aus:
alias hi='conda activate userconda; export CUDA_VISIBLE_DEVICES=1; alias hi'
Der Server wird normalerweise von zwei bis drei Personen gemeinsam genutzt und verfügt über zwei GPUs, jeweils mit der ID 0
oder 1
.
Ich frage mich, ob es eine Möglichkeit gibt, automatisch zu bestimmen, welche GPU-ID der Umgebungsvariable zugewiesen werden soll, CUDA_VISIBLE_DEVICES
basierend darauf, welche GPU nicht verwendet wird. Momentan ist mein Alias fest auf codiert CUDA_VISIBLE_DEVICES=1
, aber es wäre praktischer, wenn das Programm das automatisch tun könnte.
Ich habe mir überlegt, dass es vielleicht eine Möglichkeit geben könnte, die Ausgabe von zu verwenden nvidia-smi
, aber ich bin nicht sicher, ob das der richtige Ansatz wäre.
Danke!
Antwort1
Nvidia smi meldet Ihnen den Bus der aktiven Grafikkarte:
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 |
+-----------------------------------------------------------------------------+
Also:00000000:01:00.0 Einist der Gerätebus. Sie können also nvidia-smi grep ausführen, um dieses Ergebnis zu erhalten und das andere Gerät zuzuweisen, dessen Bus Sie über lspci abrufen können.