这篇文章整理一份“基模训练八股”,目标不是写成论文综述,而是面向面试、工程实践和系统复盘:如果有人问“一个大语言模型从零训练出来需要哪些环节”,你应该能从数据、Tokenizer、模型架构、预训练目标、并行训练、稳定性、后训练、评测、部署和成本几个层面完整回答。
所谓基模(Foundation Model),一般指在大规模通用数据上训练出来、具备较强迁移能力的基础模型。它可以是语言模型、多模态模型、视觉模型、语音模型,也可以是统一建模文本、图像、音频、视频和动作的模型。本文主要以大语言模型(LLM)为主线,但许多原则同样适用于多模态基模。
1. 基模训练整体流程
训练一个基模通常可以拆成几层:
- 数据层:收集、清洗、去重、过滤、配比、采样。
- 表示层:设计 Tokenizer、词表、特殊 token、序列格式。
- 模型层:选择 Transformer 架构、参数规模、上下文长度、位置编码、归一化方式。
- 预训练层:定义 next token prediction 等目标,在大规模语料上训练。
- 系统层:分布式并行、混合精度、通信优化、checkpoint、容错。
- 稳定性层:loss spike、梯度爆炸、数值溢出、数据异常、学习率策略。
- 后训练层:SFT、偏好优化、RLHF、DPO、工具调用、多轮对话。
- 评测层:通用能力、推理能力、代码能力、安全性、长上下文、幻觉。
- 部署层:推理加速、KV Cache、量化、并发调度、成本优化。
- 迭代层:根据评测和线上反馈反推数据、训练和对齐策略。
面试时可以先给一个总览:
基模训练不是“把数据扔进 Transformer”这么简单,而是数据工程、模型设计、训练系统、稳定性治理、后训练对齐和评测闭环共同构成的大工程。
2. 什么是 Foundation Model
Foundation Model 的核心特征有三个。
第一,预训练数据规模大。它不是只在某个任务数据集上训练,而是在网页、书籍、论文、代码、问答、多语言、多模态内容等大规模数据上训练。
第二,任务泛化能力强。训练时可能只是预测下一个 token,但模型会涌现出翻译、摘要、代码、推理、问答、规划等能力。
第三,可以通过后训练适配。预训练模型通常不是最终产品,还需要 SFT、偏好对齐、工具增强、安全对齐和领域微调。
一个简单区分是:
- 预训练模型:学世界知识、语言规律、代码模式和通用表示。
- 指令模型:学会按人的指令回答。
- 对话模型:学会多轮上下文、角色一致性和安全边界。
- Agent 模型:学会工具调用、规划、执行和反思。
3. 数据是基模训练的第一性问题
在基模训练里,数据质量通常比模型结构小改动更重要。很多能力差异并不来自“模型层数多一层”,而来自数据覆盖、清洗质量、去重策略、课程配比和后训练数据。
3.1 数据来源
常见预训练数据包括:
- Web 文本:Common Crawl、新闻、论坛、博客、百科、问答社区。
- 书籍与论文:长文本、高质量知识密度、结构化表达。
- 代码数据:GitHub、开源仓库、文档、issue、代码解释。
- 数学与推理:教材、题库、证明、竞赛题、解题过程。
- 多语言数据:中文、英文、小语种、混合语料。
- 对话数据:问答、客服、多轮聊天、合成指令。
- 领域数据:金融、医疗、法律、教育、科研等专业语料。
多模态模型还会加入:
- 图文对数据。
- 视频字幕与帧序列。
- OCR 数据。
- 音频转写数据。
- 机器人轨迹和动作数据。
3.2 数据清洗
数据清洗的目标不是让文本“看起来干净”,而是减少模型学习到低质量模式。
常见清洗步骤:
- HTML 解析:去除导航栏、广告、脚本、样式、页脚。
- 语言识别:过滤语言不明或混杂严重的文本。
- 编码修复:处理乱码、非法字符、重复 Unicode。
- 质量打分:用规则或模型判断文本是否有价值。
- 长度过滤:去掉过短、过长、重复模板文本。
- 敏感过滤:处理隐私、违法、有害内容。
- 格式归一:统一空格、换行、标点和特殊符号。
- 代码清洗:过滤生成文件、压缩文件、依赖目录、重复 vendor 代码。
面试回答时可以强调:清洗策略不能只靠规则,通常会结合启发式规则、质量分类器、困惑度过滤、embedding 聚类和人工抽检。
3.3 数据去重
去重非常关键,因为重复数据会导致:
- 训练效率降低。
- 模型记忆增强。
- 评测污染风险变高。
- 生成内容更容易复读。
- 某些数据源权重被意外放大。
常见去重粒度:
- 文档级去重:完全相同或高度相似文档。
- 段落级去重:重复段落、模板文本。
- 句子级去重:常见垃圾句、免责声明。
- n-gram 去重:检测局部重复。
- MinHash / SimHash:近似去重。
- embedding 去重:语义层面的近似重复。
一个经典八股点:训练集和评测集之间也要去重,尤其是 benchmark contamination。否则模型可能不是“会做题”,而是“见过题”。
3.4 数据配比
数据配比决定模型能力画像。
如果代码占比高,模型代码能力会增强,但自然语言可能受影响。如果数学推理数据太少,模型会缺乏 chain-of-thought 风格的推理模式。如果中文数据比例低,中文表达和知识覆盖会弱。
常见配比考虑:
- 通用文本 vs 专业文本。
- 中文 vs 英文 vs 多语言。
- 代码 vs 自然语言。
- 高质量小数据 vs 低质量大数据。
- 长文本 vs 短文本。
- 新数据 vs 旧数据。
- 人类数据 vs 合成数据。
配比不是一次性决定的,通常需要根据中间 checkpoint 的评测结果迭代调整。
4. Tokenizer 八股
Tokenizer 决定文本如何变成 token 序列。对 LLM 来说,它不是边角料,而是影响训练效率、多语言能力、代码能力和上下文利用率的关键组件。
4.1 常见 Tokenizer
常见方案包括:
- BPE:Byte Pair Encoding,GPT 系列常见。
- WordPiece:BERT 系列常见。
- SentencePiece:常用于多语言模型,可不依赖空格。
- Unigram LM:SentencePiece 支持的一类概率 tokenizer。
- Byte-level BPE:对任意字节鲁棒,避免 OOV。
现代 LLM 通常倾向使用 byte-level 或 byte fallback,保证任何字符都能编码。
4.2 词表大小怎么选
词表太小:
- 序列变长。
- 训练和推理成本增加。
- 长上下文中有效信息减少。
词表太大:
- embedding 和 LM head 参数增加。
- 低频 token 学不好。
- 多语言下词表浪费。
常见 LLM 词表规模从几万到十几万不等。中文模型通常需要考虑中文字符、词组、英文、代码符号和多语言字符的平衡。
4.3 Tokenizer 对中文的影响
中文没有天然空格,如果 tokenizer 对中文不友好,会导致一个词被切成很多 token,直接影响:
- 中文上下文长度。
- 中文推理效率。
- 中文生成流畅度。
- 训练成本。
所以中文数据足够多时,通常希望 tokenizer 学到常见中文词、短语和标点组合。
4.4 特殊 token
常见特殊 token:
- BOS:序列开始。
- EOS:序列结束。
- PAD:padding。
- UNK:未知 token,现代 byte-level 模型可弱化。
- MASK:BERT 类模型使用。
- system / user / assistant:对话格式。
- tool call / tool result:工具调用格式。
- image / audio / video placeholder:多模态占位。
特殊 token 的设计会影响后训练和推理格式,一旦模型大规模训练后再改 tokenizer 成本很高。
5. 模型架构八股
现代 LLM 主体通常是 decoder-only Transformer。
5.1 为什么 GPT 类模型用 decoder-only
BERT 是 encoder-only,适合理解任务;T5 是 encoder-decoder,适合 seq2seq;GPT 是 decoder-only,适合自回归生成。
基模尤其是对话模型常用 decoder-only,原因包括:
- next token prediction 目标简单。
- 预训练和生成过程一致。
- 扩展到大规模更直接。
- KV Cache 推理友好。
- 适合统一建模文本、代码和对话。
5.2 Transformer Block 组成
一个典型 decoder block 包括:
- RMSNorm 或 LayerNorm。
- Self-Attention。
- 残差连接。
- RMSNorm 或 LayerNorm。
- MLP / FFN。
- 残差连接。
常见结构是 Pre-Norm:
Pre-Norm 比 Post-Norm 更适合深层网络稳定训练。
5.3 Attention
标准自注意力:
在 decoder-only 中需要 causal mask,保证当前位置只能看见过去 token,不能看未来。
5.4 MHA、MQA、GQA
- MHA:Multi-Head Attention,每个 head 有自己的 Q/K/V。
- MQA:Multi-Query Attention,多个 query head 共享一组 K/V。
- GQA:Grouped-Query Attention,多个 query head 分组共享 K/V。
为什么 MQA/GQA 重要?
推理时 KV Cache 占用很大。共享 K/V 可以显著减少 KV Cache 大小,提高长上下文和高并发推理效率。很多现代大模型采用 GQA,在质量和推理效率之间折中。
5.5 MLP 结构
传统 Transformer 用 FFN:
现代 LLM 常用 SwiGLU / GEGLU:
SwiGLU 通常比普通 GELU FFN 效果更好。
5.6 位置编码
常见位置编码:
- 绝对位置编码:早期 Transformer 使用。
- 相对位置编码:建模相对距离。
- RoPE:Rotary Position Embedding,现代 LLM 常用。
- ALiBi:用 attention bias 表示距离衰减。
RoPE 的优势是相对位置性质好,外推和实现都比较友好。长上下文扩展时常见技巧包括 RoPE scaling、NTK scaling、YaRN、位置插值等。
5.7 Norm 选择
LayerNorm 对均值和方差归一化,RMSNorm 只使用均方根,计算更简单。很多现代 LLM 使用 RMSNorm:
它通常训练稳定且效率较高。
6. 参数规模与 Scaling Law
Scaling Law 的核心观点是:在一定范围内,模型效果随参数量、数据量和计算量按幂律改善。
常见三要素:
- 参数量 N。
- 数据 token 数 D。
- 训练计算量 C。
大致关系是:
这里的 6 是 Transformer dense LM 训练中一次 forward + backward 的粗略 FLOPs 系数。
6.1 Chinchilla 结论
Chinchilla 提出:很多早期大模型是“参数太多、数据太少”,在固定计算预算下,应该用更小模型训练更多 token。
经验上,计算最优训练会让参数量和 token 数一起增长,而不是盲目堆参数。
面试中可以这样回答:
如果算力固定,不能只问模型做多大,还要问训练多少 token。欠训练的大模型可能不如充分训练的小模型。
6.2 参数量怎么分配
模型超参包括:
- 层数 depth。
- hidden size。
- attention heads。
- intermediate size。
- vocab size。
- context length。
常见趋势:
- 更深模型表达层级更强,但训练稳定性和通信成本更高。
- 更宽模型并行友好,但参数和激活成本大。
- MLP 参数通常占大头。
- vocab embedding 在超大模型中占比不一定最大,但大词表会明显增加小模型成本。
7. 预训练目标
LLM 最常见目标是自回归 next token prediction。
给定序列:
模型最大化:
训练时最小化交叉熵:
这就是为什么 LLM 看起来只是“预测下一个词”,却能学到大量能力:因为要预测下一个 token,模型必须压缩语言、知识、逻辑、代码、世界状态和上下文模式。
7.1 Causal LM vs Masked LM
Causal LM:
- 从左到右预测。
- 适合生成。
- GPT 类模型常用。
Masked LM:
- 随机 mask token,让模型恢复。
- 双向上下文。
- BERT 类模型常用。
- 更适合理解和表示学习。
7.2 Prefix LM 和 Span Corruption
有些模型使用 Prefix LM 或 span corruption,以增强条件生成或文本恢复能力。但主流对话 LLM 仍以 causal LM 为主。
8. 训练数据组织
训练不是简单按文档逐个喂给模型。
8.1 Packing
为了提高训练效率,会把多个短文档拼接到一个固定长度序列中,这叫 packing。
注意点:
- 文档之间要加 EOS。
- loss mask 要正确。
- 对话数据要 mask 用户输入还是全量训练,需要按目标决定。
- packing 不当可能导致模型跨文档错误建模。
8.2 Sequence Length Curriculum
长上下文训练成本高,因为 attention 是
- 先用较短上下文训练主体能力。
- 后期扩展到长上下文。
- 用高质量长文档做 continued pretraining。
- 结合位置编码外推策略。
8.3 数据采样
不是所有数据按原始比例采样。常见采样策略:
- temperature sampling:提高低资源语言或小数据源采样概率。
- domain upsampling:提高代码、数学、高质量数据比例。
- curriculum learning:从简单到复杂。
- dynamic sampling:根据阶段调整数据配比。
9. 优化器与学习率
9.1 AdamW
大模型训练常用 AdamW:
- Adam 使用一阶矩和二阶矩自适应更新。
- AdamW 将 weight decay 与梯度更新解耦。
常见参数:
或 - weight decay 约
- gradient clipping 约
具体值取决于模型规模和训练 recipe。
9.2 学习率策略
常见 schedule:
- warmup:开始阶段逐渐增大学习率,避免训练不稳定。
- cosine decay:后期平滑降低学习率。
- constant + decay:中间保持一段平台。
- cooldown:训练末期降低学习率做收敛。
学习率过大容易 loss spike 或发散;过小则训练效率低。
9.3 Batch Size
大模型通常使用很大的 global batch size,以提高吞吐和训练稳定性。
但 batch size 不是越大越好:
- 太小:梯度噪声大,吞吐低。
- 太大:泛化可能变差,学习率需要调整。
- 受限于显存和并行策略。
通常会通过 gradient accumulation 扩大等效 batch。
10. 混合精度与数值稳定
10.1 FP16、BF16、FP32
- FP32:精度高,成本大。
- FP16:速度快、省显存,但动态范围小,容易 overflow。
- BF16:动态范围接近 FP32,精度低于 FP16,但训练更稳。
现代大模型训练常用 BF16。某些关键状态如 optimizer state、master weights、归约累加可能仍使用 FP32。
10.2 Loss Scaling
FP16 训练中常用 loss scaling 防止梯度 underflow。BF16 因动态范围更大,对 loss scaling 依赖较少。
10.3 常见数值问题
- softmax overflow。
- attention score 过大。
- 梯度爆炸。
- NaN / Inf。
- LayerNorm / RMSNorm epsilon 不合适。
- 数据中异常超长 token 或脏样本。
工程上要有 NaN 检测、梯度范数监控、参数范数监控、loss spike 回滚和 checkpoint 恢复机制。
11. 分布式训练并行策略
单卡无法训练大模型,需要多维并行。
11.1 Data Parallel
Data Parallel 每张卡放一份完整模型,不同卡处理不同 batch,最后同步梯度。
优点:简单。
缺点:模型太大时单卡放不下。
11.2 Tensor Parallel
Tensor Parallel 把单层矩阵乘法切到多张卡上。例如把线性层的 weight 按列或按行切分。
优点:解决单层太大的问题。
缺点:层内需要频繁通信,对带宽敏感。
11.3 Pipeline Parallel
Pipeline Parallel 把模型不同层切到不同设备上,micro-batch 流水执行。
优点:解决层数太多放不下的问题。
缺点:pipeline bubble、调度复杂、激活传输开销。
11.4 ZeRO / FSDP
ZeRO 把优化器状态、梯度、参数分片到不同 GPU 上。
- ZeRO-1:切 optimizer state。
- ZeRO-2:切 optimizer state + gradients。
- ZeRO-3:切 optimizer state + gradients + parameters。
PyTorch FSDP 类似 ZeRO-3 思路,按需 all-gather 参数,用完释放。
11.5 Sequence Parallel 和 Context Parallel
长上下文训练时,序列维度本身也可能太长,需要把 sequence 维度切分。
- Sequence Parallel:常用于配合 Tensor Parallel,降低激活内存。
- Context Parallel:把长上下文切到多卡,解决超长序列 attention 的显存和计算问题。
11.6 Expert Parallel
MoE 模型中,不同 expert 分布在不同设备上,token 通过 router 分发到 expert。
优点:在相同激活参数下增加总参数量。
缺点:通信复杂、负载均衡难、训练稳定性更难。
12. 内存构成与优化
训练显存主要由几部分组成:
- 参数。
- 梯度。
- 优化器状态。
- 激活值。
- 临时 buffer。
- 通信 buffer。
Adam 优化器通常很吃显存,因为需要一阶矩和二阶矩。如果用 FP32 optimizer state,显存会进一步增加。
常见优化:
- activation checkpointing:重算激活换显存。
- ZeRO / FSDP:切分状态。
- mixed precision:降低参数和激活精度。
- FlashAttention:降低 attention 显存和提高速度。
- gradient accumulation:小 micro-batch 累积成大 batch。
- offload:把部分状态放 CPU/NVMe,但速度会受影响。
13. FlashAttention 八股
标准 attention 的瓶颈不只是 FLOPs,还有 HBM 读写。
FlashAttention 的核心思想:
- 不显式存完整
attention matrix。 - 分块计算 softmax。
- 利用 online softmax 保持数值稳定。
- 减少 HBM 访问,提高速度并降低显存。
它把 attention 从“显存 IO 密集”优化为更适合 GPU SRAM tile 的计算方式。长序列训练和推理中非常重要。
14. Checkpoint 与容错
大规模训练动辄几周几个月,硬件故障是常态。
Checkpoint 需要保存:
- model weights。
- optimizer state。
- LR scheduler state。
- random seed / RNG state。
- dataloader state。
- consumed tokens。
- parallel states。
如果只保存模型权重,恢复后训练轨迹可能不一致。
常见策略:
- 定期保存。
- 保存最近 N 个。
- 关键里程碑永久保存。
- 异步 checkpoint 降低阻塞。
- 分布式 checkpoint 避免单点瓶颈。
15. 训练稳定性问题
15.1 Loss Spike
Loss spike 是大模型训练常见问题。可能原因:
- 学习率过大。
- 数据 batch 异常。
- 梯度爆炸。
- 混合精度 overflow。
- attention logits 异常。
- 分布式通信错误。
- optimizer state 损坏。
处理方式:
- 降低学习率。
- gradient clipping。
- 跳过异常 batch。
- 回滚 checkpoint。
- 检查数据样本。
- 检查 NaN/Inf。
- 调整初始化和 norm。
15.2 训练发散
发散通常体现为 loss 快速升高、梯度范数爆炸、参数出现 NaN。
排查顺序:
- 数据是否异常。
- loss mask 是否正确。
- label shift 是否正确。
- 学习率和 warmup 是否合理。
- 混合精度是否 overflow。
- attention mask 是否正确。
- 分布式梯度同步是否正确。
- checkpoint 恢复是否完整。
15.3 Loss 不降
可能原因:
- 数据和 label 错位。
- 模型没看到有效上下文。
- 学习率太小或太大。
- optimizer 参数错误。
- tokenizer 和数据不匹配。
- loss mask 全错。
- 梯度没有回传。
面试时如果被问“训练 loss 不降怎么办”,最好从数据、目标、模型、优化器、分布式五个层面排查。
16. MoE 基模
MoE(Mixture of Experts)通过稀疏激活增加模型总参数量。
一个 MoE 层通常包括:
- router / gate:决定 token 去哪些 expert。
- experts:多个 FFN 专家。
- top-k routing:每个 token 选择 k 个 expert。
- load balancing loss:避免所有 token 挤到少数 expert。
优点:
- 总参数量大。
- 每 token 激活参数较少。
- 训练和推理 FLOPs 相对可控。
缺点:
- all-to-all 通信复杂。
- expert 负载不均衡。
- router 容易不稳定。
- 小 batch 或低并发推理效率可能不好。
- 部署系统更复杂。
面试回答重点:MoE 不是免费午餐,它用通信复杂度和系统复杂度换取参数规模扩展。
17. 长上下文训练
长上下文能力不是把 RoPE scale 一下就完事。
核心挑战:
- attention 计算和显存随长度平方增长。
- 长文档数据质量难保证。
- 模型容易只利用局部上下文。
- 位置外推可能退化。
- 评测容易被“针在 haystack”误导。
常见方法:
- RoPE scaling / YaRN / NTK scaling。
- 长上下文 continued pretraining。
- 高质量长文档数据。
- FlashAttention / ring attention。
- context parallel。
- sliding window attention。
- sparse attention。
- retrieval augmentation。
长上下文评测不仅要测 needle retrieval,还要测多跳推理、长文档总结、跨段引用、指令保持和抗干扰能力。
18. 代码模型训练
代码能力强通常来自几个因素:
- 高质量代码语料。
- 多语言代码覆盖。
- README、文档、issue、commit message。
- 单元测试和执行反馈。
- SFT 中加入代码问答和修复任务。
- RL / rejection sampling 优化可执行正确性。
代码数据清洗要注意:
- 过滤 vendored dependencies。
- 过滤 minified 文件。
- 保留文件路径和项目结构信息。
- 处理 license。
- 去重 fork 仓库。
- 过滤二进制和生成文件。
代码模型评测不能只看 pass@1,还要看多文件修改、依赖理解、测试修复、长上下文 repo 理解和工具调用能力。
19. 数学与推理训练
数学能力通常不是单靠预训练自然涌现到很强,需要:
- 高质量数学语料。
- 分步解题数据。
- 合成推理数据。
- verifier / reward model。
- rejection sampling。
- self-consistency。
- process supervision。
但也要注意:过多低质量 chain-of-thought 会让模型学会“看起来很会推理,但实际乱编”。
推理训练的关键不只是最终答案,而是过程是否可靠、可检验、可泛化。
20. 后训练:从基模到助手
预训练模型只会续写,不一定会听指令。后训练让它变成可用助手。
20.1 SFT
SFT(Supervised Fine-Tuning)用指令-回答数据训练模型。
数据类型:
- 单轮问答。
- 多轮对话。
- 写作、总结、翻译。
- 代码生成和解释。
- 数学解题。
- 工具调用。
- 安全拒答。
- 角色扮演。
SFT 关键是质量,不是越多越好。少量高质量数据往往比大量模板化数据更有效。
20.2 RLHF
RLHF 通常包括:
- 训练 SFT 模型。
- 收集人类偏好比较数据。
- 训练 reward model。
- 用 PPO 等 RL 方法优化策略。
目标是让模型输出更符合人类偏好。
缺点:
- 工程复杂。
- reward hacking。
- 训练不稳定。
- 标注成本高。
20.3 DPO
DPO(Direct Preference Optimization)直接使用偏好对优化模型,不显式训练 reward model,也不需要 PPO 那样复杂的 RL loop。
直观理解:给定 chosen 和 rejected,提升 chosen 概率,降低 rejected 概率,同时约束模型不要偏离 reference model 太远。
DPO 工程上更简单,因此很常用。
20.4 RLAIF
RLAIF 使用 AI feedback 替代或辅助人类反馈。优点是规模大、成本低;缺点是可能继承 judge model 的偏见和盲点。
20.5 对齐税
后训练可能提高人类偏好和安全性,但也可能损伤某些能力,这叫 alignment tax。
例如:
- 回答变啰嗦。
- 拒答过度。
- 创造性下降。
- 代码能力下降。
- 数学推理变保守。
所以后训练需要持续评测基础能力,不能只看聊天体验。
21. 安全训练
安全训练包括:
- 拒绝违法有害请求。
- 隐私保护。
- 防止泄露系统提示词。
- 防止生成恶意代码。
- 降低偏见和歧视。
- 幻觉控制。
- 医疗、法律、金融等高风险领域免责声明。
常用手段:
- 安全 SFT 数据。
- 偏好数据。
- red teaming。
- policy model / moderation model。
- refusal style 优化。
- adversarial prompt 训练。
安全训练的难点是平衡 helpfulness 和 harmlessness。过度安全会导致模型什么都不答;过度开放则风险高。
22. 评测体系
基模评测要分层。
22.1 预训练中间评测
训练过程中需要定期评估:
- validation loss。
- 不同数据域 loss。
- benchmark 子集。
- 语言能力。
- 代码能力。
- 数学能力。
- 长上下文能力。
Validation loss 下降不代表所有能力都提升,尤其是后期需要看能力评测。
22.2 通用 Benchmark
常见方向:
- 知识问答。
- 阅读理解。
- 常识推理。
- 数学推理。
- 代码生成。
- 多语言能力。
- 指令跟随。
- 安全性。
评测要注意污染、prompt 格式、采样参数、是否使用 CoT、是否使用工具、是否 few-shot。
22.3 人类评测
自动评测无法完全覆盖用户体验。人类评测关注:
- 是否有帮助。
- 是否事实正确。
- 是否遵循指令。
- 是否表达清晰。
- 是否安全。
- 是否符合风格要求。
22.4 LLM-as-a-Judge
用强模型当裁判可以提高评测效率,但有偏差:
- 偏好长回答。
- 偏好格式好看的回答。
- 对事实错误不敏感。
- 对自身风格有偏好。
- 容易被 prompt hack。
所以最好结合人工抽检和客观评测。
23. Benchmark 污染
Benchmark contamination 是基模训练绕不开的问题。
污染来源:
- 训练数据包含 benchmark 原题。
- 网页中有题解。
- 合成数据引用 benchmark。
- 后训练数据混入评测集。
- 模型蒸馏数据来自已见过题的模型。
解决方法:
- 训练集与 benchmark 去重。
- 使用时间切分的新数据集。
- 构造私有评测集。
- 动态生成题目。
- 评测过程记录 prompt 和输出。
- 对可疑高分做人工分析。
24. 推理部署八股
基模训练后还要能高效服务。
24.1 Prefill 和 Decode
LLM 推理分两段:
- Prefill:处理 prompt,计算初始 KV Cache,可并行度高。
- Decode:逐 token 生成,每步依赖上一步,延迟敏感。
Prefill 更像大矩阵计算,decode 更容易受内存带宽和 KV Cache 影响。
24.2 KV Cache
自回归生成时,过去 token 的 K/V 可以缓存,避免每步重复计算。
KV Cache 大小与以下因素相关:
- batch size。
- sequence length。
- layers。
- KV heads。
- head dimension。
- precision。
GQA/MQA 能显著降低 KV Cache。
24.3 Continuous Batching
请求长度和生成长度不同,如果静态 batching,吞吐会很差。Continuous batching 会动态加入和移除请求,提高 GPU 利用率。
24.4 PagedAttention
PagedAttention 借鉴操作系统分页思想管理 KV Cache,减少碎片,提高大规模并发服务效率。
24.5 量化
常见量化:
- FP16 / BF16。
- INT8 weight-only。
- INT4 weight-only。
- GPTQ / AWQ。
- SmoothQuant。
- KV Cache quantization。
量化可以降低显存和带宽,但可能损伤质量,尤其是数学、代码和长上下文能力。
25. 成本估算
训练成本可以粗略由 token 数、参数量和硬件效率估算。
训练 FLOPs:
如果模型参数
实际训练时间取决于:
- GPU 数量。
- GPU 理论 FLOPs。
- MFU(Model FLOPs Utilization)。
- 通信效率。
- checkpoint 和数据加载开销。
- 故障重启。
MFU 是衡量训练系统效率的重要指标。高 MFU 说明硬件利用较好;低 MFU 可能是通信、数据加载、kernel、pipeline bubble 或小 batch 导致。
26. 数据合成与蒸馏
现代基模训练越来越依赖合成数据。
合成数据用途:
- 指令数据扩充。
- 数学解题过程。
- 代码单测生成。
- 多轮对话。
- 工具调用轨迹。
- 安全红队数据。
- 小语种增强。
蒸馏方式:
- response distillation:学习强模型回答。
- logit distillation:学习 soft targets。
- reasoning distillation:学习推理轨迹。
- preference distillation:学习偏好排序。
风险:
- 模型风格同质化。
- 错误被放大。
- 数据多样性下降。
- judge model 偏见传递。
- 合成痕迹过重。
所以合成数据需要过滤、打分、多样化采样和人工抽检。
27. 多模态基模训练
多模态模型通常要解决“不同模态如何对齐”的问题。
常见路线:
- 图像编码器 + LLM:用视觉 encoder 抽特征,再投影到 LLM token space。
- 统一 tokenization:把图像、音频、视频离散化成 token。
- Diffusion / Flow + LLM:LLM 负责语义规划,生成模型负责图像或视频生成。
- Any-to-any 模型:输入输出都支持多模态。
训练阶段通常包括:
- 视觉-语言对齐预训练。
- 图文指令微调。
- 多轮视觉问答。
- OCR 和文档理解。
- 视频时序理解。
- 多模态偏好对齐。
难点:
- 多模态数据质量。
- 图文错配。
- 视觉幻觉。
- 高分辨率成本。
- 视频序列太长。
- 多模态安全问题。
28. 常见面试题速答
28.1 为什么 LLM 用 next token prediction 能学会推理
因为预测下一个 token 不是简单统计词频。为了在大量文本、代码和推理数据中降低 loss,模型必须学习语法、语义、事实知识、上下文依赖、代码执行模式和推理路径。推理能力是大规模数据、模型容量和训练目标共同作用下的涌现结果。
28.2 为什么数据去重重要
去重可以提升训练效率、降低记忆风险、减少评测污染,并避免重复数据让模型过拟合某些模板或来源。
28.3 为什么训练用 BF16
BF16 动态范围接近 FP32,比 FP16 更不容易 overflow,同时显存和计算效率接近低精度训练,因此大模型训练更稳定。
28.4 为什么要 warmup
训练初期参数和 optimizer state 还不稳定,直接使用大学习率容易导致梯度爆炸或 loss spike。warmup 让学习率逐步升高,提升稳定性。
28.5 ZeRO-3 和 Tensor Parallel 区别
ZeRO-3/FSDP 是切参数、梯度和优化器状态,主要解决状态显存问题;Tensor Parallel 是切单层矩阵计算,主要解决单层模型太大和计算并行问题。实际训练中常组合使用。
28.6 为什么 GQA 能加速推理
GQA 减少 K/V head 数量,降低 KV Cache 大小和内存带宽压力,因此 decode 阶段更高效,同时质量通常比 MQA 更稳。
28.7 FlashAttention 为什么快
它不显式写出完整 attention matrix,而是分块在 SRAM 中计算,并用 online softmax 保持数值稳定,减少 HBM 读写,因此更快更省显存。
28.8 SFT 和 RLHF 区别
SFT 学习示范答案,让模型会按指令回答;RLHF 使用偏好信号进一步优化回答质量、安全性和人类偏好。SFT 是模仿,RLHF 是偏好优化。
28.9 DPO 为什么比 PPO 简单
DPO 直接用偏好对优化语言模型,不需要单独训练 reward model,也不需要复杂 RL rollout 和 PPO 更新,因此工程上更简单稳定。
28.10 为什么 validation loss 低不一定用户体验好
Validation loss 衡量平均 token 预测能力,但用户体验还包括指令遵循、事实性、推理可靠性、安全性、格式、风格和多轮一致性。这些需要专门评测和后训练。
29. 基模训练排障清单
如果训练出问题,可以按这个 checklist 排查。
数据侧:
- 是否有乱码、空样本、重复样本。
- tokenizer 是否和数据匹配。
- packing 是否跨文档污染。
- loss mask 是否正确。
- 数据配比是否异常。
模型侧:
- attention mask 是否正确。
- label shift 是否正确。
- position ids 是否正确。
- norm epsilon 是否合理。
- 初始化是否正确。
优化侧:
- 学习率是否过大。
- warmup 是否太短。
- gradient clipping 是否开启。
- AdamW 参数是否合理。
- weight decay 是否错误作用在 norm/bias 上。
系统侧:
- 梯度同步是否正确。
- mixed precision 是否 overflow。
- checkpoint 是否完整。
- 随机种子和 dataloader 状态是否恢复。
- 通信是否有 silent error。
评测侧:
- benchmark 是否污染。
- prompt 格式是否一致。
- decoding 参数是否一致。
- 是否区分 base model 和 chat model。
30. 一个面试中的完整回答模板
如果面试官问:“你讲一下大模型基模训练流程。”
可以这样回答:
我会从数据、模型、训练系统、稳定性和后训练五个层面讲。首先数据是基模训练的核心,需要收集多源语料,做清洗、质量过滤、去重、隐私和安全处理,并按能力目标设计数据配比。然后设计 tokenizer 和 decoder-only Transformer 架构,包括 RoPE、RMSNorm、SwiGLU、GQA 等常见组件。预训练目标通常是 causal LM 的 next token prediction,用 AdamW、warmup + cosine decay、BF16 混合精度训练。系统上会结合 data parallel、tensor parallel、pipeline parallel、ZeRO/FSDP、activation checkpointing 和 FlashAttention 来解决显存与吞吐问题。训练中要监控 loss、梯度范数、NaN、MFU、数据域 loss,并通过 checkpoint 容错。预训练完成后,还要做 SFT、DPO/RLHF、安全对齐和工具调用训练,最后通过通用 benchmark、人类评测、红队测试和线上反馈迭代。
这个回答的优点是结构完整,而且能自然展开到任何细节。
31. 总结
基模训练可以理解成一个由“数据规模、模型容量、计算系统、训练稳定性和后训练对齐”共同决定的复杂工程。
真正重要的不是背某一个公式,而是理解每个环节为什么存在:
- 数据决定模型学什么。
- Tokenizer 决定信息如何进入模型。
- 架构决定容量和效率。
- 预训练目标决定基础能力形成方式。
- 分布式系统决定能不能训得动。
- 稳定性治理决定能不能训完。
- 后训练决定能不能变成好用助手。
- 评测闭环决定能不能持续进化。
如果把基模训练比作造一座城市,模型架构只是建筑结构,数据是土地和人口,训练系统是电网和交通,后训练是公共服务,评测是城市治理。只有这些系统共同工作,才可能训练出真正可用的大模型。