# AI 大模型解构

> 拆开 Qwen 2.5、Llama、DeepSeek、GLM 等主流开源大模型的「发动机盖」。

- 作者：David（道雾轩）
- 最后更新：2026-08-03
- 原文：https://daiw.org/manual/llm-anatomy
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 序 · 同一副骨架，各自的执念

读完 [nanoGPT 源码解读](https://daiw.org/manual/nanogpt)，你已经握着一件趁手的工具：**一个 GPT 的完整骨架**——词嵌入、一摞 Transformer Block（注意力 + 前馈）、输出层。现在把镜头拉到 2024–2025 年那些真正的开源大模型：Qwen、Llama、DeepSeek、GLM……

**惊人之处不是它们多不一样，而是它们多一样。**

把 DeepSeek-V3、Llama 4、Qwen3、GLM-4.5 的架构图并排摆开，你会发现：decoder-only 的堆叠、RoPE 位置编码、RMSNorm、SwiGLU 风格的前馈、Pre-Norm 残差——**大同小异**，和你在 nanoGPT 里读到的几乎是同一套。真正把它们区分开的，是**少数几个位置上的不同下注**。而恰恰是这几处「执念」，决定了一个模型是省显存的、是便宜的、是能塞进你显卡的，还是只能跑在集群上的。

所以这个专栏做的事很明确：

> **做一次「受控对比」：把共同的骨架摁住不动，只把各家分道扬镳的那几个「零件」拎出来，一维一维地并排看——这一处，Llama 怎么选、DeepSeek 怎么选、Qwen 怎么选，以及为什么。**

## 方法：一维一章，把差异逼出来

讲架构最容易犯的错，是「一个模型一章」——讲完 Llama 讲 Qwen，讲完 Qwen 讲 DeepSeek。这样讲，差异是**散**的，你读完只记得一堆名字，记不住谁和谁到底差在哪。

本专栏反过来：**按「架构维度」切章**。每一章锁定一个可对比的轴——比如「注意力怎么省 KV 缓存」「前馈用稠密还是 MoE」「归一化放前面还是后面」——然后把所有模型在这个轴上的选择**拉成一排**，讲清楚每种选择解决什么问题、代价是什么、谁选了它。差异是被**逼出来**的，不是被罗列的。

## 两条主线，串起大半个故事

2024–2025 的大模型创新，乍看五花八门，其实**大半在押注两件事**：

1. **省 KV 缓存** —— 推理时，注意力的键值缓存(KV cache)是显存杀手。于是有了 MHA → MQA → GQA → **MLA**（DeepSeek 的杀手锏）这一路演进，还有 Gemma、GPT-OSS 的**滑动窗口**。这条线，回答的是「怎么让模型推理时更省、更便宜」。
2. **稀疏化(MoE)** —— 把一个巨大的前馈层拆成几百个「专家」，每个 token 只激活其中几个。于是 671B 的 DeepSeek-V3 每步只算 37B。这条线，回答的是「怎么把参数堆到天上，又不让计算跟着爆炸」。

抓住这两条主线，你就抓住了这一代大模型的**主旋律**。其余的（归一化的位置、长上下文外推、训练目标的花样）是重要的配角。

## 路线图（约 14 篇）

<Callout type="info">
  这是一个**对比向**专栏，规模比 nanoGPT 大。目前放出的是**开篇 + 第一条主线的头几篇**，其余按下表逐步补全。你可以先看看结构对不对胃口。
</Callout>

**开篇**
- **共同骨架：先看它们有多像** —— 把「不变的部分」一次讲清，后面才好聚焦「变的部分」；并给出六个差异维度的总览地图。

**主线一 · 省 KV 缓存**
- **注意力：从 MHA 到 MQA、GQA、MLA** —— KV 缓存为什么是瓶颈，以及这一路「共享 / 压缩」的演进；DeepSeek 为什么偏偏选了最复杂的 MLA。
- **滑动窗口：Gemma 与 GPT-OSS 的局部注意力** —— 用「只看附近」再省一刀，以及 Mistral 为什么又把它去掉了。

**主线二 · 稀疏化(MoE)**
- **稠密 vs 稀疏：MoE 为什么突然统治了大模型**
- **MoE 的三个旋钮：专家数、激活数、共享专家** —— DeepSeek 的「多而小 + 共享」 vs Llama 4 的「少而大」 vs Qwen3「砍掉共享专家」。
- **让 MoE 训得稳、又均衡** —— 辅助损失 vs DeepSeek 的「无辅助损失均衡」，以及为什么头几层要保持稠密。

**其余关键维度**
- **归一化：RMSNorm、Pre / Post / 三明治、QK-Norm** —— 一个「放哪儿」的小选择，如何左右训练稳定性。
- **位置编码与长上下文：RoPE、YaRN，与 NoPE 的挑衅**
- **训练侧的花样：MTP 多 token 预测、FP8、Muon**
- **宽还是深，以及那些小执念** —— 宽深之争、注意力里的 bias、attention sink、词表大小。

**收尾**
- **四张脸谱：DeepSeek / Llama / Qwen / GLM 各自的组合拳**
- **一张大表 + 趋势** —— 把所有维度收进一张对比表，并收束两条主线。

## 说明：以「架构」为准，不追版本号

<Callout type="warn">
  开源模型迭代极快。本专栏聚焦**架构层面的本质选择**，以各家**最具代表性的版本**为锚（DeepSeek-V3、Llama 3/4、Qwen 2.5/3、GLM-4.5），并在能说明问题时**客串** Mistral、Gemma、OLMo 2、GPT-OSS、Kimi K2 等作对照。某个具体数字（专家数、层数）会随版本变动，以官方技术报告为准；要你记住的是**取舍的逻辑**，不是某一版的参数表。
</Callout>

## 读之前，你最好有

- **读过 [nanoGPT 源码解读](https://daiw.org/manual/nanogpt)**（至少读到注意力那章）—— 我们默认你已经知道「一个标准 Transformer Block 长什么样」，本专栏只讲**它们在这之上改了什么**。
- 不需要读过任何一篇原论文；关键结论我们会讲清来龙去脉。

准备好了，先把「它们有多像」这件事看透——这样接下来每一处「不一样」才够扎眼：[共同骨架：先看它们有多像](https://daiw.org/manual/llm-anatomy/common-skeleton)。

## 本专栏篇目

- [AI 大模型解构](https://daiw.org/manual/llm-anatomy.md): 拆开 Qwen 2.5、Llama、DeepSeek、GLM 等主流开源大模型的「发动机盖」。

### 先看它们有多像

- [共同骨架 · 先看它们有多像](https://daiw.org/manual/llm-anatomy/common-skeleton.md): 对比之前，先把不变的部分讲清：现代开源大模型共享同一套 decoder-only 骨架(RoPE + RMSNorm + Pre-Norm + SwiGLU)，它们相对 GPT-2 的升级早已「达成共识」。真正还在分歧的，只有六个维度——本章给出总览地图。

### 主线一 · 省 KV 缓存

- [注意力 · 从 MHA 到 MQA、GQA、MLA](https://daiw.org/manual/llm-anatomy/attention-mha-gqa-mla.md): KV 缓存是推理时的显存杀手。MHA→MQA→GQA→MLA 这一串缩写，其实是同一个问题越来越聪明的答案——共享键值头，还是干脆把键值压缩掉？看 Llama/Qwen 的 GQA 与 DeepSeek 的 MLA 各自的取舍。
- [滑动窗口 · Gemma 与 GPT-OSS 的局部注意力](https://daiw.org/manual/llm-anatomy/sliding-window.md): 省 KV 缓存的另一条路——不压缩每个 token 的缓存，而是干脆让每个 token 只看附近一个窗口。看 Gemma 3 的局部/全局 5:1 交错、GPT-OSS 的隔层滑窗，以及 Mistral 为什么又把它去掉了。

### 主线二 · 稀疏化 MoE

- [稠密 vs 稀疏 · MoE 为什么突然统治了大模型](https://daiw.org/manual/llm-anatomy/moe-dense-vs-sparse.md): 把一个巨大的前馈层拆成几百个「专家」，每个 token 只激活其中几个——于是 671B 的 DeepSeek-V3 每步只算 37B。讲清 MoE 的核心思想：把「总参数（知识容量）」和「激活参数（每步算力）」解耦，以及它省的是算力不是显存。
- [MoE 的三个旋钮 · 专家数、激活数、共享专家](https://daiw.org/manual/llm-anatomy/moe-knobs.md): 同样是 MoE，DeepSeek 的「多而小 + 共享专家」、Llama 4 的「少而大」、Qwen3 的「砍掉共享专家」为什么差这么多？拆开三个可调旋钮——专家总数与粒度、每 token 激活几个、要不要一个万金油共享专家——看各家的取舍逻辑。
- [让 MoE 训得稳、又均衡](https://daiw.org/manual/llm-anatomy/moe-stability.md): MoE 的命门是负载均衡——路由器爱偏心，把 token 全塞给少数热门专家，其余饿死。传统靠「辅助损失」硬掰，但它会干扰主目标、伤性能。看 DeepSeek 的「无辅助损失均衡」如何用一个动态偏置优雅解决，以及为什么头几层要保持稠密。

### 其余关键维度

- [归一化 · RMSNorm、Pre / Post / 三明治、QK-Norm](https://daiw.org/manual/llm-anatomy/normalization.md): 一个「把归一化放哪儿」的小选择，如何实实在在左右训练稳定性。RMSNorm 早已统一；真正还在分歧的是放置：多数 Pre-Norm，OLMo 2 偏要回到 Post-Norm，Gemma 用前后都放的三明治，而 QK-Norm 正在成为新标配。
- [位置编码与长上下文 · RoPE、YaRN，与 NoPE 的挑衅](https://daiw.org/manual/llm-anatomy/positional-encoding.md): RoPE 早已一统位置编码——它不加位置向量，而是「旋转」Q、K。可要把上下文从 4K 拉到几十万，RoPE 得动手脚：位置插值、NTK、YaRN。而 NoPE 更激进：干脆不要位置编码，靠因果掩码也能外推。
- [训练侧的花样 · MTP、FP8、Muon](https://daiw.org/manual/llm-anatomy/training-tricks.md): 两个模型架构图一模一样，训练方式也能拉开差距。看不改推理样子、却决定「训得多快多省多好」的三个花样：DeepSeek 的多 token 预测(MTP)、FP8 低精度训练，以及 Kimi 首次大规模押注的 Muon 优化器。
- [宽还是深，以及那些小执念](https://daiw.org/manual/llm-anatomy/width-depth-quirks.md): 收尾前的一撮「小差异」——同样的参数预算，做宽还是做深（GPT-OSS 选宽、Qwen3 选深）；注意力里那个被丢弃又被捡回的 bias；GPT-OSS 的 attention sink；以及词表大小背后的多语言/成本权衡。个个不大，凑起来就是各家的指纹。

### 收尾

- [四张脸谱 · DeepSeek / Llama / Qwen / GLM 的组合拳](https://daiw.org/manual/llm-anatomy/model-profiles.md): 把散落在各维度的选择收拢成整体——DeepSeek 的「效率最大化」、Llama 的「务实标准派」、Qwen 的「多语言 + 从简」、GLM 的「借力 DeepSeek、稳字当头」。每个模型的性格，是它一连串取舍叠出来的。
- [一张大表 + 趋势](https://daiw.org/manual/llm-anatomy/recap-and-trends.md): 把所有维度收进一张对比表，再收束贯穿全篇的两条主线与几个大趋势——MLA 上位、MoE 统治、共享专家之争、QK-Norm 成标配、Post-Norm 回潮。读完你手里就有了一把「拆任何新模型」的尺子。
