【问题标题】:Inconsistency of IDs between 'nvidia-smi -L' and cuDeviceGetName()'nvidia-smi -L' 和 cuDeviceGetName() 之间的 ID 不一致
【发布时间】:2014-11-25 05:23:13
【问题描述】:

我在 shell 中运行这个命令并得到:

C:\Users\me>nvidia-smi -L    
GPU 0: Quadro K2000 (UUID: GPU-b1ac50d1-019c-58e1-3598-4877fddd3f17)    
GPU 1: Quadro 2000 (UUID: GPU-1f22a253-c329-dfb7-0db4-e005efb6a4c7)

但在我的代码中,当我运行 cuDeviceGetName(.., ID) 其中 ID 是 nvidia-smi 输出给出的 ID 时,设备已被反转: GPU 0 变为 Quadro 2000,GPU 1 变为 Quadro K2000。

这是预期的行为还是错误?有谁知道让 nvidia-smi 获得 GPU 的“真实”ID 的解决方法?我可以使用 UUID 通过 nvmlDeviceGetUUID() 获得正确的设备,但使用 nvml API 对于我想要实现的目标来说似乎有点太复杂了。

This 的问题讨论了 CUDA 如何为设备分配 ID,但没有明确的结论。

我正在使用 CUDA 6.5。

编辑:我已经查看了 nvidia-smi 联机帮助页(应该早点这样做......)。它指出:

“建议需要一致性的用户使用 UUDI 或 PCI 总线 ID,因为不能保证设备枚举顺序是一致的”

仍在寻找杂物...

【问题讨论】:

    标签: cuda


    【解决方案1】:

    您可以在 shell 中设置 CUDA 环境的设备顺序以遵循总线 ID 而不是默认的最快卡。需要 CUDA 7 及更高版本。

    export CUDA_DEVICE_ORDER=PCI_BUS_ID
    

    【讨论】:

      【解决方案2】:

      这是预期的行为。

      nvidia-smi 按 PCI 顺序枚举。

      默认情况下,CUDA 驱动程序和运行时 API 不支持。

      您链接的问题清楚地显示了如何关联两种编号/排序方案。

      没有办法让 nvidia-smi 修改其排序方案以匹配将由 CUDA 运行时或驱动程序 API 生成的任何内容。但是,您可以通过在 CUDA 8 中使用 environment variable 来修改 CUDA 运行时枚举顺序。

      【讨论】:

      • 即使文档还声明它按 pciBusId 排序,我怀疑这是唯一的标准,因为在我的机器上 2x Tesla K80 在同一个 pciBusId 上。我想知道这两个婴儿的正确顺序是什么。
      • “2x Tesla K80 在同一个 pciBusid 上”不可能。仔细查看您的 deviceQuery 输出
      • 嗯,同一个 pciBusId 上可以有几张卡(由docs.nvidia.com/cuda/cuda-runtime-api/… 报告),只能通过 pciDeviceID 区分。例如,Tensorflow 打印:第一张卡:pciBusID:0000:00:04.0 第二张卡:pciBusID:0000:00:05.0 但是,两者都具有相同的总线 ID。 “0000:00:05.0”是由“[domain]:[bus]:[device].[function]”构建的(见docs.nvidia.com/cuda/cuda-runtime-api/…
      • 此处使用的 PCI_BUS_ID 令牌是指 PCI 设备编号的完整 BDF 格式。从这个意义上说,两个独立的 GPU 设备不能具有相同的完整 BDF,并且环境变量中使用的令牌将按照已排序的 BDF 顺序一致地对设备进行排序。
      • 我明白了,谢谢你的解释。当有多种格式时,已经认为单独的“pciBusId”有点误导。因此,很高兴知道它是用于订购设备的 Bus:Device.Function (BDF) 表示法。
      【解决方案3】:

      这是预期的行为。

      nvidia-smi 手册页说

      驱动程序返回的自然枚举中基于 0 的 GPU/Unit 索引,

      CUDA API 根据《编程指南》3.2.6.1 设备枚举按计算能力的降序进行枚举。

      我遇到了这个问题,我编写了一个类似于 nvidia-smi 的程序,但枚举设备的顺序与 CUDA API 一致。进一步在程序上的文本参考

      https://github.com/smilart/nvidia-cdl

      我写了这个程序,因为nvidia-smi不能按照CUDA API一致的顺序枚举设备。

      【讨论】:

        猜你喜欢
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 2019-04-24
        相关资源
        最近更新 更多