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

posted @ 2025-03-01 21:48  Undefined443  阅读(175)  评论(0)    收藏  举报