M5-021M5: NLP & Large Language ModelsInstruction Tuning & Supervised Fine-TuningEasy
Mastery:
Instruction Tuning & Supervised Fine-Tuning: 解释损失掩码与序列打包(packing)的作用。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 损失掩码让损失只算在回答上;打包把多条短样本拼成定长序列以提高利用率,需用注意力隔离防跨样本泄漏。
📌 Key Takeaways
- •损失掩码:只监督回答,避免模型学'生成指令'
- •打包:多条短样本拼成定长,减少 padding 浪费
- •打包需注意力隔离(否则跨样本信息泄漏)
📐 Mathematical Derivations
数学机理:<strong>两个工程技巧</strong>。<strong>(1) 损失掩码(loss masking)</strong>——SFT 的输入是'指令 + 回答'的拼接,但损失只应算在<strong>回答</strong>部分:实现上把指令部分的 label 设为 <strong>−100</strong>(PyTorch 的 <code>ignore_index</code>),使交叉熵忽略这些位置。<strong>作用</strong>:(a) 让模型专注于'生成回答'(与推理行为一致);(b) 避免模型学会'生成用户指令'(否则会出现'自问自答')。<strong>与 chat template 配合</strong>——模板需明确标记'哪些是 assistant 的 token'(如特殊 token <code><|assistant|></code>),以便正确掩码。<strong>(2) 序列打包(sequence packing)</strong>——SFT 数据的长度<strong>差异极大</strong>(有的几十 token、有的几千);若按 batch 内最长序列 padding,则大量计算浪费在 padding 上(利用率可能只有 20%~50%)。<strong>打包</strong>的做法:把<strong>多条样本拼接</strong>成固定长度(如 4096)的序列,使每条序列都'填满';配合<strong>注意力隔离</strong>(block-diagonal mask,让每个样本只能关注自己内部)与<strong>位置编码重置</strong>(每个样本的位置从 0 开始),避免跨样本信息泄漏。<strong>收益</strong>——(a) <strong>吞吐提升</strong>(减少 padding,利用率接近 100%);(b) <strong>训练稳定性</strong>(固定长度便于批量);(c) <strong>成本降低</strong>(同等数据量下步数更少)。<strong>注意点</strong>——(a) 打包改变了'注意力可见范围',必须正确设置 mask(否则模型会学到'跨样本依赖',表现为对拼接顺序敏感);(b) 损失掩码需<strong>逐样本</strong>设置(只监督各样本的回答部分);(c) 位置编码需重置(否则后一个样本的位置被'推远',影响长度泛化)。<strong>实证</strong>——打包可提升 SFT 吞吐 2~3 倍,是工业界 SFT 的标准做法。
🏭 Production Trade-offs
深度剖析与工程权衡:① <strong>'打包必须配隔离'是易错点</strong>——朴素拼接会让模型看到前一个样本的内容(信息泄漏),导致 (a) 训练-推理不一致(推理时没有前文)、(b) 模型可能学会'续写上一样本';(c) 位置编码混乱。故实现时必须用 block-diagonal mask + 位置重置。② <strong>与'padding 效率'的量化</strong>——若样本长度分布偏斜(多数短、少数长),朴素 padding 的利用率可能低至 20%;打包可把它提到 >90%。这是'数据管道优化'带来的直接成本收益。③ <strong>打包与'多轮对话'的兼容</strong>——多轮对话本身是一条长序列(含多轮),不应被拆散打包;故需按'对话为单位'打包(每条对话是一个不可分割的样本)。④ <strong>损失掩码与'训练目标'的关系</strong>——若想让模型学会'多轮中每轮都回应',则需对所有 assistant 轮都算损失;若只关心最后一轮,则只算最后一轮。这决定模型的多轮行为。⑤ <strong>与其他 SFT 技巧的组合</strong>——打包常与 (a) 动态 batch(按 token 数而非样本数组批)、(b) 梯度累积、(c) 序列长度课程 配合使用。⑥ <strong>面试要点</strong>——被问'SFT 训练效率怎么优化',应给出'<strong>序列打包(减少 padding)+ 注意力隔离 + 位置重置 + 动态 batch</strong>'的组合,并强调'<strong>打包必须配隔离否则泄漏</strong>';能说明'损失掩码防止自问自答'是深度理解的标志。
⚠️ Common Interview Pitfalls
- ✕打包时不加注意力隔离(跨样本信息泄漏)
- ✕对指令部分也计算损失
🎯 Interviewer Follow-ups
- ?打包时为什么需要注意力隔离?
- ?打包与'损失掩码'如何配合?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.