RuntimeError: Попытка десериализации объекта на устройстве CUDA 2, но torch.cuda.device_count () - 1 - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть фрагмент кода Python для обучения модели. Проблема в том, что после запуска:

loaded_state = torch.load(model_path+seq_to_seq_test_model_fname)

для загрузки предварительно обученной модели, я получаю:

  Traceback (most recent call last):
  File "img_to_text.py", line 480, in <module>
    main()
  File "img_to_text.py", line 475, in main
    r = setup_test()
  File "img_to_text.py", line 259, in setup_test
    s2s_data = s2s.setup_test()
  File "/media/ahrzb/datasets/notebooks/mzh/SemStyle/semstyle/code/seq2seq_pytorch.py", line 220, in setup_test
    loaded_state= torch.load(model_path+seq_to_seq_test_model_fname)
  File "/home/ahrzb/.pyenv/versions/2.7.15/envs/mzh2.7/lib/python2.7/site-packages/torch/serialization.py", line 358, in load
    return _load(f, map_location, pickle_module)
  File "/home/ahrzb/.pyenv/versions/2.7.15/envs/mzh2.7/lib/python2.7/site-packages/torch/serialization.py", line 542, in _load
    result = unpickler.load()
  File "/home/ahrzb/.pyenv/versions/2.7.15/envs/mzh2.7/lib/python2.7/site-packages/torch/serialization.py", line 508, in persistent_load
    data_type(size), location)
  File "/home/ahrzb/.pyenv/versions/2.7.15/envs/mzh2.7/lib/python2.7/site-packages/torch/serialization.py", line 372, in restore_location
    return default_restore_location(storage, location)
  File "/home/ahrzb/.pyenv/versions/2.7.15/envs/mzh2.7/lib/python2.7/site-packages/torch/serialization.py", line 104, in default_restore_location
    result = fn(storage, location)
  File "/home/ahrzb/.pyenv/versions/2.7.15/envs/mzh2.7/lib/python2.7/site-packages/torch/serialization.py", line 85, in _cuda_deserialize
    device, torch.cuda.device_count()))

Я думаю, это потому, что они обучили модель на двух графических процессорах, и мне нужно загрузить ее в один графический процессор. Я изменил эту строку:

loaded_state = torch.load(model_path+seq_to_seq_test_model_fname) 

до

loaded_state = torch.load(model_path+seq_to_seq_test_model_fname, map_location={'cuda:1': 'cuda:0'} ) 

для отображения данных cuda 1 на cuda 0, но это не сработало.

1 Ответ

0 голосов
/ 07 ноября 2018

Я только что понял:

 loaded_state = torch.load(model_path+seq_to_seq_test_model_fname,map_location='cuda:0')

это решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...