大模型原理手册
融会贯通
学习资源¶
这份手册是一张"地图"。想在某个方向上走得更深,就需要读原始论文和源码。下面按章节列出最值得读的材料,每一项都说明为什么值得读、读的时候关注什么;最后给出学完本手册之后,走向推理优化的下一步。
读论文的方法¶
- 先看图和表,再看公式,最后看正文。架构论文的核心往往就是一张结构图和一张消融表。
- 带着问题读:这个设计解决了什么瓶颈?付出了什么代价?(对照一个 token 的完整旅程里的因果图。)
- 能复现的就复现:本手册的每个概念都有一段可运行的代码,读论文时也可以写一个最小实现,和论文中的数字对一对。
按章节¶
基础与 Transformer¶
| 材料 | 为什么读 |
|---|---|
| Attention Is All You Need(2017) | Transformer 的原始论文。注意编码器-解码器结构、Post-Norm、正弦位置编码,这些都已被后来的模型改掉了,想想为什么 |
| The Illustrated Transformer | 图解,适合第一遍建立直觉 |
| Neural Machine Translation of Rare Words with Subword Units(BPE) | BPE 用于 NLP 的起点 |
| karpathy/minbpe、karpathy/nanoGPT、karpathy/nanochat | 最小可读的分词器、GPT 训练代码,以及从预训练到对话的完整小型流水线;配套视频也很值得看 |
| RoFormer(RoPE) | RoPE 的推导,读第 3 节即可 |
| Root Mean Square Layer Normalization | RMSNorm |
| GLU Variants Improve Transformer | SwiGLU 的来源,只有 3 页 |
| A Mathematical Framework for Transformer Circuits | 从"残差流"的视角理解 Transformer,和本手册的残差流一节相呼应 |
| transformers 的 modeling_llama.py | 把它和本手册的 mini_llm.py 逐行对照,是读懂所有 LLaMA 类模型实现的捷径 |
架构演进¶
| 材料 | 为什么读 |
|---|---|
| Fast Transformer Decoding: One Write-Head is All You Need(MQA) | 最早从"decode 访存受限"出发设计模型结构的论文之一 |
| GQA | GQA,以及如何把 MHA 的检查点转换成 GQA |
| DeepSeek-V2 | MLA 的出处,第 2.1 节详细讲了低秩压缩、权重吸收和解耦 RoPE |
| DeepSeek-V3 | 细粒度 MoE、无辅助损失的负载均衡、MTP、FP8 训练,以及推理部署方案(第 3.4 节) |
| Switch Transformers、Mixtral of Experts | MoE 的路由、容量和负载均衡 |
| LLaMA、Llama 2、The Llama 3 Herd of Models | 标准模板的来源;Llama 3 的报告对数据、训练基础设施和推理(FP8、流水线并行)都有详细描述 |
| Qwen2.5、Qwen3 技术报告 | 本手册所用模型的"家谱" |
| Gemma 2、Gemma 3 | 局部/全局注意力混合、软截断、QK-Norm |
| gpt-oss 模型卡 | 注意力汇聚、交替的滑动窗口、MXFP4 |
| YaRN | 长上下文扩展中最常用的 RoPE 缩放方法 |
训练与对齐¶
| 材料 | 为什么读 |
|---|---|
| Scaling Laws for Neural Language Models、Chinchilla | \(6ND\)、算力最优的参数与数据配比 |
| InstructGPT | SFT + RLHF 的经典流程 |
| DPO | 看懂损失函数的推导,就理解了偏好优化 |
| DeepSeekMath(GRPO)、DeepSeek-R1 | 推理模型是怎样用强化学习训练出来的;RL 训练中大量的采样正是推理引擎的新战场 |
| LoRA | 低秩微调,以及多 LoRA 服务的基础 |
推理原理与推理服务¶
| 材料 | 为什么读 |
|---|---|
| Transformer Inference Arithmetic | 推理估算的经典博客,和本手册的估算一章互为补充 |
| How to Scale Your Model | Google DeepMind 的"屋顶线 + 并行"教程,推理一章尤其值得读,TPU 视角但原理通用 |
| FlashAttention、FlashAttention-2、FlashAttention-3 | IO 感知的注意力;配合 CUDA 手册的 FlashAttention 与推理算子 |
| Efficient Memory Management for LLM Serving with PagedAttention(vLLM) | PagedAttention 与 vLLM 的设计 |
| SGLang | RadixAttention 前缀缓存、结构化输出的压缩状态机 |
| Sarathi-Serve | 分块 prefill 与"无停顿"的调度 |
| DistServe、Mooncake | PD 分离;Mooncake 是以 KV Cache 为中心的生产架构 |
| Fast Inference from Transformers via Speculative Decoding、Accelerating LLM Decoding with Speculative Sampling | 投机解码与投机采样的正确性证明 |
| Medusa、EAGLE | 不需要独立草稿模型的投机解码 |
| LLM.int8()、SmoothQuant、GPTQ、AWQ | 离群值问题与主流量化方法 |
| Efficient Streaming Language Models with Attention Sinks、Massive Activations in LLMs | 本手册在 Qwen 上观察到的注意力汇聚与巨大激活值 |
| Defeating Nondeterminism in LLM Inference | 为什么温度为 0 结果也会变、如何实现 batch 不变的 kernel |
学完之后:走向推理优化¶
本手册解决的是"模型在算什么"。接下来的两块:
1. 硬件怎么执行:CUDA。 见 CUDA 进阶手册。其中与本手册衔接最紧密的章节:
- GEMM 优化之路:所有线性层;
- Softmax 与归一化:RMSNorm、融合 kernel;
- FlashAttention 与推理算子:prefill 与分页 decode 注意力;
- 量化与 GEMV:INT4 权重的 decode;
- 流、并发与 CUDA Graphs、多 GPU 与 NCCL。
2. 系统怎么调度: 本系列的第四本 推理系统手册 专门讲这一部分:从零写一个推理引擎,再对照它读 vLLM 与 SGLang 的源码,之后是分布式推理、性能工程和面试准备。如果想直接读源码,建议的顺序:
- nano-vllm:用一千多行代码实现了 vLLM 的核心(分页 KV、连续批处理、前缀缓存、CUDA Graphs、张量并行),一两天就能读完,是理解完整引擎的最佳起点;
- vLLM:从一个请求的生命周期读起(API 服务 → 引擎 → 调度器 → 模型执行器 → 采样器),再看
model_executor/models/下你熟悉的模型实现,对照mini_llm.py; - SGLang:重点看调度器(前缀缓存、overlap 调度)和 DeepSeek 相关的优化(MLA、DP Attention、EP)。
读源码时,把本手册的"逐站解读"表(见一个 token 的完整旅程)当作索引:每遇到一个模块,就问它对应表中的哪一站、解决了哪个瓶颈。
3. 动手做项目。 几个由浅入深的方向:
- 给
mini_llm.py加上分页 KV Cache 与连续批处理,写一个几百行的"迷你推理引擎",测量吞吐随 batch 的变化; - 在 GPU 上用 Triton 写 RMSNorm、SwiGLU、RoPE 的融合 kernel,替换
mini_llm.py中对应的部分,对比速度与精度; - 在 vLLM 或 SGLang 中实现(或复现)一个小特性:新的采样参数、一个新模型结构的支持、一个 kernel 的优化,并提交 PR。
小结¶
- 读论文先看图表,带着"解决了什么瓶颈、代价是什么"的问题读。
- 每一章都有对应的原始论文,推理部分的论文是后续深入的重点。
- 下一步:CUDA 手册解决"硬件怎么执行",推理系统手册(以及 nano-vllm → vLLM → SGLang 的源码)解决"系统怎么调度"。
发现错误或有更好的写法?在 GitHub 上编辑此页提交问题