知识全景图/ 软件工程与系统/ 人工智能全景图/ Batching / Padding / Masking

Batching、Padding、Masking 与 Sequence Packing 底层图谱

把可变长文本变成 GPU 可计算的长方形张量,并分清哪些 token 能看、哪些 token 计入 loss、哪些 token 只是占位

阅读定位: Tokenizer回答文字怎样变成 token id, 语言建模目标回答 next-token loss 怎样定义, Transformer回答 token 之间怎样计算。 本页夹在它们中间,专门回答工程里最容易混掉的一层:不同长度的序列怎样拼成 batch,mask 怎样决定可见性与训练目标,packing 怎样节省 token 又不串样本。
一、从可变长文本到长方形张量
Raw Text
长短不一
Token IDs
离散序列
Padding / Packing
对齐形状
Masks / Labels
可见性 / loss
Batch Tensor
[B, T]
对象它是什么为什么存在常见误解
sequence一条样本的 token id 序列模型真正处理的是 token id,不是原始字符串把自然语言里的“句子”直接等同于模型输入
batch多条样本组成的一次计算单元GPU 擅长并行矩阵计算,batch 能提高吞吐batch 只是把样本随便放一起
padding把短序列补到同一长度的占位 token张量需要规则形状,通常形成 [batch, seq_len]padding token 会像普通 token 一样参与训练
attention mask标记哪些位置是真 token,哪些位置是 pad避免模型关注或统计无意义占位符attention mask 和 causal mask 是同一个东西
loss mask标记哪些 label 计入训练 loss控制模型到底为哪些 token 负责能被 attention 看到就一定要算 loss
packing把多条短样本拼进一个固定长度窗口减少 padding 浪费,提高训练 token 利用率packing 只是简单拼接,不需要边界 mask
二、四种 Mask 不要混在一起
Mask / 字段回答的问题典型形状错了会怎样
attention_mask这个位置是不是有效 token[B, T]pad 被模型读取,或者真实 token 被误屏蔽
causal_mask当前位置能不能看未来 token[T, T] 或内置三角 mask训练泄露未来答案,perplexity 虚高或生成退化
loss_mask / labels=-100哪些位置参与 cross entropy[B, T]SFT 把用户问题也训成要预测的回答,或 assistant 答案没被训练
segment / block maskpacked 样本之间能不能互相看见[B, T, T] 或 block-sparse 约束不同样本串上下文,模型学到虚假的跨样本依赖
position_ids每个 token 的位置编号如何计算[B, T]left padding、packing、KV Cache 场景下位置错乱

一句话区分

attention_mask 管“是不是有效输入”,causal_mask 管“能不能看未来”,loss_mask 管“要不要为这个位置付 loss”,segment mask 管“packed 样本之间能不能互相看”。

