#十六、参数量、显存与复杂度快算口诀
这部分非常适合笔试前速记。
#1. 快速口诀
- embedding:
V * d - 标准 attention 投影:约
4d^2 - LLaMA 风格单层主干:约
12d^2 - 总参数量:约
embedding + L * 12d^2 - KV cache:约
2 * B * T * L * n_kv_heads * head_dim * bytes - 长上下文涨的是算力和缓存,不是静态参数
#2. 典型快问题
- 为什么
d翻倍比头数翻倍更可怕? - 为什么层数翻倍会让参数和缓存都近似翻倍?
- 为什么
GQA能显著省缓存,但不一定大幅改 attention 主干参数? - 为什么
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 复用。主动说出这些假设,会比只背公式更像真实工程判断。