返回 AIE 系统工程师 思维导图
中文·English
🚀 AIE 系统工程师ID: aie-sft-data-packing-loss-masking

SFT Data Packing 与 Loss Masking

SFT Data Packing & Loss Masking
🎯核心定义
大模型监督微调中的数据打包与损失掩码技术 (SFT Data Packing & Loss Masking Pipeline) 是大幅提升微调吞吐量与保证模型严格专注学习生成内容的核心数据工程方法;核心两大部分:1) Loss Masking (损失掩码 / 标签置 -100): 在多轮对话或 Instruction 数据中,将 System Prompt 与 User Query 对应的 Token 目标标签设为 `-100`(PyTorch 交叉熵中的 `ignore_index`),仅对 Assistant 输出的 Response Token 计算梯度与损失,防止模型浪费宝贵参数容量去生硬记忆固定的 Prompt 模板;2) Data Packing (样本拼接与无填充训练): 将多条短对话(如 200 tokens)通过特殊的分隔符 `<|endoftext|>` 拼接入一个完整的 4096 / 8192 上下文窗口中,彻底消除无意义的 `<pad>` 填充,配合 FlashAttention 变长张量掩码消除跨样本跨文档的注意力污染,使微调吞吐量暴增 3~5 倍。
💡使用场景
企业垂直领域大模型 SFT 微调、多轮对话指令微调、大规模合成数据集高效训练。
解决的核心痛点
朴素训练对长短不一的数据填充大量 Padding 导致高达 70% 的 GPU 算力白白浪费在计算 `<pad>` 占位符上,且若对 Prompt 也计算损失会导致模型严重过拟合 Prompt 词句;Data Packing 与 Loss Masking 实现了 100% 算力利用率与纯净目标对齐。
🎯5 个高频面试考点 (Exam Points)
1
为什么在 SFT 训练时必须对 Prompt 部分做 Loss Masking(将 label 置为 `-100`)?如果不做会导致模型产生什么严重的负面退化?
2
Data Packing 中如何使用 FlashAttention 的 `flash_attn_varlen_func` 与 `cu_seqlens` (累积序列长度数组) 彻底杜绝样本间的跨文档注意力穿越?
3
多轮对话场景下的掩码构建:如何仅对 Assistant 角色的回合开启损失,同时将历史多轮 User / Assistant 文本作为上文仅参与前向?
4
Data Packing 相比传统 Padding 训练在 GPU 显存占用与训练吞吐量 (Tokens/sec) 上的定量加速效果(为什么能提速 3~5 倍)?
5
Chat Template (如 Jinja2 模板格式) 在统一不同开源基础模型(Llama-3, Qwen-2.5, Mistral)特殊 Token(`<|im_start|>`, `<|im_end|>`) 中的标准工程实践?
更新于 2026-08-14
🎯
检验攻克程度:针对「SFT Data Packing 与 Loss Masking」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点Token 成本与 TTFT/TPOT 优化下一个知识点LoRA/QLoRA 显存与权重合并

🔗 更多 AIE 系统工程师 知识点卡片

AIE vs MLE 能力模型与演进高级 Prompt 链与防越狱注入结构化输出与约束解码评估体系 RAGAS 与 SWE-bench