如果设置 CUDA VISIBLE DEVICE,则会出现训练错误 [关闭]

Posted

技术标签:

【中文标题】如果设置 CUDA VISIBLE DEVICE,则会出现训练错误 [关闭]【英文标题】:Get Training error if setting CUDA VISIBLE DEVICE [closed] 【发布时间】:2020-10-06 12:22:26 【问题描述】:

我正在使用 PyTorch 和 Cuda 10.1。如果我在训练中设置 CUDA VISIBLE DEVICE,损失总是 NAN,如果我不设置 CUDA VISIBLE DEVICE,一切正常。有谁知道问题出在哪里?

【问题讨论】:

请分享您的代码 【参考方案1】:

CUDA_VISIBLE_DEVICES 是存储在 CUDA 文件中的操作系统级别变量,我相信。它控制机器的哪些 GPU 可用于执行 CUDA 计算。它必须在运行代码之前设置。

如果您想控制 pytorch 是否使用 GPU 以及使用哪些 GPU,您应该使用内置的 pytorch.cuda 包进行设备管理。

 import torch

 n_gpus = torch.cuda.device_count()

 if n_gpus > 0:
      device = torch.device("cuda:0") # first device as indexed by pytorch cuda
      print("cuda:0 is device ".format(torch.cuda.get_device_name(device))) # prints name of device

 if n_gpus > 1:  # if you have more than one device, and so on
      device2 = torch.device("cuda:1")
      print("cuda:1 is device ".format(torch.cuda.get_device_name(device2)))

 # from here, decide which device you want to use and
 # transfer files to this device accordingly
 model.to(device)
 x.to(device2)
 # etc.

您想要使用 CUDA_VISIBLE_DEVICES 的唯一原因是如果您有多个 GPU,并且您需要其中一些可用于 Cuda / Pytorch 任务,而其他 GPU 可用于非 cuda 任务,并且担心关于当注册为 pytorch 设备时,torch.cuda 包在 GPU 上消耗的少量 GPU 内存。对于大多数应用程序来说,这不是必需的,您应该只使用 pytorch 的设备管理。

【讨论】:

【参考方案2】:

也许有一些张量不匹配,这些张量转移到 gpu 上,有些在 cpu 上,cuda 无法使用那个张量。

【讨论】:

以上是关于如果设置 CUDA VISIBLE DEVICE,则会出现训练错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

.to(device)和.cuda()设置GPU的区别

os.environ

Tensorflow:将 CUDA_VISIBLE_DIVICES 设置为不同的值时,GPU util 的巨大差异

TensorFlow 设置GPU使用量

(仍未解决)模型搬到GPU,我的程序卡死了:pytorch,cuda,channel的故事

使用tensorflow时,关于GPU的设置