Day 5 · 显存花在哪、decode 为什么最快只有 150 token/s:算术强度与 roofline
把 7B 模型推理时的显存拆成四项算清楚,再用一次除法算出 decode 的物理上限。最后引出整条路线最重要的一个数:ridge point ≈ 153。附五张卡的 ridge point 对照、量化和 KV cache 读取怎么改这张图。
把 7B 模型推理时的显存拆成四项算清楚,再用一次除法算出 decode 的物理上限。最后引出整条路线最重要的一个数:ridge point ≈ 153。附五张卡的 ridge point 对照、量化和 KV cache 读取怎么改这张图。
把 Day 2 数出来的参数量变成两个能算的数:模型跑一遍要做多少次运算,以及 decode 时为了不重算而缓存下来的 k、v 占多少显存。算完会发现 batch 一大,缓存比权重本身还大。附六个模型的 KV cache 对照表和一段从 config.json 自动算账的代码。
把注意力机制拆到能手算的粒度:三个向量各干什么、权重怎么来的、加起来的到底是什么。用一个 3 token、head_dim 2 的例子把整张注意力矩阵算完,再接一段能跑的 numpy。顺带搞清模型为什么只能一个 token 一个 token 地生成,以及这件事怎么直接引出 prefill、decode 和 KV cache。
One FLOP per byte. That single ratio explains why a batch-size-1 decode step uses under one percent of an A100, and why most "make it faster" instincts are aimed at the wrong resource.