第二章:大模型核心计算特征
好,咱们直接进入正题。这一章,我打算把大模型最核心的计算逻辑拆开揉碎了讲。你可能会觉得,Transformer 嘛,Attention 嘛,网上资料一大堆。但作为芯片架构师,咱们关心的点不一样——我们得知道这些计算到底在芯片上怎么跑,瓶颈在哪,怎么优化。
2.1 Transformer 架构解析:从宏观到微观
Transformer 架构,说白了就是一个编码器-解码器的结构。但大模型时代,我们用的基本都是 Decoder-only 的变体,比如 GPT 系列。我个人习惯把 Transformer 块看作一个“计算黑盒”,输入是一串 token 的向量,输出是同样长度的、语义更丰富的向量。
这个黑盒里,主要就两大部分:多头自注意力(Multi-Head Self-Attention) 和 前馈神经网络(FFN)。再加上残差连接和层归一化,构成了一个完整的 Block。
核心计算流:
- 输入向量 X 经过 LayerNorm
- 进入 Multi-Head Attention,做 QKV 投影和注意力计算
- 输出与输入做残差连接(Add)
- 再经过 LayerNorm
- 进入 FFN(通常是两层线性变换 + 激活函数)
- 再次做残差连接,输出到下一层
嗯,这里要注意,FFN 的计算量其实占了整个模型的大头,大概 2/3 左右。很多人只盯着 Attention,觉得它最复杂,但真正让芯片算力吃紧的,往往是 FFN 里那两个巨大的权重矩阵。
2.2 Attention 机制的计算模式:QKV 与 Softmax
Attention 机制,我更喜欢叫它“带权重的信息检索”。你想想看,对于序列里的每个 token,它都要去“看”一下其他所有 token,然后决定从它们那里吸收多少信息。
计算过程分三步:
- 投影阶段: 输入 X 乘以三个权重矩阵 Wq、Wk、Wv,得到 Q、K、V。这是三个巨大的矩阵乘法(GEMM)。
- 注意力分数计算: Q 乘以 K 的转置,再除以根号下 d_k(缩放因子)。这一步是 Batch GEMM,计算量是 O(n²·d)。
- Softmax 与加权求和: 对分数矩阵做 Softmax,再乘以 V。Softmax 涉及指数运算和求和,对数值精度敏感;最后的矩阵乘又是 GEMM。
避坑指南: 我曾经在一个项目中,为了省显存,把 Softmax 的精度从 FP32 降到了 FP16。结果模型收敛出了问题,loss 死活降不下去。后来排查发现,是 Softmax 的指数运算在 FP16 下容易溢出。所以,Attention 里的 Softmax,我建议至少保留 FP32 精度,或者用混合精度训练时特别关照一下。
为什么会这样?因为 Softmax 的输入是 QK^T 的结果,数值范围可能很大。FP16 能表示的最大值是 65504,一旦某个 logit 超过这个值,指数运算就直接 inf 了,整个 Attention 分布就崩了。
2.3 大模型对算力的需求分析:算力、带宽与显存
好,到了最实际的部分。大模型到底需要什么样的芯片?我习惯从三个维度去分析:算力(Compute)、带宽(Bandwidth)、显存(Memory)。这三者必须平衡,否则就是木桶效应。
咱们拿一个 70B 参数的模型来举例。假设序列长度是 4096,隐藏层维度是 8192。
| 计算环节 | 计算量(FLOPs) | 访存量(Bytes) | 计算强度(FLOPs/Byte) |
|---|---|---|---|
| QKV 投影 | ~ 3 * 2 * 4096 * 8192 * 8192 | ~ 3 * 8192 * 8192 * 2 | ~ 4096 |
| Attention 分数 | ~ 2 * 4096 * 4096 * 8192 | ~ 4096 * 4096 * 2 | ~ 8192 |
| FFN 第一层 | ~ 2 * 4096 * 8192 * 32768 | ~ 8192 * 32768 * 2 | ~ 4096 |
你看这个表格,计算强度都非常高,动辄几千。这意味着什么?意味着这些操作是计算密集型的,而不是访存密集型。芯片的算力利用率,主要取决于矩阵乘法单元(比如 Tensor Core)能不能跑满。
注意: 但这里有个陷阱。虽然单次计算强度高,但实际推理时,我们往往使用 KV Cache 来避免重复计算。KV Cache 的访存会成为新的瓶颈。尤其是长序列推理时,GPU 的 HBM 带宽会被 KV Cache 的读取占满,导致算力单元“等数据”。这就是所谓的“显存墙”问题。
我个人建议,评估芯片的大模型能力时,不能只看峰值算力。你得跑一下真实的推理 benchmark,看看在长序列下,芯片的“有效算力”还剩多少。很多芯片号称几百 TOPS,一跑长文本推理,实际利用率不到 20%。
2.4 知识体系总览
为了让你更直观地理解这一章的知识结构,我画了一张图。它把 Transformer 的计算拆解、Attention 的微观操作、以及算力需求分析串在了一起。
这张图你看懂了吗?左边是 Transformer 的计算流水线,右边是芯片资源的三个约束。最终都指向一个核心矛盾:计算强度再高,也怕访存拖后腿。
好了,这一章的内容就到这里。下一章我们会深入具体的算子优化,比如如何用 Flash Attention 解决长序列的显存问题。但今天先把这些基础打牢。