如何在pytorch中使用多个GPU训练模型?

mutmk8jj  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(185)

我的服务器有两个GPU,我如何同时使用两个GPU进行训练,以最大限度地提高它们的计算能力?我下面的代码正确吗?它是否允许我的模型得到正确的训练?

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.bert = pretrained_model
        # for param in self.bert.parameters():
        #     param.requires_grad = True
        self.linear = nn.Linear(2048, 4)

    #def forward(self, input_ids, token_type_ids, attention_mask):
    def forward(self, input_ids, attention_mask):
        batch = input_ids.size(0)
        #output = self.bert(input_ids, token_type_ids, attention_mask).pooler_output
        output = self.bert(input_ids, attention_mask).last_hidden_state
        print('last_hidden_state',output.shape) # torch.Size([1, 768]) 
        #output = output.view(batch, -1) #
        output = output[:,-1,:]#(batch_size, hidden_size*2)(batch_size,1024)
        output = self.linear(output)
        return output

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
if torch.cuda.device_count() > 1:
    print("Use", torch.cuda.device_count(), 'gpus')
    model = MyModel()
    model = nn.DataParallel(model)
    model = model.to(device)
n6lpvg4x

n6lpvg4x1#

在多个GPU上训练有两种不同的方法:
1.数据并行性=将无法放入单个GPU内存的大批数据拆分到多个GPU中,以便每个GPU处理可以放入其GPU的小批数据
1.模型并行性=将模型中的层拆分到不同的设备中管理和处理起来有点棘手。
Please refer to this post for more information
要在纯PyTorch中执行数据并行,请参考我不久前创建的this example,以了解PyTorch的最新变化(截至今天,1.12)。
要利用其他库进行多GPU训练,而不需要设计很多东西,我建议使用PyTorch Lightning,因为它有一个简单的API和良好的文档,可以学习如何使用数据并行进行多GPU训练。
更新日期:2022年10月25日
以下视频详细介绍了不同类型的分布式培训:https://youtu.be/BPYOsDCZbno?t=1011

huwehgph

huwehgph2#

我使用数据并行。我参考了this link。这是一个有用的参考。

相关问题