【问题标题】:Invalid device id when using pytorch dataparallel!使用pytorch dataparallel时设备id无效!
【发布时间】:2020-10-12 18:37:50
【问题描述】:

环境:

  • Win10
  • Pytorch 1.3.0
  • python3.7

问题:

我在 Pytorch 中使用 dataparallel 来使用两个 2080Ti GPU。代码如下:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model = Darknet(opt.model_def)  
model.apply(weights_init_normal) 

model = nn.DataParallel(model, device_ids=[0, 1]).to(device)

但是在运行这段代码时,我遇到以下错误:

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/PyTorch-YOLOv3-master/train.py", line 74, in <module>
    model = nn.DataParallel(model, device_ids=[0, 1]).to(device)
  File "C:\Users\Administrator\Anaconda3\envs\py37_torch1.3\lib\site-packages\torch\nn\parallel\data_parallel.py", line 133, in __init__
    _check_balance(self.device_ids)
  File "C:\Users\Administrator\Anaconda3\envs\py37_torch1.3\lib\site-packages\torch\nn\parallel\data_parallel.py", line 19, in _check_balance
    dev_props = [torch.cuda.get_device_properties(i) for i in device_ids]
  File "C:\Users\Administrator\Anaconda3\envs\py37_torch1.3\lib\site-packages\torch\nn\parallel\data_parallel.py", line 19, in <listcomp>
    dev_props = [torch.cuda.get_device_properties(i) for i in device_ids]
  File "C:\Users\Administrator\Anaconda3\envs\py37_torch1.3\lib\site-packages\torch\cuda\__init__.py", line 337, in get_device_properties
    raise AssertionError("Invalid device id")
AssertionError: Invalid device id

当我调试它时,我发现 get_device_properties() 中的函数 device_count() 返回 1,而我的机器上有 2 个 GPU。 torch._C._cuda_getDeviceCount() 在 Anaconda Prompt 中返回 2。怎么了?

问题:

如何解决这个问题? 如何使用数据并行来使用两个 GPU? 谢谢各位!

【问题讨论】:

  • 您能否告诉我以下命令torch.cuda.is_available()torch.cuda.device_count() 的输出。您在 conda 虚拟环境中安装了 Pytorch,对吗?
  • 感谢您的帮助。我通过在我的脚本中添加os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1" 解决了这个问题。 @JiteshMalipeddi
  • 太棒了!很高兴知道

标签: python-3.x deep-learning pytorch


【解决方案1】:

基本上正如@ToughMind 所指出的,我们需要指定

os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1"

这取决于一个单元中可用的 CUDA 设备,因此如果某人有一个 GPU,则可能适合放置,例如,

os.environ["CUDA_VISIBLE_DEVICES"] = "0"

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2020-07-03
    • 2010-09-30
    相关资源
    最近更新 更多