CUDA_VISIBLE_DEVICES与nvidia-smi显卡序号不一致的问题
情况描述:
物理插槽从上到下:RTX5090、RTX3090、RTX5090
nvidia-smi顺序:RTX5090、RTX3090、RTX5090
CUDA_VISIBLE_DEVICES实测顺序:RTX5090、RTX5090 、RTX3090
导致使用CUDA_VISIBLE_DEVICES限制程序运行的显卡时,发现实际情况与预期不符。
原因分析:CUDA 的默认排序机制
在默认情况下,CUDA 驱动程序(以及 PyTorch/TensorFlow 等框架)倾向于按照计算能力(Performance/Fastest First) 来给 GPU 排序,而不是按照物理插槽(PCI Bus ID)的顺序。
解决方法:使用环境变量,要求CUDA强制按照物理插槽顺序进行排序
bash
CUDA_DEVICE_ORDER=PCI_BUS_ID
例如在systemd的service脚本中写:
bash
Environment="CUDA_DEVICE_ORDER=PCI_BUS_ID"
Environment="CUDA_VISIBLE_DEVICES=1"