#十六、参数量、显存与复杂度快算口诀

这部分非常适合笔试前速记。

#1. 快速口诀

  1. embeddingV * d
  2. 标准 attention 投影:约 4d^2
  3. LLaMA 风格单层主干:约 12d^2
  4. 总参数量:约 embedding + L * 12d^2
  5. KV cache:约 2 * B * T * L * n_kv_heads * head_dim * bytes
  6. 长上下文涨的是算力和缓存,不是静态参数

#2. 典型快问题

  1. 为什么 d 翻倍比头数翻倍更可怕?
  2. 为什么层数翻倍会让参数和缓存都近似翻倍?
  3. 为什么 GQA 能显著省缓存,但不一定大幅改 attention 主干参数?
  4. 为什么 MoE 的总参数量大,不代表每个 token 的 FLOPs 同样大?

#就地速答

  • 问:为什么 d 翻倍比头数翻倍更可怕?

    答:因为大多数主干矩阵参数和 FLOPs 都近似按 d^2 增长,而总头数变化若不改总隐藏维,更多只是重分组而不是平方级膨胀。

  • 问:为什么层数翻倍会让参数和缓存都近似翻倍?

    答:因为每多一层,都会多一套主干参数和一层历史 KV 缓存,所以静态权重和推理缓存基本都线性叠加。

  • 问:为什么 GQA 能显著省缓存,但不一定大幅改 attention 主干参数?

    答:因为它主要减少的是 K/V 头数和缓存存储,而 Q/输出投影等大矩阵仍然保留在主干里,所以省缓存比省参数更明显。

  • 问:为什么 MoE 的总参数量大,不代表每个 token 的 FLOPs 同样大?

    答:因为每个 token 并不会经过所有专家,而是只激活少数几个专家,所以一次前向的有效计算量远小于“全部参数全开”的情况。

#核心术语和边界

参数量指模型静态权重规模,主要影响模型文件大小、加载成本和训练时的优化器状态;FLOPs指一次前向或训练步里的计算量,决定算力开销;KV cache是推理阶段保存历史 token 的 key/value 张量,长上下文和高并发下经常比静态权重更先成为瓶颈。

快算口诀只能用于一阶估算,不能替代精确 profiler。实际工程中还要考虑 tied embedding、bias 是否存在、SwiGLU 中间维度、GQA 的 KV 头数、量化字节数、张量并行切分、padding 和 allocator 碎片。面试时可以先用口诀给数量级,再主动补一句“这是忽略工程开销的估算”。

#复盘清单

  • 看到隐藏维度 d,先判断相关矩阵是线性增长还是平方增长。
  • 看到上下文长度 T,先想到 attention 计算和 KV cache 存储的不同增长方式。
  • 看到 MoE,区分总参数、激活参数和每 token 有效计算量。
  • 回答显存问题时,把权重、激活、梯度、优化器状态和缓存分开说。

如果要把口诀讲成面试答案,建议先给数量级,再说明假设。例如“单层主干大约按 d^2 走”默认隐藏维、MLP 扩张比例和投影结构接近常见 decoder-only 模型;“KV cache 线性随上下文增长”默认每层都要保存 K/V,且没有压缩、驱逐或 prefix 复用。主动说出这些假设,会比只背公式更像真实工程判断。