已关闭
[Bug]:预训练时数据packing不支持文档边界隔离,希望增加支持 #536
不能没有光头强创建于  7月28日关闭于  5 天前
不能没有光头强
不能没有光头强
7月28日 创建

在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。

⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:

  • API 令牌或密钥
  • 密码或身份验证凭证
  • 私有网址或接口地址
  • 个人或机密数据
  • ...

在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用 <TOKEN> 等占位符替代原有内容。

1、环境信息

服务器型号:

Atlas 900 RCK A2 Compute Node

系统信息:

NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"

CANN信息:

Ascend/8.5.0/

NPU驱动

Version: 25.5.0

2、问题描述和诉求

MM框架使用FSDP对qwen3_5_moe进行预训练,数据packing时缺失文档边界,导致后面数据能关注到前面的内容不相关的数据,可能导致由此训练出来的模型,在回答问题时具有跳跃性,概率性输出与问题无关的内容。

3、问题定界

data.dataset param.basic_parameters.stage: pretrain时:
 - qwen2v1dataset.py:256-259 自动 packing=True 并选 PretrainDatasetprocessor;
 - PretrainDatasetProcessor(convert.py:891-900)把 X1<eos>X2<eos>... 拼接后切成 cutoff_len 块,只产出 input_ids/attention_mask, 不产出 cu_seqlens、不重置 position_ids、不设 label 边界;
- batch 无 cu_seqlens → 模型 use_packing=False ( modeling_qwen3_5_moe.py:1941) → FA2 走全局 causal、 GDN 走单段。
所以后面(docB)的数据能关注到前面(docA)不相关的数据。

4、诉求

针对预训练确实有packing不分隔文档边界的例子,目的是提高计算效率,
但对于文档边界敏感的训练任务,希望预训练也能提供边界分隔,即:允许用户在预训练数据packing时选择开启或关闭文档边界隔离。
希望尽快适配支持

likedislike
ascend-robotascend-robot成员
7月28日 添加了label:bug
不能没有光头强
不能没有光头强
7月28日 评论:

补充:基于FSDP的qwen3.5_Moe训练

likedislike
不能没有光头强不能没有光头强
7月30日 修改标题为 “[Bug]:预训练时数据packing不支持文档边界隔离,希望增加支持”,原标题为“[Bug]: 不支持per-doc attention吗?”
不能没有光头强不能没有光头强
7月30日 修改了issue 的描述
不能没有光头强不能没有光头强
7月30日 修改了issue 的描述
htwang成员
7月30日 评论:

欢迎使用MindSpeed MM,您的问题已收到。

likedislike
yeqm成员
6 天前 评论:

感谢反馈
当前 master 分支中,FSDP2 预训练 packing 会将文档拼接后按 cutoff_len 切分,尚未生成用于文档边界隔离的 cu_seqlens、重置后的 position_ids 以及跨文档 label 边界,因此确实存在跨文档 attention/序列状态传播的问题。
相关能力正在 PR !3054:feat(fsdp): support multimodal pretrain packing 中适配。该 PR 会按完整文档进行 packing,并生成:

  • cu_seqlens,隔离不同文档的 attention 及线性注意力状态;
  • 文档内重新计数的 position_ids;
  • 文档首 token 的 ignore label,避免产生跨文档 next-token loss。
likedislike
Yyeqm成员
5 天前 issue状态由 TODO 改变为 DONE
Yyeqm成员
5 天前 关闭了 issue
ascend-robotascend-robot成员
5 天前 添加了label:resolved