Итак, я занимаюсь исследованиями в области машинного обучения и использую удаленный сервер GPU для этого. Обычно, когда я прихожу на работу, я подключаюсь к серверу с помощью SSH-клиента и запускаю команду-алиас, hi
которая выглядит так:
alias hi='conda activate userconda; export CUDA_VISIBLE_DEVICES=1; alias hi'
Сервер обычно используется двумя-тремя пользователями и имеет два графических процессора, каждый из которых имеет идентификатор 0
или 1
.
Мне интересно, есть ли какой-то способ автоматически определить, какой идентификатор GPU назначить переменной среды, CUDA_VISIBLE_DEVICES
основываясь на том, какой GPU не используется? Сейчас мой псевдоним жестко закодирован как CUDA_VISIBLE_DEVICES=1
, но было бы удобнее, если бы программа могла делать это автоматически.
Я думал, что, возможно, можно использовать вывод nvidia-smi
, но не уверен, что это правильный подход.
Спасибо!
решение1
Nvidia smi сообщает вам шину активной видеокарты:
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 |
+-----------------------------------------------------------------------------+
Так:00000000:01:00.0 Вкл.это шина устройства. Так что вы можете запустить nvidia-smi grep для этого результата и указать другое устройство, шину которого вы можете получить с помощью lspci.