三、Padding:为了形状,不是为了语义
策略做法适合场景风险
static padding全部样本补到固定 max_length简单训练脚本、固定形状编译、TPU / 某些导出场景短样本多时大量算力浪费
dynamic padding每个 batch 补到该 batch 最长序列通用训练和微调batch 内长度差异大时仍浪费
length bucketing长度接近的样本放在同一 batch大规模训练、长短样本混合打乱随机性,可能改变数据分布
left paddingpad 放在左侧某些生成推理和 batched decodeposition_ids 与 RoPE / KV Cache 要处理正确
right paddingpad 放在右侧训练、embedding、常规 batch生成时如果结束位置处理不当,可能读到 pad 侧
四、Sequence Packing:省 token,但要守住边界
为什么要 Packing
很多指令样本很短,直接 padding 到固定长度会把显存和 FLOPs 花在 pad 上。Packing 把多条短样本塞进同一个上下文窗口,提高有效 token 比例。
Packing 的边界
拼接后要保留 sample boundary、document boundary、role boundary 和 loss boundary,否则模型会把上一条样本的尾巴当成下一条样本的上下文。
Pack 不是越满越好
过度追求填满窗口,可能破坏课程顺序、混淆文档边界、让少数长样本被裁剪,也会让错误更难排查。
场景应该关注检查问题
预训练文档边界、EOS、跨文档 attention、采样权重模型是否被允许从一篇文档看到下一篇文档
SFTuser / assistant role、response-only loss、模板边界是否只对 assistant 应答算 loss
偏好 / DPOchosen / rejected 对齐、prompt 共享前缀、截断一致性两条回答是否在同一上下文条件下比较
长上下文训练窗口切片、document packing、位置分布长文是不是被切成不自然的碎片
评测样本隔离、prompt 边界、生成停止符评测样本之间是否互相泄露答案
五、训练 Batching 和推理 Batching 不是一回事
维度训练 Batch推理 Batch
目标最大化有效训练 token,稳定梯度和吞吐最大化服务吞吐,同时控制首 token 延迟和尾延迟
主要阶段forward、loss、backward、optimizer stepprefill、decode、streaming、KV Cache 管理
长度问题padding / packing / bucketing 决定计算浪费短请求和长请求混跑会拖慢 decode 调度
状态batch 一般在一步训练内结束请求会跨多个 decode step 持续存在
调度DataLoader、gradient accumulation、global batch sizecontinuous batching、paged KV cache、优先级、超时和取消
错误后果loss 异常、收敛慢、样本泄露、显存浪费延迟抖动、吞吐下降、KV 泄漏、流式输出错位
六、排查时先问这八个问题
问题要看的证据常见症状
pad token 是否进入 attentionattention_mask、padding side、模型配置生成出现奇怪重复,训练 loss 噪声大
未来 token 是否泄露causal mask、shift labels、模型 forward 约定离线分数异常好,真实生成很差
loss 是否只算该算的位置labels、ignore_index、role maskSFT 后模型学会复述用户问题
packed 样本是否串上下文sample boundary、block mask、EOS 处理回答混入上一条样本的信息
position_ids 是否随 padding 变化left / right padding、RoPE、KV Cache同一请求单跑正常,batch 后变差
截断是否切掉关键区段max_length、truncation side、chat template模型看不到 system prompt 或答案尾部
batch 长度分布是否失衡token histogram、bucket 统计、padding ratioGPU 利用率低,成本突然变高
训练和推理模板是否一致chat template、special tokens、stop tokens训练会答,线上格式漂移或停不下来
6.1 Batch / Mask Trace 证据包
证据节点必须记录字段用来排查什么
batch_shapebatch_id、batch_size、max_seq_len、padding_side、padding_ratio吞吐下降、显存浪费和长短样本混跑问题
sample_boundarysample_ids、segment_ids、document_boundary、eos_policy、packing_versionsequence packing 是否把不同样本串成伪上下文
mask_integrityattention_mask_hash、causal_mask_mode、loss_mask_hash、ignore_indexpad、未来 token、用户问题或无效 label 是否被错误训练
position_alignmentposition_ids_strategy、truncation_side、chat_template_version、leakage_test_resultpadding、截断、模板和位置编号是否共同制造质量退化
七、和相邻页面怎么接
相邻页它回答什么本页补什么
Tokenizer / 词表文字怎样变成 token idtoken id 怎样被补齐、拼包、加 mask 后进入张量计算
语言建模目标next-token loss 怎样定义哪些 label 应该计入 loss,哪些只是上下文或占位
QKV / 注意力头attention score 怎样决定谁看谁attention_mask、causal_mask 和 segment mask 怎样限制谁能看谁
位置编码 / RoPE模型怎样理解位置padding、packing 和 KV Cache 场景下 position_ids 为什么容易出错
推理计算 / KV Cache推理成本和缓存怎样形成prefill / decode batching、continuous batching 和 padding 浪费的来源
模型服务 / 网关生产推理怎样调度和治理为什么请求长度分布、batch 调度和超时策略会影响 SLO
八、回到 AI 主干
AI 全景 AI 阅读路线 语言建模目标 Tokenizer Batch / Mask / Packing Transformer QKV / Attention 推理计算 / KV Cache