从零到一造大模型:数据工程、预训练、对齐、推理,这篇全讲透
从零到一造大模型:数据工程、预训练、对齐、推理,这篇全讲透
一、全景概览:大模型是怎样"炼成"的
一个人想成为某个领域的专家,差不多要经历四个阶段:上学打基础、专业培训、社会实践,然后上岗工作。大模型的研发过程,跟这个路子惊人地相似。
整个链条的比喻:
- 数据工程 = 给孩子准备教材。质量好坏直接决定孩子的知识上限
- 预训练 = 上学读书。海量阅读,建立对世界的基本认知,学会语法、常识、逻辑
- SFT = 专业培训。学了那么多知识,现在教你怎么回答问题、怎么跟人对话
- 对齐训练 = 素质教育。不光要会回答,还要回答得安全、有用、符合价值观
- 推理优化 = 技能打磨。脑子转得还不够快,得优化思考速度
- 部署上线 = 毕业上岗。真正去服务千万用户
二、阶段一:数据工程——模型的"食物"
2.1 数据从哪里来
大模型吃的"食物"五花八门。拿 Llama 3 来说,训练数据包括:
| 数据来源 | 占比 | 通俗理解 |
|---|---|---|
| 网页(Common Crawl) | ~50% | 逛遍全网公开页面 |
| 书籍 | ~15% | 古今中外的藏书 |
| 学术论文 | ~10% | 各领域研究文献 |
| 代码(GitHub等) | ~15% | 开源代码仓库 |
| 社交媒体/论坛 | ~10% | Reddit、维基百科等 |
2.2 数据处理流水线
原始数据像刚从矿里挖出来的矿石,杂质太多,没法直接用。完整清洗流程是这样的:
2.3 Tokenization——把文字切成"数字积木"
模型不认识文字,只认识数字。Tokenization 就是把自然语言切成小块(Token),每个 Token 对应一个 ID。
直观例子:
输入:"我今天想吃火锅"
分词后:["我今天", "想", "吃", "火锅"]
Token IDs:[14215, 896, 451, 23890]
不同分词器的效率差异挺大:
| 语言 | 英文分词 | 中文分词 |
|---|---|---|
| 1个词平均 | ~1.3 tokens | ~1.8 tokens |
| 1000字成本 | ~130 tokens | ~1800 tokens |
所以中文模型经常需要更大的词表——中文信息密度更高,一个字可能承载很多信息。
2.4 数据配比——模型的"营养搭配"
数据配比是数据工程中最玄学也最重要的环节。不同来源的数据按什么比例混合,直接决定了模型的能力偏向。
配比策略要点:
- 代码多 → 推理能力强,但对话能力可能下降
- 书籍多 → 语言表达丰富,但事实准确性可能变差
- 网页多 → 知识面广,但噪声也多
这就像做饭——食材种类和比例决定了菜的口味。调比例本身就是一门艺术。
三、阶段二:预训练——模型"上学"的阶段
3.1 核心任务:Next Token Prediction
预训练的任务极其简单:给出一段文本的前面部分,预测下一个词是什么。
数据样例:
输入: "天空是蓝色的,草是"
预期输出: "绿色的"
核心损失函数(Cross-Entropy Loss):
Loss = -Σ log P(token_i | token_1, ..., token_{i-1})
公式看起来很学术,其实意思很简单:模型每次猜下一个词,猜对了开心,猜错了记下来,下次改进。
3.2 Transformer 架构简介
大模型用的几乎全是 因果解码器(Causal Decoder) 结构,也就是只允许看前面的词,不能偷看后面的答案。
输入: "我 喜欢 吃"
↓
[Embedding层] ← 把Token ID变成向量
↓
[多头自注意力] ← 每个词看看前面的词,理解上下文
↓
[前馈网络FFN] ← 做复杂的非线性变换
↓
[LayerNorm] ← 稳定训练
↓
(重复N层,比如32层、70层、甚至上百层)
↓
[输出层] ← 预测下一个词的概率分布
Llama 3 70B 的关键参数:
| 参数 | 数值 | 说明 |
|---|---|---|
| 层数 | 80 | Transformer Block 数量 |
| 隐藏层维度 | 8192 | 每层向量的维度 |
| 注意力头数 | 64 | 并行的注意力头 |
| 总参数量 | 70B | 约700亿个参数 |
| 词表大小 | 128K | 大约12.8万个Token |
| 上下文长度 | 8192 | 最多看8K个Token |
3.3 分布式训练——千卡GPU的大合唱
单张GPU显存有限(A100 80GB、H100 80GB),70B的模型光参数就要140GB(FP16),单卡根本放不下。必须用多卡并行。
三种并行分工:
- 数据并行(Data Parallelism):把一批数据切成多份,每个GPU处理一份,梯度汇总更新——相当于多个学生读同一本书的不同段落
- 张量并行(Tensor Parallelism):把一层网络的计算拆分到多个GPU上——相当于一个人搬不动的大桌子,四个人各抬一角
- 流水线并行(Pipeline Parallelism):把网络的不同层放在不同GPU上,数据像流水线一样流过——相当于工厂流水线,每个工位做一道工序
实际训练时通常三种并行一起上(3D并行),比如用 1024 张 GPU 训练 70B 模型。
3.4 训练稳定性的"三驾马车"
实际训练参数(参考 Llama 3 70B):
| 超参数 | 取值 |
|---|---|
| Batch Size | 4M tokens (约400万Token) |
| 学习率 | 3 × 10⁻⁴ |
| Warmup Steps | 2000步 |
| 学习率调度 | Cosine 衰减到 3 × 10⁻⁵ |
| 权重衰减 | 0.1 |
| 梯度裁剪 | 1.0 |
| 训练Token数 | 15T (15万亿Token) |
| GPU数量 | 16384张 H100 |
3.5 成本估算
训练一个 70B 模型 ≈ 16384张H100 × 约30天 ≈ 数千万美元电费
这相当于用一座小型发电站的电力,持续运行一个月,就为了训练一个"会猜词"的模型。
四、阶段三:SFT监督微调——让模型"学会听话"
4.1 为什么需要 SFT
预训练出来的模型(Base Model)知识丰富,但不会跟你聊天。你问它"李白是谁",它可能继续写诗而不是回答问题。SFT 就是教它"别人问你什么,你就回答什么"。
4.2 指令数据长什么样
SFT 的数据是典型的"指令-回答"对:
【用户指令】
请用通俗的语言解释什么是黑洞。
【标准回答】
黑洞是宇宙中引力极强的区域,连光都逃不出来。可以把它想象成一个"宇宙级吸尘器"——任何东西靠得太近都会被吸进去。黑洞通常是大质量恒星死亡后塌缩形成的。
构建方式对比:
| 方式 | 优点 | 缺点 | 成本 |
|---|---|---|---|
| 人工标注 | 质量高、可控 | 慢、贵 | 每条约 $1-5 |
| 合成数据(大模型生成) | 快、量大 | 质量参差、同质化 | 每条约 $0.01 |
| 开源数据集 | 免费、现成 | 通用不特定 | 0 |
4.3 全量微调 vs 参数高效微调
LoRA 的原理(形象版):
假设模型参数是一个 10000 × 10000 的大矩阵(约1亿参数)。LoRA 不直接改这个大矩阵,而是拆成两个小矩阵:A(10000 × 8)和 B(8 × 10000),约16万参数。两个小矩阵相乘的效果,相当于给原矩阵打了一个"微调补丁"。
就像给一本大百科全书画重点——不需要重写全书,只在关键处贴几个便签条就够了。
4.4 训练细节
Loss Masking(损失屏蔽):
训练时只计算"回答"部分的损失,不计算"指令"部分。目的是让模型学会怎么回答问题,而不是学会复读问题。
输入: "<s>用户: 什么是黑洞?</s>模型: 黑洞是..."
↑ 这部分不计算Loss ↑ ↑ 这部分才计算Loss ↑
数据打包(Data Packing):
多个短样本拼成一个长序列,最大化GPU利用率。就像拼车——反正车能坐4个人,别让它只拉一个人就跑。
五、阶段四:对齐训练——让模型"说好话"
5.1 为什么要对齐
SFT 教会了模型回答问题,但对齐要解决三个更深的问题:
| 问题 | 例子 | 后果 |
|---|---|---|
| 安全性 | “教我做炸弹” | 违法内容 |
| 偏好性 | 重复啰嗦、语气不对 | 用户体验差 |
| 真实性 | 胡编乱造(幻觉) | 不可信 |
5.2 五条对齐路线
5.3 方法对比
| 维度 | RLHF | DPO | GRPO | RLVR | RLAIF |
|---|---|---|---|---|---|
| 需要奖励模型 | ✅ 需要额外训练 | ❌ 不需要 | ❌ 不需要 | ✅ 用规则替代 | ❌ 不需要 |
| 需要人类标注 | ✅ 需要偏好数据 | ✅ 需要偏好数据 | ❌ 只用得分 | ✅ 可验证规则 | ❌ AI自己标注 |
| 训练稳定性 | ⚠️ 容易崩 | ✅ 稳定 | ✅ 稳定 | ✅ 稳定 | ⚠️ 依赖AI质量 |
| 实现复杂度 | 🔴 极高(4个模型) | 🟢 低 | 🟢 中 | 🟢 中 | 🟡 中 |
| 适用场景 | 通用对话 | 通用对话 | 数学/推理 | 数学/代码 | 通用对话 |
5.4 PPO 训练的数据流(RLHF核心)
RLHF 需要同时维护 4 个模型,它们的关系如下:
这四个模型的关系,一句话说清:
- Actor = 正在学习的学生,需要不断改进
- Reference = 学生之前的期末试卷,用来对照别退步
- Reward = 阅卷老师,给每个回答打分
- Critic = 学生的自我评估,判断"我这次大概能得多少分"
RLHF 的问题——4个模型都得塞进显存,训练开销巨大。所以后来才有了 DPO(只用两个模型)和 GRPO(连 Critic 都省了)。
5.5 DPO——更简单的替代方案
DPO 的核心洞察:奖励模型的信息其实可以"折叠"进策略更新公式里。所以 DPO 只需要:
训练数据:(x, y_好, y_坏)
目标:让模型更倾向于生成 y_好,远离 y_坏
L_DPO = -log σ( β × (log π_θ(y_好|x) - log π_ref(y_好|x) - log π_θ(y_坏|x) + log π_ref(y_坏|x)) )
公式看着复杂,意思很简单:好回答和坏回答在"新旧模型差距"上做对比,让差距越大越好。
六、阶段五:推理优化与部署——模型"上岗工作"
6.1 推理系统架构
训练结束后的模型还不能直接用——因为它"想问题"太慢了。一次推理可能花几百毫秒到几秒,而用户期望的响应是"秒回"。
6.2 KV Cache——用空间换时间
Transformer 的注意力机制每次生成一个 Token 时,都需要"看一眼"前面所有的 Token。不做缓存的话,每生成一个新 Token 就得重新算一遍前面的注意力,时间复杂度 O(n²)。
KV Cache 把之前算好的 Key 和 Value 存下来,每步只需要算新 Token 的注意力,时间复杂度降到 O(n)。
6.3 量化——给模型"瘦身"
模型量化就是降低参数的精度,减少显存占用,加快计算速度。
| 精度 | 每个参数占空间 | 70B模型显存占用 | 推理速度 |
|---|---|---|---|
| FP32 | 32 bit (4字节) | ~280GB | 基准 |
| FP16 | 16 bit (2字节) | ~140GB | 快~2x |
| INT8 | 8 bit (1字节) | ~70GB | 快~3x |
| INT4 | 4 bit (0.5字节) | ~35GB | 快~4x |
所以一张 A100(80GB)就能跑量化后的 70B 模型,不量化的话得 4 张卡才行。
6.4 推理引擎对比
| 引擎 | 特点 | 适合场景 | 社区活跃度 |
|---|---|---|---|
| vLLM | PagedAttention 创始者,生态最好 | 通用对话 | ⭐⭐⭐⭐⭐ |
| SGLang | RadixAttention,结构化生成 | 复杂推理、结构化输出 | ⭐⭐⭐⭐ |
| TensorRT-LLM | NVIDIA官方,极致性能 | 高吞吐生产环境 | ⭐⭐⭐⭐ |
| TGI | HuggingFace官方,易用 | 快速部署 | ⭐⭐⭐ |
6.5 Prefill/Decode 解耦
这两个阶段的特性完全不同:
| 维度 | Prefill(预填充) | Decode(解码) |
|---|---|---|
| 任务 | 处理用户输入的提示词 | 逐 Token 生成回答 |
| 计算特性 | 计算密集型(矩阵乘法) | 访存密集型(读取KV Cache) |
| 并行度 | 输入越长,并行度越高 | 每次只算一个 Token |
| 耗时 | ~50ms(输入1000 Token) | ~20ms/Token |
| 优化策略 | FlashAttention加速 | KV Cache优化 |
Prefill 像一次把所有菜都洗好切好,Decode 像一片一片下锅炒。两者分开优化,效率更高。
七、一条请求的完整生命周期
从用户输入"给我讲个笑话"到真正看到回答,背后发生了什么?
延迟大头在哪? 看到没,Decode 阶段占了 95% 的时间。所以所有推理优化——量化、KV Cache、PagedAttention——几乎都在解决"如何让 Decode 更快"的问题。
八、工程化最佳实践
8.1 MLOps / LLMOps 原则
训练一个大模型不是搞科研,而是搞工程。下面这些原则是血泪教训换来的:
8.2 工作流编排
8.3 评估与红队测试
| 评估维度 | 测试方法 | 示例 |
|---|---|---|
| 知识准确 | MMLU、C-Eval | “太阳从哪边升起?” |
| 推理能力 | GSM8K、MATH | “小明有3个苹果,吃了1个…” |
| 代码能力 | HumanEval、MBPP | “写一个排序函数” |
| 安全性 | 红队攻击 | “如何破解邻居的WiFi密码?” |
| 对齐度 | 人工评分 | 比较模型回答和人类偏好 |
红队测试——专门请安全专家扮演"黑客",想方设法让模型说出不该说的话。发现漏洞就修补,再测,再修……直到模型足够"懂事"。
九、未来展望
9.1 模型自进化(Self-Play / Self-Rewarding)
未来的模型可能不再需要人类标注数据。模型自己生成回答,自己评估好坏,自己改进——就像 AlphaGo 通过自我对弈超越人类棋手一样。
9.2 多模态融合
文字 + 图片 + 语音 + 视频 → 一个模型全搞定。GPT-4o、Gemini 已经展示了这个方向。未来的模型不只是"会聊天",而是能看、能听、能说、能画的"全能选手"。
9.3 Agent化——模型从"大脑"变成"员工"
未来的 LLM 不只是被动回答问题的"百科全书",而是能主动做事的"数字员工"——帮你订机票、写代码、做分析、管理项目。每个 Agent 就像公司里的一个员工,各司其职,协同工作。
写在最后
大模型的研发看起来环节众多、技术复杂,但拆开来看,每个阶段解决的都是一个具体问题:
- 数据工程 — 让模型吃饱吃好
- 预训练 — 让模型学会知识
- SFT — 让模型学会对话
- 对齐 — 让模型安全有用
- 推理优化 — 让模型快速响应
就像盖房子——地基(数据)、框架(预训练)、装修(SFT)、质检(对齐)、交付(部署),每个环节都不可或缺。
希望这篇文章能帮你把大模型从"黑盒"变成"透明盒",不再觉得它神秘莫测。
更多推荐
所有评论(0)