起因:把环境换成pytorch2.0之后,出现如下问题:
- torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_g
- pus INTERNAL ASSERT FAILED at "../aten/src/ATen/cuda/CUDAContext.cpp":50, please report a bug to PyTorch.
由于这个代码很久没有跑过了,换了2.0的环境就出现这个问题,上网搜了一些资料,有说让代码中的CUDA_VISIBLE_DEVICES注释了,但由于本人是一个双卡的机器,只想用第二块显卡,如果注释了就会导致代码也会允许在第一块显卡运行。
由于在调研的过程中有2种方法:
,在模型进入gpu的时候修改,由
model = model.cuda()
变为:
- model.cuda(gpu_id) # gpu_id为int类型变量,只能指定一张显卡
- model.cuda('cuda:'+str(gpu_ids)) #输入参数为str类型,可指定多张显卡
- model.cuda('cuda:1,2') #指定多张显卡的一个示例
但这种方法比较麻烦,因为会导致你的代码需要多处的修改。
也是针对我自己的方法,我出现这个问题是因为我的
os.['CUDA_VISIBLE_DEVICES']
没有设置好。这行代码一定要放在代码的最前端(原因就是因为当你调用torch的时候,如果import进来的其他文件中import了torch,就因为执行.py文件时会优先import其他包中的torch)