yuanzhoulvpi2017 / zero_nlp

中文nlp解决方案(大模型、数据、模型、训练、推理)
MIT License
3.03k stars 368 forks source link

chatglm6b_v2 单机多卡训练会卡死 #138

Open zoepo opened 1 year ago

zoepo commented 1 year ago

使用的官方checkpoint及大佬的代码,数据集为广告词,官方代码相应位置已经修改,设备是单机两张T4显卡,双卡显存全部爆满,同时epoch进行不下去会卡死 WX20230720-172044

yuanzhoulvpi2017 commented 1 year ago

你这是改了代码吧,看样子,你用了数据并行,并没有用模型并行,检查一下代码

zoepo commented 1 year ago

你这是改了代码吧,看样子,你用了数据并行,并没有用模型并行,检查一下代码

应该是只动了的内容train.sh,能请大佬指点一下具体需要检查哪一块吗?

yuanzhoulvpi2017 commented 1 year ago

我发布的版本,是模型并行的,但是你这个显示是数据并行。不知道你到底改了什么。建议你把修改的地方,对我说一下,我才知道怎么解决

zoepo commented 1 year ago

我发布的版本,是模型并行的,但是你这个显示是数据并行。不知道你到底改了什么。建议你把修改的地方,对我说一下,我才知道怎么解决

我这边重新下载了代码,还是出现一样的问题

yuanzhoulvpi2017 commented 1 year ago

检查一下版本问题吧,把transformers升级到最高吧

zoepo commented 1 year ago

检查一下版本问题吧,把transformers升级到最高吧

确实是transformers的问题,更新后这个问题没了,但是出现新的cuda bug,如图 image image

yuanzhoulvpi2017 commented 1 year ago

看看本机能不能用模型并行,参考这个链接https://pytorch.org/tutorials/intermediate/model_parallel_tutorial.html


import torch
import torch.nn as nn
import torch.optim as optim

class ToyModel(nn.Module):
    def __init__(self):
        super(ToyModel, self).__init__()
        self.net1 = torch.nn.Linear(10, 10).to('cuda:0')
        self.relu = torch.nn.ReLU()
        self.net2 = torch.nn.Linear(10, 5).to('cuda:1')

    def forward(self, x):
        x = self.relu(self.net1(x.to('cuda:0')))
        return self.net2(x.to('cuda:1'))

model = ToyModel()
loss_fn = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)

optimizer.zero_grad()
outputs = model(torch.randn(20, 10))
labels = torch.randn(20, 5).to('cuda:1')
loss_fn(outputs, labels).backward()
optimizer.step()