【问题标题】:How to swap from gpu to a cpu only?如何仅从 gpu 交换到 cpu?
【发布时间】:2019-11-06 18:06:27
【问题描述】:

您好,我想知道如何在我的 CPU 而不是 GPU 上运行机器学习代码?

我尝试在设置文件中将 GPU 设为 false,但无法修复它。

### 全局设置
GPU = False                                                                 # running on GPU is highly suggested
CLEAN = False                                                                # set to "True" if you want to clean the temporary large files after generating result
APP = "classification"                                                       # Do not change! mode choide: "classification", "imagecap", "vqa". Currently "imagecap" and "vqa" are not supported.
CATAGORIES = ["object", "part"]                                              # Do not change! concept categories that are chosen to detect: "object", "part", "scene", "material", "texture", "color"
map_location='cpu'

CAM_THRESHOLD = 0.5                                                          # the threshold used for CAM visualization
FONT_PATH = "components/font.ttc"                                            # font file path
FONT_SIZE = 26                                                               # font size
SEG_RESOLUTION = 7                                                           # the resolution of cam map
BASIS_NUM = 7       
Traceback (most recent call last):
  File "test.py", line 22, in <module>
    model = loadmodel()
  File "/home/joshuayun/Desktop/IBD/loader/model_loader.py", line 44, in loadmodel
    checkpoint = torch.load(settings.MODEL_FILE)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 387, in load
    return _load(f, map_location, pickle_module, **pickle_load_args)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 574, in _load
    result = unpickler.load()
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 537, in persistent_load
    deserialized_objects[root_key] = restore_location(obj, location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 119, in default_restore_location
    result = fn(storage, location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 95, in _cuda_deserialize
    device = validate_cuda_device(location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 79, in validate_cuda_device
    raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.

【问题讨论】:

  • 请不要不要在同一个问题中同时使用python-3.xpython-2.7 标签 - 这没有任何意义。
  • 你试过torch.cuda.set_device('cpu')吗?

标签: python gpu pytorch


【解决方案1】:

如果您使用的是从 nn.Module 扩展的模型,您可以将整个模型移动到 CPU 或 GPU,这样做:

device = torch.device("cuda")
model.to(device)
# or
device = torch.device("cpu")
model.to(device)

如果您只想移动一个张量:

x = torch.Tensor(10).cuda()
# or
x = torch.Tensor(10).cpu()

【讨论】:

    【解决方案2】:

    如果我没记错的话,您会在代码model = loadmodel() 处收到上述错误。我不知道你在 loadmodel() 里面做什么,但你可以尝试以下几点:

    • defaults.device 设置为cpu。要完全确定,请添加torch.cuda.set_device('cpu')
    • torch.load(model_weights) 更改为torch.load(model_weights, map_location=torch.device('cpu'))

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 2018-12-07
      • 2020-04-12
      • 2012-07-03
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2012-07-29
      相关资源
      最近更新 更多