训练一个大型语言模型,是人类迄今为止工程复杂度最高的软件项目之一。理解这个过程,不仅是技术的必修课,也是认识AI能力边界的关键。
本文以一个典型的百亿参数级LLM为例,完整还原其训练流程。
一、训练全流程概览
原始文本数据
↓ 数据清洗与预处理
训练数据集(Token化)
↓ 预训练(Pre-training)
基础模型(Base Model)
↓ 监督微调(SFT)
指令模型(Instruct Model)
↓ 偏好对齐(RLHF / DPO)
对齐模型(Aligned Model)
↓ 评估与安全测试
发布版本(Released Model)二、第一阶段:数据准备
数据来源
预训练数据是大模型的"基因",决定了模型能知道什么、会说什么。
典型数据来源包括:
一个典型的1000亿参数模型,预训练数据量约为 1-5万亿 token(~1-5TB文本)。
数据清洗
原始互联网数据质量参差不齐,必须经过严格过滤:
1. 去重:MinHash LSH 算法进行文档级、段落级去重
2. 质量过滤:困惑度(Perplexity)过滤、语言检测、有害内容过滤
3. 格式化:统一编码(UTF-8)、去除HTML标签、规范化标点
4. 数据配比:不同来源数据按比例混合,代码/数学数据通常上采样
Tokenization(分词)
将文本转换为模型可处理的 token 序列。
BPE(Byte Pair Encoding) 是目前最主流的分词算法:
三、第二阶段:预训练
模型架构
以 Decoder-only Transformer 为例(GPT系列的标准架构):
输入 Token IDs
↓ Embedding Layer(词嵌入)
↓ × N 个 Transformer Block:
│ ├── RMSNorm(层归一化)
│ ├── Multi-Head Self-Attention(多头自注意力)
│ │ └── RoPE 位置编码
│ ├── 残差连接
│ ├── RMSNorm
│ ├── FFN / MoE层(前馈网络)
│ └── 残差连接
↓ RMSNorm
↓ LM Head(线性层 + Softmax)
↓ 下一个 Token 的概率分布关键超参数举例(以70B模型为参考):
训练目标:自回归语言建模
核心损失函数:
L = -Σ log P(token_t | token_1, ..., token_{t-1})即:给定前文,预测下一个token的交叉熵损失。看似简单,却迫使模型内化语言的所有统计规律。
分布式训练
训练一个百亿参数模型,单张GPU远远不够,需要多种并行策略:
| 并行类型 | 原理 | 适用场景 |
|---|---|---|
| 数据并行(DP) | 不同GPU处理不同数据批次 | 最基础的并行 |
| 流水线并行(PP) | 模型层分配到不同GPU | 超大模型 |
| 张量并行(TP) | 单层矩阵拆分到多GPU | 大隐藏维度 |
| 序列并行(SP) | 长序列切分并行处理 | 超长上下文 |
| ZeRO优化 | 优化器状态、梯度、参数分片 | 内存优化利器 |
典型训练配置(以LLaMA 3 70B为参考):
关键训练技术
混合精度训练(FP16/BF16):参数以BF16存储,前向后向计算,优化器状态保留FP32,平衡精度与显存。
梯度检查点(Gradient Checkpointing):以重计算换内存,显存可减少50%以上。
FlashAttention:重写注意力计算的IO模式,在不损失精度的情况下,速度提升2-4倍,支持更长上下文。
学习率调度:通常采用 Warmup + Cosine Decay,从低学习率启动避免早期不稳定。
四、第三阶段:监督微调(SFT)
预训练完成后,模型只是"文字接龙"机器,不懂得遵循指令。SFT让模型从"续写者"变成"助手"。
SFT数据格式
[指令数据示例]
{
"instruction": "用一句话解释什么是量子纠缠",
"input": "",
"output": "量子纠缠是指两个粒子无论相距多远,对其中一个的测量会瞬间影响另一个粒子状态的量子现象。"
}SFT数据集构建
SFT通常只需要 数千到数十万条 高质量数据,但质量远比数量重要。
SFT训练特点
五、第四阶段:RLHF 对齐
SFT模型仍可能输出有害内容或不符合用户期望的回答。RLHF让模型真正"为人服务"。
RLHF 三步流程
步骤1:收集人类偏好数据
给定同一问题,模型生成多个回答,人类标注员按质量排序:
问题:如何提高代码可读性?
回答A:写注释。
回答B:写清晰的注释、有意义的变量名、模块化设计...(详细)
人类评级:B > A步骤2:训练奖励模型(Reward Model)
以SFT模型为基础,在偏好数据上训练一个奖励模型 R(x, y),使其能预测人类对回答的满意度分数。
步骤3:PPO强化学习优化
目标:maximize E[R(x, y)] - β·KL(π_θ || π_ref)用PPO算法更新LLM参数,使奖励分数提升,同时KL散度约束防止模型偏离SFT版本太远(即"不要为了高分变成另一个模型")。
DPO:RLHF的轻量替代
直接偏好优化(DPO)绕过了训练奖励模型的步骤,将RLHF的目标重写为:
L_DPO = -log σ(β·log(π_θ(y_w|x)/π_ref(y_w|x)) - β·log(π_θ(y_l|x)/π_ref(y_l|x)))其中 y_w 是偏好回答,y_l 是被拒绝的回答。DPO训练更稳定,但效果上限略低于精调的RLHF。
六、算力需求
训练计算量估算
Chinchilla定律给出了最优的计算量与参数量、数据量关系:
最优Token数 ≈ 20 × 参数量
例:70B模型最优训练量 = 20 × 70B = 1.4万亿 tokenFLOPs 估算(前向+反向约6倍参数量乘以token数):
| 模型规模 | 训练Token | 大约总FLOPs | H100集群 × 天数 |
|---|---|---|---|
| 7B | 1T | ~4×10²² | 64卡 × 30天 |
| 70B | 2T | ~8×10²³ | 512卡 × 90天 |
| 405B | 15T | ~3×10²⁵ | 16K卡 × 90天 |
显存需求
| 项目 | 占用(BF16训练,70B模型) |
|---|---|
| 模型参数 | ~140 GB |
| 优化器状态(Adam) | ~560 GB |
| 梯度 | ~140 GB |
| 激活值 | 数百 GB(视批次大小) |
这解释了为什么训练70B模型需要至少数百张A100/H100。
七、评估体系
训练完成后,模型需通过多维度评估:
总结
LLM的训练是一个数据工程 + 分布式系统 + 数学优化 + 人类对齐的综合工程。每个阶段都有大量细节决定最终质量。理解这个过程,能帮助我们更清醒地认识大模型的能力来源与局限所在。
探索智能,酷在前沿