torch.cuda.is_available()显示True但运行特定项目报No CUDA GPUs available求助
排查思路
- 检查项目代码的设备指定逻辑
打开项目的imagenet.py,排查是否存在硬编码指定CPU设备的代码(比如torch.device('cpu')),或者是否有参数控制设备选择(比如--cpu)被误触发。同时确认模型加载、数据处理环节的设备分配逻辑是否正确。 - 验证运行环境一致性
在项目目录下执行以下命令,确认当前环境的PyTorch和CUDA状态:
对比输出和你测试python -c "import torch; print(torch.cuda.is_available()); print(torch.__version__); print(torch.version.cuda)"torch.cuda.is_available()时的环境信息,确保两者是同一个Python环境(比如同个conda虚拟环境),PyTorch、CUDA版本完全匹配。 - 检查模型Checkpoint的设备兼容性
加载的Checkpoint文件可能是在CPU环境下保存的,或者未正确记录设备信息。可以修改模型加载代码,显式指定CUDA设备:checkpoint = torch.load(args.load, map_location='cuda') model.load_state_dict(checkpoint['state_dict']) - 排查GPU资源占用情况
执行nvidia-smi命令查看GPU的显存占用和进程列表,确认没有其他进程耗尽GPU资源或独占设备。如果有高占用进程,关闭后重新运行项目命令。 - 分析MixBN模块的设备处理逻辑
项目使用了--mixbn参数,该特性可能涉及多设备或分布式配置。查看MixBN相关代码,确认是否在初始化时错误禁用了CUDA,或者是否需要额外的分布式环境设置(如torch.distributed.init_process_group)而当前环境未满足。 - 临时禁用MixBN测试
去掉--mixbn参数,执行以下命令测试:
如果运行正常,说明问题出在MixBN模块的设备处理逻辑上,可针对性调试该部分代码。python imagenet.py -a resnet50 --data %DATA% --evaluate --load %CKPT%
内容的提问来源于stack exchange,提问作者Hemfri
相关产品推荐
相关产品推荐

