Wie werden Umgebungsvariablen automatisch festgelegt?

Wie werden Umgebungsvariablen automatisch festgelegt?

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- hiBefehl 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 0oder 1.

Ich frage mich, ob es eine Möglichkeit gibt, automatisch zu bestimmen, welche GPU-ID der Umgebungsvariable zugewiesen werden soll, CUDA_VISIBLE_DEVICESbasierend 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.

verwandte Informationen