Transformer 解剖:从 Attention 到推理系统

前言

作者 杨艺韬 · 2,399 字

前言

一道分水岭

2017 年 6 月 12 日,arXiv 上出现了一篇叫《Attention Is All You Need》的论文。八位作者,全部来自 Google Brain 和 Google Research。论文 11 页,提出了一种叫 Transformer 的全新序列模型架构,完全抛弃了当时主流的循环神经网络(RNN)和卷积神经网络(CNN),只用一种叫 self-attention(自注意力)的机制来建模序列。

那一年,深度学习的主流是 LSTM、GRU、ConvSeq2Seq,是 Bahdanau attention、Luong attention 这些「在 RNN 之上加一点注意力」的混合架构。Transformer 把整张棋盘掀了——它说:注意力本身就够了,循环和卷积都可以扔掉。

九年过去了。今天你打开任何一篇大模型论文、任何一个开源大模型的代码、任何一份 NVIDIA 推理优化白皮书,最底下的骨架都是 Transformer。GPT 系列是 Transformer,Llama 是 Transformer,Claude 是 Transformer,DeepSeek-V3 是 Transformer,Gemini 是 Transformer。除了一小撮试验性质的非 Transformer 架构(Mamba、RWKV、Hyena),整个大模型工业是建立在那 11 页论文上的。

这是一道清晰的分水岭。在它之前,序列建模属于 RNN。在它之后,所有要处理「上下文」的工作——文本理解、代码生成、多模态对齐、Agent 规划、长链推理——都被 Transformer 接管。九年时间,足以让最初论文里的某些细节被淘汰(比如原始 sinusoidal 位置编码已经被 RoPE 取代),但骨架本身岿然不动。

九年没变过的东西,值得彻底解剖一次。

这本书想做的事

市面上讲 Transformer 的资料已经很多。论文有,3Blue1Brown 的可视化有,Andrej Karpathy 的 from-scratch 视频有,HuggingFace 的 tutorial 有。每一份都各有所长。这本书想补的是——也是我自己当年学 Transformer 时最缺的——工程师视角的体系化叙述

什么意思?大多数 Transformer 教程止步于「Attention 公式 + 一段 PyTorch 代码 + 一张架构图」。它们解释了它是怎么算的,但没解释它在一台真实 GPU 上每一秒钟在做什么。结果是读者学完之后,能写出 Attention,但看不懂 vLLM 的 PagedAttention,看不懂为什么 7B 模型推理时显存被 KV Cache 占走一半,看不懂 Flash Attention 的论文为什么把「内存层级」放在标题上。

这本书的每一章都有两条腿:

一条腿讲机制——从数学到代码,从 Q/K/V 三元组到 RoPE 的旋转矩阵,从 LayerNorm 的均值方差到 SwiGLU 的门控乘法。读者读完会建立完整的、能从公式追到张量形状、再追到 PyTorch 代码的链条。

另一条腿讲工程代价——这个机制在 GPU 上跑起来到底花多少计算、多少显存、多少访存带宽。FFN 占 Transformer 参数量的 2/3,但 Attention 才是访存瓶颈;KV Cache 把推理速度提了几百倍,但代价是 batch_size 受显存约束;Multi-Head 在前向计算上等价于一次大矩阵乘,但 Multi-Query 和 Grouped-Query 在推理时省了几倍 KV 显存——这些「机制对应代价」的对照关系,是工程师读 Transformer 该有的第二层视角。

读完两条腿合在一起的内容,你应该能做到:看到一段大模型推理 trace,能指出哪一段是 Prefill、哪一段是 Decode、哪一段在等显存、哪一段在算 Attention;看到一份显卡监控,能解释 SM 利用率为什么只有 30%、HBM 带宽为什么打满;看到一份模型卡片,能从 hidden_size、num_attention_heads、num_kv_heads、intermediate_size、num_hidden_layers 这几个超参算出参数量、KV Cache 大小、单 token 推理 FLOPs。

这本书不是什么

这本书不是 Transformer 入门。如果你完全没碰过深度学习,建议先看完一门 PyTorch 入门课(比如《动手学深度学习》前 5 章),再来读本书。本书第 1 章会从 RNN 讲起,但不会从「什么是张量」「什么是反向传播」讲起。

