Python 处理pytorch代码时如何利用所有GPU?

Python 处理pytorch代码时如何利用所有GPU?,python,gpu,pytorch,Python,Gpu,Pytorch,我有2个GPU,当我使用pytorch代码时,只使用一个GPU。我尝试了CUDA\u VISIBLE\u DEVICES=0,1 python xxx.py,但发生了错误 “CUDA\u可见\u设备:未找到命令” 问题。我还尝试在对象py文件中添加以下行: import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" 但仍

我有2个GPU,当我使用pytorch代码时,只使用一个GPU。我尝试了
CUDA\u VISIBLE\u DEVICES=0,1 python xxx.py
,但发生了错误

“CUDA\u可见\u设备:未找到命令”

问题。我还尝试在对象py文件中添加以下行:

 import os    
    os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"    
    os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" 

但仍然只有一个GPU被使用

您需要将训练数据分别并行到每个GPU。数据并行是使用
torch.nn.DataParallel
实现的。例如:


设置环境变量的
命令未找到
错误看起来像是在Windows上运行了什么,但这是在类Unix系统上设置环境变量的语法。我遇到了一个类似的错误。Im使用
nn.DataParallel(self.net).to(self.\u设备)
并行化并将其移动到设备。如果我只有一台CUDA设备,一切都会好起来的。但是如果我使用两个设备,我会得到一个
RuntimeError
,因为我的网络中存在大小不匹配(
RuntimeError:size-mismatch,m1:[1 x 144],m2:[288 x 256]at/pytorch/aten/src/THC/generic/THCTensorMathBlas.cu:249
)。我使用的批处理大小为16,因此在将数据分离到设备上时应该不会有任何问题。你知道发生了什么事吗?
import torch
import torch.nn as nn


class DataParallelModel(nn.Module):

    def __init__(self):
        super().__init__()
        self.block1 = nn.Linear(10, 20)

        # wrap block2 in DataParallel
        self.block2 = nn.Linear(20, 20)
        self.block2 = nn.DataParallel(self.block2)

        self.block3 = nn.Linear(20, 20)

    def forward(self, x):
        x = self.block1(x)
        x = self.block2(x)
        x = self.block3(x)
        return x