pytorchテストエラー:RuntimeError:cuda runtime error(10):invalid device ordinal at torch/csrc/cuda/Module
2858 ワード
モデルはサーバのマルチgpuで訓練され、テストは自分のデスクトップで行われ、gpuが1つしかなく、テストエラー:
エラーシーン:私はサーバーでグラフィックス4,5,6,7でモデルを訓練しましたが、モデルはまだ走り続けているので、自分のデスクトップで訓練モデルの中間結果をテストしました.デスクトップはgpu 0しかありません.pytorchで再load訓練した深さ学習モデル時報ミス:RuntimeError:cuda runtime error(10):invalid device ordinal at torch/csrc/cuda/Module.cpp:32.
エラーの原因;このエラーの原因はpytorchがsaveモデルの時にグラフィックスカードの情報も保存し、再loadすると、同じグラフィックスカードではないことに気づいてinvalid device ordinalをエラーしたためです.
解決方法:
前のコードは変更されていません:
変更後:
詳細については、以下を参照してください.https://blog.csdn.net/yinhui_zhang/article/details/86572232
File "/home/fuxueping/sdb/PycharmProjects/face_recognition/test_face_recognition_pytorc
h.py", line 563, in
test(method)
File "/home/fuxueping/sdb/PycharmProjects/face_recognition/test_face_recognition_pytorc
h.py", line 547, in test
regfeat = extractFeature_mobileFace(net, regimglist, batch)
File "/home/fuxueping/sdb/PycharmProjects/face_recognition/test_face_recognition_pytorc
h.py", line 190, in extractFeature_mobileFace
checkpoint = torch.load(model)
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/serialization.py", line 303, in load
return _load(f, map_location, pickle_module)
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/serialization.py", line 469, in _load
result = unpickler.load()
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/serialization.py", line 437, in persistent_load
data_type(size), location)
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/serialization.py", line 88, in default_restore_location
result = fn(storage, location)
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/serialization.py", line 70, in _cuda_deserialize
return obj.cuda(device)
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/_utils.py", line 68, in _cuda
with torch.cuda.device(device):
File "/home/fuxueping/anaconda2/envs/pytorch_yolov3/lib/python3.6/site-
packages/torch/cuda/__init__.py", line 227, in __enter__
torch._C._cuda_setDevice(self.idx)
RuntimeError: cuda runtime error (10) : invalid device ordinal at torch/csrc/cuda/Module.cpp:32
エラーシーン:私はサーバーでグラフィックス4,5,6,7でモデルを訓練しましたが、モデルはまだ走り続けているので、自分のデスクトップで訓練モデルの中間結果をテストしました.デスクトップはgpu 0しかありません.pytorchで再load訓練した深さ学習モデル時報ミス:RuntimeError:cuda runtime error(10):invalid device ordinal at torch/csrc/cuda/Module.cpp:32.
エラーの原因;このエラーの原因はpytorchがsaveモデルの時にグラフィックスカードの情報も保存し、再loadすると、同じグラフィックスカードではないことに気づいてinvalid device ordinalをエラーしたためです.
解決方法:
前のコードは変更されていません:
#gpu 0
checkpoint = torch.load(model)
state_dict = {k.replace("module.", ""): v for k, v in checkpoint.items()}
net.load_state_dict(state_dict)
変更後:
#gpu 0
checkpoint = torch.load(model,map_location=lambda storage, loc: storage.cuda(0))
state_dict = {k.replace("module.", ""): v for k, v in checkpoint.items()}
net.load_state_dict(state_dict)
詳細については、以下を参照してください.https://blog.csdn.net/yinhui_zhang/article/details/86572232