pytorchテストエラー:RuntimeError:cuda runtime error(10):invalid device ordinal at torch/csrc/cuda/Module

2858 ワード

モデルはサーバのマルチgpuで訓練され、テストは自分のデスクトップで行われ、gpuが1つしかなく、テストエラー:
  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