You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch指定GPU仍提示设备忙,多GPU识别异常求助

解决办法

1. 确保环境变量在导入PyTorch前设置

你的脚本中os.environ配置必须放在导入torch的代码之前,否则PyTorch初始化CUDA时不会读取新设置的环境变量。正确的代码顺序如下:

import os
# 先设置CUDA环境变量
os.environ["CUDA_DEVICE_ORDER"] = 'PCI_BUS_ID'
os.environ["CUDA_VISIBLE_DEVICES"] = '2,3,4'
# 再导入PyTorch
import torch

print(f'[INFO] Available GPUs: {torch.cuda.device_count()}')
for d in range(torch.cuda.device_count()):
    print(f'映射后GPU {d} (对应原GPU {["2","3","4"][d]}): {torch.cuda.get_device_name(d)}')

正常生效后,device_count会显示为3,而非10。

2. 检查全局环境变量是否覆盖临时设置

查看系统或用户的全局配置文件(如~/.bashrc、~/.profile、/etc/profile)中是否预先设置了CUDA_VISIBLE_DEVICES,全局配置会覆盖你临时设置的值。可以用以下命令排查:

grep -r "CUDA_VISIBLE_DEVICES" ~/.bashrc ~/.profile /etc/profile

如果发现全局配置,可先清除再启动脚本:

unset CUDA_VISIBLE_DEVICES && CUDA_VISIBLE_DEVICES=2,3,4 python gdxray_cganTrainer.py

3. 验证目标GPU是否真的空闲

执行nvidia-smi命令,确认GPU#2、#3、#4没有被其他进程占用:

nvidia-smi

如果这些GPU的Used GPU Memory不为0,或存在未知PID,需终止对应进程:

# 替换<PID>为占用GPU的进程ID
kill -9 <PID>

4. 代码中使用映射后的GPU索引

设置CUDA_VISIBLE_DEVICES=2,3,4后,PyTorch会将原GPU#2映射为cuda:0,原GPU#3映射为cuda:1,原GPU#4映射为cuda:2。代码中需使用映射后的索引,而非原GPU编号:

# 单GPU使用示例
device = torch.device('cuda:0')  # 对应原GPU#2
# 多GPU并行示例
model = torch.nn.DataParallel(model, device_ids=[0,1,2])

5. 升级PyTorch版本(可选)

torch 1.8.0与cuda 11.1的组合存在部分环境变量处理的已知bug,升级到更稳定的版本(如1.12.x系列)可解决兼容性问题:

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113

内容的提问来源于stack exchange,提问作者ROBOTechnics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:05:23