torch.cuda.is_available()返回True但加载模型报CUDA不可用如何解决
解决方案
你遇到的交互环境CUDA可用、脚本运行报错的核心原因是两个场景的运行环境/环境变量不一致,按以下步骤排查即可:
- 第一步:确认脚本运行环境和交互环境是否一致
在报错脚本的最开头加入以下代码,执行后输出结果:
import torch import sys import os # 输出当前Python解释器路径,和交互环境执行`import sys; print(sys.executable)`的结果对比 print("当前Python解释器路径:", sys.executable) print("当前PyTorch版本:", torch.__version__) print("脚本内CUDA可用状态:", torch.cuda.is_available()) print("CUDA可见设备变量:", os.environ.get("CUDA_VISIBLE_DEVICES"))
如果两个场景的Python解释器路径不同,说明脚本使用的Python环境没有安装带CUDA支持的PyTorch版本,切换到你测试的交互环境运行脚本即可。
第二步:排查CUDA可见设备环境变量
如果第一步确认解释器路径一致,看输出的CUDA_VISIBLE_DEVICES值,如果为-1或者空值,说明你运行脚本的终端环境设置了屏蔽GPU的环境变量。Linux环境可执行export CUDA_VISIBLE_DEVICES=0恢复,Windows环境可执行set CUDA_VISIBLE_DEVICES=0恢复后再运行脚本。第三步:兼容写法适配所有场景
不管上述排查结果如何,都可以直接使用兼容CPU/GPU环境的模型加载写法,避免反序列化报错:
# 自动适配当前设备 load_device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = torch.load("你的模型文件路径", map_location=load_device)
该写法无需修改原有逻辑,同时适配有CUDA、无CUDA的运行环境,比固定映射到CPU的方案更灵活。
内容的提问来源于stack exchange,提问作者Movinggun0822
相关产品推荐
相关产品推荐

