五十九:预训练过程、评估与继续预训练¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484846&idx=1&sn=e4b760606feb756217f26400e4e627a1&chksm=f01eb6d7c7693fc1609637dfd99316cc82991b1ff6cf5522a0c199618564d233031eb4d0d938#rd
1. 学习范围¶
本日主题覆盖预训练的后半部分:整体过程、评估和继续预训练,重点是继续预训练。 本日覆盖: - 预训练工程流程。
-
模型初始化、tokenizer、数据流、batch 和 sequence packing。
-
优化器、学习率、warmup/cooldown、梯度裁剪和混合精度。
-
分布式训练方式与稳定性监控。
-
预训练评估:loss、perplexity、benchmark、污染检测和回归测试。
-
Scaling law 的基本直觉和实验用途。
-
继续预训练的定义、适用场景、数据配方、学习率 re-warmup 和防遗忘。
-
继续预训练与 SFT、RAG、领域微调的区别。
2. 预训练过程总览¶
一个实际预训练流程可以简化为:
1. 确定模型架构、tokenizer、上下文长度和训练预算
2. 构建预训练数据配方
3. 清洗、去重、tokenize、pack、shard
4. 配置分布式训练
5. 选择 optimizer、learning rate schedule 和 batch size
6. 启动训练并持续监控 loss、吞吐和稳定性
7. 周期性 checkpoint 和评估
8. 发现问题后回滚、修复数据或调整超参
9. 训练结束后做完整 benchmark 和安全评估
3. 模型与 tokenizer 决策¶
训练开始前要固定若干关键配置: - 模型架构,例如 decoder-only Transformer。
-
参数规模和层数、hidden size、attention heads、FFN size。
-
位置编码方式(实际上也属于模型架构的一部分),例如 RoPE。
-
上下文长度(与数据构造切分相关)。
-
tokenizer 词表和特殊 token。
-
是否使用 GQA/MQA、SwiGLU、RMSNorm 等结构(还是模型架构的一环)。
Tokenizer 一旦确定,后续很难更换。关于Tokenizer的一些方法可以看我之前的:Tokenizer和Transformers 库基础知识:Tokenizer上下文长度也会影响数据 packing、显存、训练吞吐和长上下文能力。
4. Batch、sequence length 与 tokens¶
预训练通常按训练的 token 数衡量进度,而不是按 epoch。 关键概念:
global_batch_tokens = micro_batch_size * sequence_length * data_parallel_size * gradient_accumulation_steps
5. 优化器与学习率¶
LLM 预训练常用 AdamW 或其分布式变体。 常见学习率 schedule: - Warmup:训练初期逐渐升高学习率,避免刚开始不稳定。
- Cosine decay:训练中后期逐渐降低学习率。
- Cooldown:最后阶段更平滑地降低学习率,提升收敛。
-¶
-¶
-¶
-¶
lr↑max_lr | /\ | / \ | / \ | / \min_lr | \──── ← Cooldown冷却段(极平缓缓慢下降) └──────────────────→ epoch warmup cosine衰减 cooldown精细收敛
学习率过大容易 loss spike、NaN 或发散。学习率过小会训练慢、欠拟合。
6. Mixed Precision 与数值稳定¶
大模型训练通常使用 bf16 或 fp16 混合精度。 bf16 动态范围更大,稳定性通常优于 fp16。详细见十八:训推不一致 BF16 与 FP16 的差异 小节。 常见稳定性手段: - gradient clipping。
-
loss scaling,主要针对 fp16。
-
检查 NaN/Inf。
-
监控 gradient norm、activation norm 和 parameter norm。
-
对异常 checkpoint 做回滚。
数值问题不会总是立即崩溃,有时表现为 loss 缓慢异常或能力退化。
7. 分布式训练¶
预训练通常需要多维并行: - Data Parallelism:不同 GPU 处理不同 batch。
-
Tensor Parallelism:把单层矩阵计算切分到多个 GPU。
-
Pipeline Parallelism:把不同层切分到不同 GPU。
-
ZeRO/FSDP:切分 optimizer state、gradient 和参数,降低显存。
-
Sequence Parallelism:在序列维度上进一步切分部分计算。
选择并行策略的目标是让模型放得下、吞吐足够高、通信开销可控,并且 checkpoint 和故障恢复可管理。详细见二十一:分布式训练:DDP、DP 与 FSDP。
8. 数据流与吞吐¶
GPU 训练吞吐不仅取决于模型,也取决于数据读取。 数据系统要保证: - tokenized shard 能高效读取。
-
shuffle 足够随机。
-
worker 不重复消费同一数据。
-
checkpoint 恢复后数据顺序可复现。
-
IO 不让 GPU 空转。
实际训练中,GPU 利用率下降经常不是模型问题,而是数据管道或网络存储问题。
9. 训练稳定性监控¶
需要持续监控: - training loss。
-
validation loss。
-
learning rate。
-
gradient norm。
-
activation norm。
-
loss scale。
-
tokens/sec。
-
GPU utilization。
-
memory usage。
-
all-reduce 或通信耗时。
-
dataloader wait time。
Loss spike 不一定必须停止,但如果伴随 NaN、梯度异常或验证集恶化,需要回滚并定位原因。
10. Checkpoint 策略¶
Checkpoint 不是只为了最终模型保存。 它用于: - 故障恢复。
-
回滚异常训练。
-
中间评估。
-
选择最佳 checkpoint。
-
支持继续预训练或分支实验。
完整 checkpoint 通常包括模型参数、optimizer state、scheduler state、随机数状态和数据迭代位置。只保存模型参数无法无缝恢复训练。
11. 预训练评估总览¶
预训练评估可以分为三层。 第一层是训练内部指标,例如 train loss、validation loss、perplexity(困惑度) 和吞吐。 第二层是通用能力 benchmark,例如知识、常识、数学、代码、阅读理解、多语言和安全。 第三层是产品或领域任务评估,例如内部 QA、工具调用、文档理解、客服准确率。 只看训练 loss 不够,因为 loss 下降不保证所有下游能力提升。
12. Loss 与 Perplexity¶
Validation loss 是最基础的预训练评估指标。 如果 loss 用自然对数,则:
Perplexity 可以理解为模型在每个位置平均“困惑”的候选数。越低通常越好,但跨 tokenizer、跨数据集比较要谨慎。13. Benchmark 评估¶
常见 benchmark 类别: - 常识与知识问答。
-
阅读理解。
-
数学推理。
-
代码生成。
-
多语言理解。
-
长上下文。
-
安全和偏见。
-
指令遵循。
Base model 的 benchmark 需要特别注意 prompt 格式。没有经过 SFT 的模型可能不稳定地遵循指令,因此需要合理的 zero-shot、few-shot 或 continuation-style 评测。
14. 数据污染检测¶
评估前必须考虑 contamination。 如果训练集包含 benchmark 原题或答案,模型高分可能只是记忆。 污染检测方法: - exact match。
-
n-gram overlap。
-
MinHash/SimHash 近重复检索。
-
embedding similarity。
-
时间切分。
-
私有 holdout。
-
人工审核可疑样例。
污染风险越高,benchmark 可信度越低。
15. 回归评估¶
每次改变数据配方、学习率、checkpoint 或继续预训练策略,都需要回归评估。 回归评估关注: - 新目标能力是否提升。
-
原有通用能力是否下降。
-
安全性是否下降。
-
多语言能力是否偏移。
-
长上下文或格式能力是否异常。
这在继续预训练中特别重要。
16. Scaling Law 的直觉¶
Scaling law 描述模型 loss 与参数量、数据量、计算量之间的经验关系。 常见直觉: - 增大模型、数据和计算通常会降低 loss。
-
收益通常呈幂律递减。
-
固定计算预算下,参数量和 token 数存在较优配比。
-
小规模实验可以帮助预测大规模训练表现。
Scaling law 不能替代最终实验,但能降低盲目试错成本,帮助我们提前确定一些较为合适的参数选取。
17. Scaling Law 在工程中的用途¶
它常用于: - 选择模型大小。
-
估计需要多少训练 token。
-
比较数据配方。
-
预测训练到某个 token 数时的 loss。
-
决定是否继续训练还有收益。
-
规划计算预算。
大型模型训练前通常会做小模型、小数据或短程训练,用于拟合 scaling trend。
18. 继续预训练定义¶
继续预训练是从已有模型 checkpoint 出发,继续使用语言建模目标在新数据或特定数据混合上训练。 它也常被称为 continual pretraining、continued pretraining 或 domain-adaptive pretraining。 它的目标不是教模型对话格式,而是改变或补充 base distribution。
19. 继续预训练适用场景¶
继续预训练适合: - 领域适配,例如医疗、法律、金融、代码、安全。
-
语言适配,例如增强低资源语言能力。
-
新知识注入,例如更新到近期资料。
-
数据配方修正,例如增加数学或代码比例。
-
长上下文适配,与位置编码和 sequence length 扩展结合。
-
从通用 base model 发展领域 base model。
如果只需要少量事实查询,RAG 可能更合适。如果只需要改变回答格式,SFT 可能更合适。
20. 继续预训练与 SFT 的区别¶
继续预训练仍使用 next-token prediction,数据通常是领域原始文本或混合语料。 SFT 使用指令-回答数据,目标是让模型按指令完成任务。 继续预训练更偏“补充模型底层分布和知识”,SFT 更偏“改变交互行为和任务格式”。 二者经常串联使用:
21. 继续预训练的数据配方¶
继续预训练不应只把领域数据堆进去。 常见配方:
Replay 数据用于保留通用能力,降低 catastrophic forgetting。 领域数据质量比数量更重要。低质量领域文本会快速污染模型风格和事实。22. Catastrophic Forgetting¶
Catastrophic forgetting 指模型在新领域训练后,原有通用能力显著下降。 常见原因: - 继续预训练数据过窄。
-
学习率过大。
-
训练 token 过多。
-
缺少通用 replay。
-
领域文本风格极端。
缓解方法: - 混入通用数据。
-
降低学习率。
-
减少训练步数。
-
使用更平滑的 schedule。
-
做通用 benchmark 回归。
23. Re-warmup 与学习率重启¶
继续预训练常常不是简单沿用原预训练末尾的学习率。 当数据分布、batch size、sequence length 或训练目标发生变化时,通常需要重新设计学习率 schedule。 Re-warmup 的直觉是:从较小学习率开始,让模型逐步适应新数据分布,避免突然大步更新破坏已有能力。 但 re-warmup 不是越大越好。峰值学习率过高会造成遗忘或发散,过低则领域适配不足。
24. 继续预训练的 checkpoint 选择¶
继续预训练要选择合适起点。 可能选择: - 通用 base model。
-
已对齐模型之前的 base checkpoint。
-
中间 checkpoint。
-
已扩展上下文的 checkpoint。
通常不建议在强 RLHF 对齐后的聊天模型上直接做大规模继续预训练,因为可能破坏对齐行为。更常见做法是在 base 或 SFT 前后的合适位置进行。
25. 继续预训练评估¶
继续预训练必须同时看目标能力和回归风险。 评估集合应包含: - 领域 validation loss。
-
通用 validation loss。
-
领域 benchmark。
-
通用 benchmark。
-
多语言/代码/数学等关键能力。
-
安全评估。
-
下游 SFT 后的最终任务指标。
如果领域能力提升但通用能力大幅下降,需要调整数据混合和学习率。
26. 继续预训练常见失败模式¶
常见失败包括: - 领域 loss 下降但下游任务不提升。
-
通用能力遗忘。
-
模型输出风格变窄。
-
学习率过大导致 loss spike。
-
训练数据污染评测集。
-
领域数据中错误事实被模型吸收。
-
继续预训练后 SFT 难度增加。
因此继续预训练需要小规模试训、分阶段评估和严格数据治理。
27. 实用决策:CPT、SFT 还是 RAG¶
如果目标是更新少量事实、需要可追溯来源,优先 RAG。 如果目标是让模型按业务格式回答,优先 SFT。 如果目标是让模型掌握大量领域语言、术语、文档结构和基础分布,考虑继续预训练。 如果目标是领域助手,常见组合是:
28. 面试紧凑总结¶
预训练过程是模型配置、数据管道、分布式系统、优化器和评估体系的联合工程。 预训练评估不能只看 loss,还要看下游 benchmark、污染控制和能力回归。 继续预训练是在已有 checkpoint 上继续做语言建模,适合领域、语言、新知识和数据配方适配。 继续预训练最重要的风险是遗忘、过拟合领域分布、学习率不稳和评测污染。工程上通常用通用 replay、较小学习率、re-warmup、分桶评估和 checkpoint 回滚控制风险。
预览时标签不可点
<div class="