PyTorch CPU版本训练时CUDA初始化错误求助
解决RuntimeError: Cannot initialize CUDA without ATen_cuda library错误
嘿,我看了你的问题和代码,很快就定位到了问题核心——你虽然正确写了设备判断逻辑,但在代码的几个关键地方手动强制把张量转换成了CUDA类型,这直接导致CPU版本的PyTorch尝试加载CUDA库,触发了那个错误。
问题根源
看这两处代码:
- 在
net_sample_output函数里,你硬写了:images = images.type(torch.cuda.FloatTensor) - 在
train_net函数里,又重复了同样的错误:key_pts = key_pts.type(torch.cuda.FloatTensor) images = images.type(torch.cuda.FloatTensor)
不管当前设备是CPU还是CUDA,你都强制要求张量变成CUDA类型,这在CPU版PyTorch环境下必然出问题——因为系统里根本没有CUDA相关的库可以加载!
修复步骤
你只需要把这些强制转CUDA的代码,改成适配你已经定义好的device变量的写法,这样代码既能在CPU上正常跑,以后切换到CUDA环境也不用改:
1. 修复net_sample_output函数
替换原来的强制转CUDA代码:
# 先转成float类型,再移到指定设备 images = images.float().to(device)
2. 修复train_net函数
替换两处强制转CUDA的代码:
key_pts = key_pts.float().to(device) images = images.float().to(device)
3. 额外确认
你已经做了net = Net().to(device),这部分是正确的,保证了模型运行在指定设备上。现在修复张量转换后,模型和所有输入张量都会处于同一个设备(CPU),不会再尝试触发CUDA相关操作。
验证效果
修改完成后重新运行代码,torch.cuda.is_available()会返回False(因为你安装的是CPU版PyTorch),设备会自动设为cpu,所有计算都在CPU上执行,那个CUDA初始化的错误应该就彻底消失了。
而且这个写法还有额外优势:以后如果想切换到CUDA环境,只需要安装对应版本的PyTorch,代码完全不用改动——device会自动识别到CUDA,所有张量和模型都会自动迁移到GPU上运行,兼容性拉满。
内容的提问来源于stack exchange,提问作者Hamza Ahmed
相关产品推荐
相关产品推荐

