nvidia-smi 显卡序号不匹配问题
问题描述
我有 3 块显卡:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.127.08 Driver Version: 550.127.08 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA A100-SXM-64GB On | 00000000:01:00.0 Off | 0 |
| N/A 39C P0 31W / 500W | 4MiB / 65536MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA A100-SXM-64GB On | 00000000:41:00.0 Off | 0 |
| N/A 38C P0 35W / 500W | 4MiB / 65536MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+------------------------+----------------------+
| 2 NVIDIA H100 80GB HBM3 On | 00000000:81:00.0 Off | 0 |
| N/A 40C P0 99W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+------------------------+----------------------+
可以看到,0 号和 1 号卡是 A100,2 号卡是 H100。
然而使用 PyTorch 得到的显卡名称却和 nvidia-smi 输出不一致:
>>> torch.cuda.get_device_name(0)
'NVIDIA H100 80GB HBM3'
>>> torch.cuda.get_device_name(1)
'NVIDIA A100-SXM-64GB'
>>> torch.cuda.get_device_name(2)
'NVIDIA A100-SXM-64GB'
可以看到,PyTorch 显示 0 号卡是 H100,1 号和 2 号卡是 A100。和 nvidia-smi 的输出不一致。
解决方法
显卡设备的默认排序方式是 FASTEST_FIRST(按速度排序),然而 nvidia-smi 使用的排序方式是 PCI_BUS_ID(PCI 总线 ID),因此导致了和 PyTorch 显示顺序不一致的问题。
可以通过设置 CUDA_DEVICE_ORDER 环境变量来强制程序使用 PCI_BUS_ID 排序:
export CUDA_DEVICE_ORDER=PCI_BUS_ID
可以写入系统环境变量配置 /etc/environment 以使系统上所有用户获得相同的环境配置:
CUDA_DEVICE_ORDER="PCI_BUS_ID"
参考:Gpu devices: nvidia-smi and cuda.get_device_name() output appear inconsistent | PyTorch Forums

浙公网安备 33010602011771号