在使用多GPU服务器集群时,多用户使用会出现 GPU 资源拥塞的情况,需要指定使用某个特定GPU进行训练避免这种情况。
查询GPU编号
使用 nvidia-smi
查询 GPU 信息,例如:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50 Driver Version: 430.50 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 TITAN V Off | 00000000:04:00.0 Off | N/A |
| 25% 34C P8 N/A / N/A | 0MiB / 12066MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 TITAN V Off | 00000000:06:00.0 Off | N/A |
| 26% 37C P8 N/A / N/A | 0MiB / 12066MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
其中 GPU
项即对应 GPU的编号。
指定使用的GPU
方法 1
引入os
库设定系统变量CUDA_VISIBLE_DEVICES
,指定可见GPU,例如:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
指定使用 0 号GPU。
方法 2
使用 tf.device()
方法进行指定,例如:
tf.device('/gpu:2')
指定使用 2 号GPU。
方法 3
在运行 python 程序前,在 shell 里进行指定(同样是指定可见GPU),例如:
CUDA_VISIBLE_DEVICES=2 python train.py
指定使用 2 号GPU。
以上方法皆支持多GPU标注,例如:
CUDA_VISIBLE_DEVICES=1 Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1 Devices 0 and 1 will be visible
CUDA_VISIBLE_DEVICES="0,1" Same as above, quotation marks are optional
CUDA_VISIBLE_DEVICES=0,2,3 Devices 0, 2, 3 will be visible; device 1 is masked
CUDA_VISIBLE_DEVICES="" No GPU will be visible