大模型系统的 18 个第一性原理锚点
用 18 个短知识点,分清大模型系统中的存储与读取、计算量与耗时、逻辑结构与物理部署。
本文目录
最近学习大模型架构和性能优化,发现最容易混淆的往往不是公式,而是概念的边界:存储和读取、计算量和耗时、逻辑结构和物理部署。
把这些问题拆开,很多新技术就容易理解了。这篇只保留值得反复使用的判断方法。
- 一句话:先分清概念的边界,再判断新技术省下了什么。
- 三个判断:存储不等于读取,计算量不等于耗时,逻辑结构不等于物理部署。
- 核心模型:分别核算需要保存的信息、必须执行的工作,以及关键路径上的等待。
- 边界:结构优化有适用前提,具体缓存、并行与近似重建行为仍以模型和实现为准。
1. 权重、激活、梯度,分别是什么?
权重是模型学到的参数,激活是这一次输入经过计算产生的中间结果。梯度描述损失对某个量的变化有多敏感,用来指导训练中的更新。可以记成:权重是加工规则,激活是正在加工的数据,梯度是改进规则的反馈。
2. Dgrad 和 Wgrad,为什么要分开?
反向传播既要计算损失对本层输入的梯度,也要计算损失对本层权重的梯度。前者是 Dgrad,供前一层继续链式求导;后者是 Wgrad,用于更新本层参数。两者的依赖和期限不同,因此有机会通过调度,让关键路径先前进,把部分权重梯度计算往后放。
3. 残差连接,保存的是已有信息
一层的输出可以写成“原输入+这一层算出的增量”,这就是最基本的残差连接。它让信息和梯度有一条直接通过的路径,不必完全依赖新变换。残差状态本身属于激活,不是训练中独立于激活和梯度之外的第三类数据。
4. HC 扩展的是信息通路,不是复制整个模型
Hyper-Connections 把单路残差流扩展成多路,通过混合把信息送进计算模块,再把结果写回多路状态。核心模块通常仍只执行一次,并不是增加几路就跑几遍 Attention 和 FFN。代价主要增加在状态容量、混合计算和访存上,是否增加跨卡通信还要看并行布局。[1]
5. 多个 Q 头,不是多个 token
同一个 token 的隐藏状态,可以通过投影产生多个不同的 Q 向量。每个 Q 头相当于从不同角度查找信息,再组合各头的结果。token 数、Q 头数和 KV 头数,是三个不同维度。
6. MHA、GQA、MQA、MLA,都在改变“怎么保存和共享历史”
MHA 为不同 Q 头提供各自的 KV;GQA 让一组 Q 头共用 KV;MQA 让所有 Q 头共用一组 KV。即使共享 KV,不同的 Q 仍然可以算出不同的注意力权重。MLA 则进一步改变缓存表示,把信息保存在较紧凑的 latent 中,不能简单理解成“只有一个普通 KV 头”。[2] [3]
7. KV cache 先算每 token,再乘驻留 token 数
普通、各层同配置的 KV 大小,可以按“2 × 层数 × KV 头数 × 头维度 × 每元素字节数 × 驻留 token 数”估算。这里假设 K/V 的头维度相同,且未计量化元数据;使用的是 KV 头数,不是 Q 头数,也不乘专家数量。遇到 MLA、滑窗、跨层共享或混合架构,就必须按实际缓存结构分别计算,不能直接套同一个公式。
8. QSA 这类 Top-K 稀疏注意力:少读、少算,不自动意味着少存
如果采用“轻量打分+Top-K”的稀疏注意力路径,可以理解成先看目录,再精读选中的页面。这里用 QSA 这类名称指代这种选择思路,具体实现仍须分别核实。主要 Attention 只处理选中的历史位置,但每个 token 的 KV 大小不会因为筛选本身变小。没被这次选中的 KV,下次仍可能用到,因此候选历史通常还要保存;索引和筛选也有自己的成本。
9. GDN 用固定状态承载历史
Gated DeltaNet 把历史信息持续更新进固定大小的状态,不需要在该层为每个历史 token 长期保存一份 KV。这样,该层 Decode 的状态容量不随上下文长度增长,但有限状态也带来了记忆容量与信息保留的取舍。混合模型中的其他 Attention 层仍可能保存随长度增长的 KV,不能把单层性质直接推广到整个模型。[4]
10. CED:历史信息要留下,不必让历史 token 跑完所有层
未来 token 需要读取历史信息,但这不要求每个历史 token 都在每一层重新生成一套 KV。CED 让后半段网络的全局 KV 来自 Encoder 输出,因此可以减少历史 token 在 Decoder 中的处理。它需要模型结构和训练配合,不是给普通模型随意跳过几层就能得到的优化。[5]
11. Bounded Replay:用短片段补齐局部状态
多层滑窗的依赖会逐层向前扩展,精确恢复末尾的局部状态,可能需要追溯远多于一个窗口的 token。SWA Bounded Replay 把重放限制在短后缀,并截断后缀之前的局部依赖,以近似状态换取较低的恢复成本。Decoder 侧重放主要减少 Prefill 工作,不代表生成每个 token 时也少跑半个模型;在所引 DeepSeek-V4.1-Flash 的 CED 架构中,当输入远长于滑窗时,Prefill 计算量才接近减半,这更不等于 TTFT 必然减半。近似重建不是数学无损,质量影响仍须在目标任务和边界场景中验证。[5]
12. EP 是分放专家,不是复制专家
假设一层有 256 个专家,不使用专家内部 TP,也不考虑冗余副本:EP8 每卡放 32 个完整专家,EP64 每卡放 4 个。每个 EP 组共同组成一整套专家,token 的激活被发送到选中的专家所在卡上。固定 64 张卡时,8 组 EP8 有 8 套专家副本,而 1 组 EP64 只有一套。
13. 共享专家,与“共享一份专家权重”是两回事
共享专家是模型结构里的分支,每个 token 都会使用;路由专家则由 router 选择一部分参与计算。部署中的权重复用,讨论的是多个 token 如何共用同一个物理专家副本。共享专家在物理上仍然可以复制或切分,名字中的“共享”不规定它只能保存一份。[6]
14. 为什么 Prefill 倾向小 EP,Decode 倾向大 EP?
Prefill 一轮有很多 token,专家通常已经能获得较大的计算批量,此时扩大通信范围的收益可能有限。Decode 每个请求常规每步只贡献一个新 token,把多个小 EP 副本合成一个大 EP 组,可以让更多 token 共用一份专家权重,摊薄读取成本。前提是总负载足够、互联够快、专家负载均衡;单纯给固定小批次增加 GPU,并不会凭空增加每个专家的 token 数。[7]
15. 通信先看消息大小,再看实际路径
小消息容易被启动和同步延迟主导,大消息更容易受有效带宽限制。PCIe、NVLink、RDMA 只是起点,还要看数据经过哪些交换机、是否跨节点、链路是否被共享。并行度相同,rank 放置不同,通信性能也可能完全不同。
16. Overlap 能隐藏等待,不能消灭工作
通信只有与不依赖其结果的计算同时进行,才可能被隐藏。有效重叠还要求两者没有严重争抢相同资源,否则时间并不会简单变成两者的最大值。性能分析应该关心关键路径上剩下多少无法隐藏的通信,而不是只看累计通信时间。
17. TTFT、TPOT、吞吐量,约束的是不同事情
TTFT 关心多久看到第一个输出,TPOT 关心后续输出之间的间隔,系统吞吐量关心单位时间完成多少 token。增大 batch 可以摊薄权重读取和调度成本,但也可能增加每步耗时或排队等待,因此必须在延迟 SLA 内寻找吞吐最优点。只有单条流、相同统计口径下,输出速率才近似等于 TPOT 的倒数,不能直接拿它替代系统总吞吐。
18. 仿真要同时回答:算多少、搬多少、等多久
相同 FLOPs 不代表相同耗时:专家副本数、每专家批量和矩阵形状变化,都可能改变权重读取与计算效率。只用 FLOPs 除以固定算力,会漏掉访存瓶颈;只看省下的字节,又会漏掉通信、同步和负载不均。一个有用的仿真,应该能在固定硬件与总工作量的对照下,解释计算、访存和关键路径分别发生了什么变化。
最后留下三个问题
遇到任何新技术,先问:
- 它减少了需要保存的信息,还是减少了这一次需要读取的信息?
- 它让同样的工作做得更快,还是直接减少了必须执行的工作?
- 省下的成本,是否又变成了通信、重算、精度损失或调度复杂度?
把这三笔账算清楚,技术名字就不再那么重要了。
参考资料
- Hyper-Connections
- GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
- DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
- Gated Delta Networks: Improving Mamba2 with Delta Rule
- DeepSeek-V4.1-Flash 技术报告:CED 与 SWA Bounded Replay
- DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models
- DeepInfer 推理部署 Q&A
修改历史1 次提交
- docs: publish 18 first-principles anchors for LLM systemsweigao chen··
bc1b856