外观
大模型领域知识增强训练方法论
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 为什么要增量预训练?
核心观点:预训练学知识,指令微调学格式,强化学习对齐人类偏好(LIMA 等论文支撑)。
因此,要让大模型具备领域知识,必须做增量预训练。仅靠指令微调记住知识不靠谱——不是几十万条数据能做到的。
2. 增量预训练准备工作
2.1 模型底座选型
| 基座模型 | 评价 |
|---|---|
| LLaMA | 主流选择,开放 Scaling Law 证明充分预训练(但版权问题) |
| BLOOM | 不如 LLaMA,但有 7B 版本 |
| Falcon | License 友好,但训练语料无中文 |
| CPM-bee / Aquila / Baichuan | 待验证,License 友好 |
ChatGLM/ChatGLM2 不推荐用于增量预训练:有说法在 SFT 模型上做增量预训练效果较差。
2.2 数据收集
- 经典开源预训练数据:WuDao 200G、The Pile(合计约 1T 文本量)
- 前期不需要太多样本,先收集 GB 量级的领域文本跑通流程
2.3 数据清洗
Falcon 论文介绍的数据清洗手段(最基础的是清理网页中的广告),对增量预训练有重要参考意义。
3. 增量预训练所用训练框架
| 场景 | 推荐方案 |
|---|---|
| 大规模炼丹(多机多卡) | Megatron-DeepSpeed(3D 并行),参考 LydiaXiaohongLi 的 LLaMA 实现 |
| 少量节点(节点间通信快) | DeepSpeed ZeRO,如 Open-Llama Fork |
| 少量节点(节点间通信慢) | 流水线并行(Pipeline Parallelism) |
| 资源极少(显存不够) | LoRA,参考 MedicalGPT |
张量并行(Tensor Parallelism)仅在 NVLink 环境下起正向作用,但提升不明显。
4. 增量预训练流程
| 步骤 | 说明 |
|---|---|
| 数据预处理 | 参考 LLaMA 预训练长度,数据处理为 2048 长度(不够则补全) |
| 分词器 | 有工作加 LLaMA 中文词表,但无定论是否更好,可先用原版 500K Tokenizer |
| 原始模型 | 可使用中文增量预训练版本,注意各框架模型层名不统一 |
| 训练参数 | 显存不够用 ZeRO-3 + Offload(没想象中慢) |
| 观测训练进展 | 使用 WandB 记录 Loss、FLOPS、吞吐速度、已消耗 Token 数、测试 PPL |
| 模型转换 | ZeRO → FP32 → FP16 → HuggingFace 格式 |
| 模型测试 | 简单测试续写能力,验证模型是否正常 |
5. 增量预训练需要多大数据量?
至少要 几 B Token;如果仅几十条数据,推荐使用模型微调而非增量预训练。
6. 增量预训练过程中 Loss 上升正常吗?
正常。增量预训练开始阶段通常会出现一段时间的 Loss 上升,随后慢慢收敛。这是因为模型需要适应新的数据分布。
7. 学习率(LR)如何设置?
| 数据量 | LR 建议 | 示例(7B 模型 Pre-Train LR=3e-4) |
|---|---|---|
| 较小(100B 以下) | Pre-Train 最大 LR 的 10% | 3e-5 |
| 较大(几百 B) | 可适当增大 | — |
LR 与 Batch Size 的关系
LR 缩放倍数为 Batch Size 倍数的开方:
LR 过大的问题
- Loss 收敛更困难
- 旧能力损失更大(灾难性遗忘更严重)
LR 过小的问题
- 难以学到新知识
8. Warmup Ratio 如何设置?
| 阶段 | Warmup Ratio |
|---|---|
| Pre-Train(1 Epoch) | 0.01(1%) |
| SFT(3 Epoch) | 0.03(3%) |
| CPT(增量预训练) | 建议调大一点 |
数据集很大(几百 B)时,Warmup 不影响最终效果。但数据集不大时,更小的 Ratio 让模型过渡更平滑。
LR 与 Warmup Ratio 的关系:两者相辅相成,通常成正比。使用较大 LR 时,应同时增加 Warmup 来防止模型"烂掉"。
9. Warmup 步数对大模型继续预训练的影响
实验对比
使用 4 种不同预热百分比步数(0%, 0.5%, 1%, 2%)进行实验:
| 阶段 | 结论 |
|---|---|
| 充分训练后 | 不管多长的 Warmup 步数,最终性能差别不大 |
| 训练前期 | 更长的预热步数 → 下游 Loss 更低(学得快),上游 Loss 更低(忘得慢) |
资源不允许充分训练时,较小的 LR + 较长的 Warmup 是不错的选择。
10. 学习率大小对上下游任务的影响
实验:4 种不同最大学习率对比
| 阶段 | 结论 |
|---|---|
| 充分训练后 | LR 越大 → 下游性能最好、上游性能最差(遗忘最多) |
| 训练前期 | 大 LR 的 Loss 可能先剧烈上升再下降 |
未经预训练的模型(基线),无论是上游还是下游任务,都不如预训练过的模型。
11. Rewarmup 对继续预训练性能的影响
实验:在原预训练数据集上继续训练
结论:在原数据集上使用 Warmup 接着训练会造成性能损伤,LR 越大损伤越大,且这种损伤无法在后续训练中被找回。
重要启示:预训练中遇到训练中断需要继续时,应将 LR 恢复到中断之前的状态(数值和衰减率),而不是重新 Warmup。
12. 核心经验总结
| 要点 | 建议 |
|---|---|
| 数据量 | 至少几 B Token |
| 学习率 | 小数据集用 Pre-Train LR 的 10% |
| Batch Size 缩放 | LR 按 Batch Size 倍数的开方缩放 |
| Warmup | 增量预训练调大一点 |
| 训练中断 | 恢复 LR 到中断前状态,不要 Rewarmup |
| 监控 | 用 WandB 全程监控 Loss、FLOPS、PPL |
| 框架 | 资源充裕用 Megatron-DeepSpeed,资源有限用 ZeRO/LoRA |