Skip to content

大模型领域知识增强训练方法论

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 为什么要增量预训练?

核心观点:预训练学知识,指令微调学格式,强化学习对齐人类偏好(LIMA 等论文支撑)。

因此,要让大模型具备领域知识,必须做增量预训练。仅靠指令微调记住知识不靠谱——不是几十万条数据能做到的。


2. 增量预训练准备工作

2.1 模型底座选型

基座模型评价
LLaMA主流选择,开放 Scaling Law 证明充分预训练(但版权问题)
BLOOM不如 LLaMA,但有 7B 版本
FalconLicense 友好,但训练语料无中文
CPM-bee / Aquila / Baichuan待验证,License 友好

ChatGLM/ChatGLM2 不推荐用于增量预训练:有说法在 SFT 模型上做增量预训练效果较差。

2.2 数据收集

  • 经典开源预训练数据:WuDao 200GThe 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 倍数的开方

Batch Size 增大 4 倍  LR 扩大 4=2 倍

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