1. 多机多卡跑不起来,多机间不能通信,报错如下
Call to connect returned Connection refused, retrying
解决方案:
deepspeed环境依赖问题,重新装pytorch依赖;
conda install pytorch==1.12.0 \
torchvision==0.13.0 \
torchaudio==0.12.0 \
cudatoolkit=11.3 -c pytorch
2. 使用官方ChatGLM-6B 代码训练的时候 loss不降不明显
解决方案:
通过换为ChatGLM-Finetuning的训练框架,loss下降平稳
git clone https://github.com/liucongg/ChatGLM-Finetuning.git
3. ChatGLM-Finetuning官方代码采样器的时候用的是随机采样,导致8卡单机只能跑6卡
解决方案:
改源码,调整成支持对训练数据分布式采样
# 改成分布式采样
# DataLoaders creation:
if args.local_rank == -1:
train_sampler = RandomSampler(train_dataset)
else:
train_sampler = DistributedSampler(train_dataset)
train_dataloader = DataLoader(train_dataset,
batch_size=conf["train_micro_batch_size_per_gpu"],
sampler=train_sampler,
collate_fn=coll_fn,
drop_last=True,
num_workers=0)
4. 将代码改成支持分布式采样之后,分布式跑10万级训练数据没问题,扩大到100万级训练数据之后依旧只能跑6卡的问题
问题原因:
在训练100万级训练数据时,向量化数据需要4个小时左右,向量化后的数据占用内存在140G左右,默认情况下分布式训练每个进程都需要加载完整数据集,在当前单机8卡机器内存总共只有1T的情况下,最多只能使用6卡,有1/4的资源空闲。
解决方案:
改源码,重写dataset逻辑为:
- 均分完整数据集到所有进程;
- 训练时每个进程同一时间只加载单个分段大小(batch_size)数据集;
- token转向量后的内存数据dump到文件,重新训练的时候加载向量化后的数据。
- 模型训练过程中,训练数据质量比较关键,扩充训练样本的特征提示,可以提升模型训练效果。
- 多机训练时,每台机器的训练代码和环境务必一致。

1万+

被折叠的 条评论
为什么被折叠?



