alibaba / Pai-Megatron-Patch

The official repo of Pai-Megatron-Patch for LLM & VLM large scale training developed by Alibaba Cloud.
Apache License 2.0
711 stars 100 forks source link

qwen2-sft 训练起步阶段就卡住 #325

Open baisechundu opened 2 months ago

baisechundu commented 2 months ago

使用的是 README.md 中推荐的镜像 目前发现有两个问题: 问题一:

megatron_core 0.7.0 Pai-Megatron-Patch 0.8.3 / Pai-Megatron-Patch 0.9.0 都试过

按照 examples/qwen2 下面的README.md,对 Qwen2-1.5B 进行的操作(A100 4ka):

1. TP1 PP1 pretrain 和 sft 均正常
2. TP1 PP2 pretrain 正常,sft 不正常,现象就是:一半的GPU占用显示为100%,另一半是0,训练卡住无法继续
3. TP2  PP2 同2

目前针对qwen2 的 sft,只要TP或者PP超过1,均会出现卡住的情况。

问题二: megatron_patch/data/utils.py 中 代码的147行左右

sep_index = (labels[0] == tokenizer.sep_token_id).nonzero(as_tuple=True)[0]
labels[:, :sep_index] = -100

这里得到的 sep_index 可能为空,或类型是张量,下一行作为索引时会报错(注 :Pai-Megatron-Patch 0.9.0 这个发布包默认使用 idxmap 类型的数据集,会出现此问题。Pai-Megatron-Patch 0.8.3 用的是Raw dataset,不会有这个问题)。

我看到主分支提到了qwen2 的 “hang“ 的情况,主分支的代码我也试过了,还是会卡住。pretrain 和 finetune 的模式是在哪块实现有差异吗?求解惑哈

jerryli1981 commented 2 months ago

您好,更新下代码库,https://github.com/alibaba/Pai-Megatron-Patch/pull/326

jerryli1981 commented 2 months ago

目前llama3.1的sft是同时指出json和idxmap且不会卡住的。qwen2的sft使用json微调应该也不会卡住,如果使用idxmap微调,您需要重新用最新的代码制作下idxmap微调数据,然后用同样的seqlen来启动微调脚本

tzyodear commented 2 months ago

我遇到过问题一的第二点类似的现象。 我是开了micro batch size = 1正常训练, >1就会卡住。原因是在 https://github.com/alibaba/Pai-Megatron-Patch/blob/7c3dc6bb7578da93d9944dd9098e8f1ab24cb183/megatron_patch/data/utils.py#L51

如果不开reset_attention_mask,这里生成的attention mask维度是[1, 1, seq_len, seq_len], 而不是[bs, 1, seq_len, seq_len]。导致维度不一致。 我不太清楚是不是我个人的问题,总之我手动expand了一下shape 就正常运行了

pizts commented 1 month ago

sft训练数据是json的时候,tp=2的时候会卡住,tp=4的时候不卡,不知道啥原因