그래서 머신러닝을 연구하고 원격 GPU 서버를 사용해 작업을 진행했습니다. 제가 직장에 있을 때 주로 하는 일은 SSH 클라이언트를 사용하여 서버에 액세스하고 다음 hi
과 같은 alias 명령을 실행하는 것입니다.
alias hi='conda activate userconda; export CUDA_VISIBLE_DEVICES=1; alias hi'
서버는 일반적으로 2~3명이 공유하며 각각 ID 0
또는 1
.
제가 궁금한 것은 CUDA_VISIBLE_DEVICES
어떤 GPU가 사용되지 않는지에 따라 환경 변수에 할당할 GPU ID를 자동으로 결정하는 방법이 있습니까? 지금은 내 별칭이 하드코딩되어 있지만 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를 통해 버스를 얻을 수 있는 다른 장치를 평가할 수 있습니다.