这本书不是论文综述。从 2017 到 2026 这九年里,Transformer 相关的论文有上千篇。本书不会逐篇罗列,只会挑选对今天的工业实践仍然在产生影响的关键节点:原始 Attention、BERT、GPT 系列、RoPE、Flash Attention、PagedAttention、GQA、MoE 几条主线。被工业界淘汰或者从未被采纳的方向(比如各种早期稀疏注意力变种),只在背景里一带而过。

这本书不是大模型预训练教程。怎么收集 5 万亿 token 的语料、怎么做数据清洗、怎么调度 1024 张卡、怎么处理 OOM 重启——这些是另一本书的话题。本书第 11 章会讲 Scaling Laws 的工程含义,但不会讲怎么真正去训一个 70B 模型。

这本书不是 LLM 应用书。Prompt Engineering、RAG、Agent、Tool-use——这些主题在《LangGraph 设计与实现》《RAG 系统工程》《MCP 协议与工具系统》里有完整论述。本书是这些书的地基:读完它,你看那几本时会更清楚为什么某些工程决定是必然的(比如为什么 Agent 的中间状态要塞进 prompt 而不是塞进模型本身)。

这本书是什么

这本书是 Transformer 的一份「解剖报告」

「解剖」这个词不是修辞。它意味着:每讲一个机制,都要把它从一团整体的 backbone 里切出来——给出形状、给出数学、给出 PyTorch 实现、给出在 GPU 上的成本剖面、给出它从原始论文到今天工业实现之间的演化路径。

举一个例子。当我们解剖位置编码时,会做下面这些事:

  1. 机制层:把 sinusoidal 公式写出来,说明它为什么用正弦余弦而不是直接的整数嵌入;推导 RoPE 的旋转矩阵,说明为什么旋转的「相对位置」性质让外推更稳定。
  2. 代码层:用 30 行 PyTorch 实现两种位置编码,对比同一个输入的输出张量。
  3. 代价层:sinusoidal 是预计算+加法,几乎免费;RoPE 是每层都要算,但因为是逐元素操作所以瓶颈在访存而非计算;ALiBi 把位置注入到 Attention 分数本身,省掉一次嵌入加法但限制了实现自由度。
  4. 演化层:原始 Transformer 用 sinusoidal、BERT 用 learned absolute、Transformer-XL 用 relative bias、Llama 用 RoPE、Llama 3 把 RoPE 的 base 从 10000 调到 500000 来支持更长上下文——每一次改动背后都对应一个工程问题。

每一章都用这种方式打开。这就是「解剖」。

怎么读这本书

这本书可以从头到尾顺序读,也可以按主题跳读。

新手路径(第一次系统学 Transformer):第 1 章 → 第 2 章 → 第 3 章 → 第 4 章 → 第 5 章 → 第 8 章 → 第 9 章。打通从「为什么需要 Attention」到「自己跑通一个 mini-GPT」的最短路径,大约占全书 40% 内容。

应用工程师路径(已经会用 Transformer,想搞清楚推理工程):第 1 章 → 第 14 章 → 第 15 章 → 第 16 章 → 第 17 章 → 第 18 章。把第六部分推理系统作为主线,前置只读第 1 章建立宏观坐标。

研究路径(关注架构演化):第 6 章 → 第 7 章 → 第 11 章 → 第 12 章 → 第 13 章 → 第 19 章。沿着架构演化的路线读,第 19 章会讲 Mamba、Hybrid 这些 Transformer 之后的探索。

最完整路径(按本书设计):从前言出发,逐章读到第 19 章。这条路径会让你的心智模型最一致——很多机制的设计动机要等到推理系统那部分才能完全闭环(比如 GQA 在第 3 章只是一个变体,到第 15 章才会理解它为什么对 KV Cache 至关重要)。

一些约定

致谢

这本书的形成,受惠于过去九年里整个 Transformer 工业的开放:从 Vaswani 等人公开论文,到 OpenAI / Google / Meta / DeepSeek 持续放出的技术报告,到 Tri Dao 的 Flash Attention 系列论文,到 vLLM 团队把 PagedAttention 开源,到 Karpathy 用 nanoGPT 把整个 Transformer 训练浓缩到一千行可读代码。这本书的每一个核心论断都站在这些前人工作之上。

写作过程中,我大量参考了下列资料,强烈推荐读者在读本书之外也亲自看一遍:

希望读完这本书时,你看 Transformer 的眼神,从「黑盒 + 公式」变成「一台你能拆开、能修、能改造、能优化的机器」。

那就翻到下一页吧。