PyTorch 代码中 GPU 编号与 nvidia-smi 命令中的 GPU 编号不一致问题解决方法

本文探讨了在使用PyTorch时,GPU编号与nvidia-smi显示不一致的问题,重点在于如何通过设置CUDA_DEVICE_ORDER为PCI_BUS_ID来统一设备标识。提供了Windows和Ubuntu下的解决方案,适用于TensorFlow和NVIDIA显卡管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

  • nvidia-smi -L 和 PyTorch 代码中 GPU 编号不一致

  • nvidia-smi -L 查看可用 GPU 列表

GPU 0: Quadro Kxxx (UUID: GPU-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
GPU 1: GeForce RTX xxxx (UUID: GPU-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
  • PyTorch 代码中查看可用 GPU 列表
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")
print("GPU 编号: {}".format(device))
print("GPU 名称: {}".format(torch.cuda.get_device_name(1)))


device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print("GPU 编号: {}".format(device))
print("GPU 名称: {}".format(torch.cuda.get_device_name(0)))
输出:
GPU 编号: cuda:1
GPU 名称: Quadro Kxxx
GPU 编号: cuda:0
GPU 名称: GeForce RTX xxxx
  • 可以看出 nvidia-smi 命令中的 GPU 编号与 PyTorch 代码中的 GPU 编号正好相反(两块显卡的情况)

原因

  • nvidia-smi 下的 GPU 编号默认使用 PCI_BUS_ID,而 PyTorch 代码默认情况下设备排序是 FASTEST_FIRST

解决方法

  • 要使 PyTorch 代码中的 GPU 编号与 nvidia_smi 保持一致,需要讲 expert CUDA_DEVICE_ORDER=PCI_BUS_ID 添加到bashrc

  • Windows 下可以在 PyTorch 代码中添加如下:

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
  • Ubuntu 下使用,可以直接添加如下,也可以 CUDA_DEVICE_ORDER=“PCI_BUS_ID” 添加到 bashrc 文件中
export CUDA_DEVICE_ORDER="PCI_BUS_ID"

PS:TensorFlow 如遇相同问题也可以参照修改

参考

  • https://stackoverflow.com/questions/26123252/inconsistency-of-ids-between-nvidia-smi-l-and-cudevicegetname
  • https://github.com/matterport/Mask_RCNN/issues/109
<think>好的,我需要帮助用户找到Python 3.6兼容的PyTorch版本,同时支持NVIDIA驱动572.42和CUDA 12.8。首先,我需要理清各个组件之间的兼容性关系。 首先,Python 3.6是一个较旧的版本,PyTorch的新版本可能再支持它。根据引用[2],用户提到CUDA 9对应的PyTorch版本大多支持Python 3.6。但用户现在使用的是CUDA 12.8,这明显比CUDA 9新很多,可能存在兼容性问题。 接下来,查看PyTorch的官方文档或版本历史,确定哪些版本支持Python 3.6。例如,PyTorch 1.1.0、1.2.0等在引用中提到的版本可能适用。但需要确认这些版本是否支持CUDA 12.8。过,CUDA 12.8是非常新的版本,而PyTorch较旧的版本可能仅支持较旧的CUDA版本,如CUDA 9.x或10.x。 另外,NVIDIA驱动版本572.42需要CUDA 12.8兼容。通常,CUDA版本需要特定的驱动版本支持。例如,CUDA 12.x可能需要驱动版本525及以上,但用户使用的是572.42,这可能足够支持CUDA 12.8,但需要核实官方文档。 然而,这里存在矛盾:Python 3.6支持的PyTorch版本可能支持CUDA 12.8。因为PyTorch的较新版本(支持CUDA 12.x)通常需要Python 3.7或更高版本。例如,PyTorch 2.0及以后可能需要Python 3.8+,而CUDA 12支持可能从PyTorch 1.13开始,但这些版本可能再支持Python 3.6。 因此,可能的解决方案是:用户需要降低CUDA版本到PyTorch支持Python 3.6的版本兼容的版本。例如,使用CUDA 9.2或10.2,并安装对应的PyTorch版本,如PyTorch 1.1.0或1.2.0,如引用[3]中的例子。但用户当前的驱动是572.42,这可能支持较新的CUDA版本,但无法兼容旧的CUDA版本,因为NVIDIA驱动通常向下兼容CUDA,但旧版本的CUDA可能需要特定范围的驱动版本。 可能的结论是:无法在Python 3.6环境下使用CUDA 12.8,因为支持的PyTorch版本兼容。用户可能需要升级Python版本,或者降低CUDA和驱动版本以匹配PyTorch的旧版本。需要进一步确认各个版本的具体兼容性。</think>### 兼容Python 3.6的PyTorch版本CUDA 12.8的适配分析 根据您的需求,需明确以下几点兼容性关系: 1. **Python 3.6的限制** PyTorch从1.8版本开始逐步停止对Python 3.6的支持[^2]。最后官方支持Python 3.6的版本为PyTorch 1.7.1(对应CUDA 10.2/11.0)[^1]。 2. **CUDA 12.8的兼容性** CUDA 12.8是NVIDIA于2024年发布的新版本,需要PyTorch 2.3及以上版本才能支持。但PyTorch 2.3要求Python 3.8或更高版本,Python 3.6兼容。 3. **驱动版本572.42的适配性** NVIDIA驱动572.42支持CUDA 12.x系列,但需注意:**CUDA Toolkit版本必须PyTorch内置的CUDA版本匹配**,而非仅依赖驱动版本。例如,PyTorch 1.7.1支持CUDA 10.2,但无法直接调用CUDA 12.8的功能[^4]。 --- ### 推荐方案 #### 方案一:升级Python版本(推荐) - 将Python升级至3.8+,安装PyTorch 2.3+,直接支持CUDA 12.8: ```bash conda create -n py38 python=3.8 conda install pytorch torchvision torchaudio cudatoolkit=12.1 -c pytorch ``` #### 方案二:降级CUDA版本(需调整驱动) 若必须使用Python 3.6: 1. **降级CUDA至11.0** PyTorch 1.7.1支持CUDA 11.0,需确保驱动版本≥450.80.02: ```bash conda create -n py36 python=3.6 conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch ``` 2. **验证驱动兼容性** 驱动572.42可能支持CUDA 11.0,但需通过`nvidia-smi`确认CUDA版本是否显示为11.0+。 --- ### 版本对应关系参考 | PyTorch版本 | Python要求 | 支持CUDA版本 | 驱动最低要求 | |-------------|------------|--------------|--------------| | 1.7.1 | 3.6-3.8 | 10.2, 11.0 | 450.80.02 | | 2.3.0 | 3.8-3.11 | 12.1 | 535.86.10 | ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn-WJW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值