标签:推理加速
-
KV Cache 原理与复杂度推导:一次"以空间换时间"的完整算账
逐 token 解码时重复计算历史 K/V 是主要浪费;推导有无 cache 的计算量差异,并算出 KV cache 的显存占用公式。
-
MLA 多头潜在注意力拆解:DeepSeek 压缩 KV cache 的做法
GQA 共享 K/V 头还留着"每头一份缓存"的底账,MLA 干脆把每层的 K/V 压成一个 d_c=512 维的潜向量,推理时缓存只存它。这篇拆解 DeepSeek-V2/V3 的投影设计、低秩吸收的等效改写,以及为什么要给 RoPE 单独留一条位置通道。
-
GQA 与 MQA:共享 KV 的性价比
自回归解码的显存大头是 KV cache,而 Q 头数远多于内容需要。MQA 让一个 KV 头服务所有 Q 头,GQA 取中间值——这篇推导 cache 字节的账本,解释为什么 decode 阶段 KV 头数几乎只影响吞吐不影响质量,以及 Llama-2-70B 为什么选 8 个 KV 头。
-
attention sink 现象:softmax 逼出来的"垃圾桶"token
把 softmax 的权重可视化,大量质量永远堆在序列最前面的几个 token 上——即使它们语义上毫无用处。这不是模型的 bug,而是 softmax"权重必须和为 1"的结构性产物。这篇从归一化约束推出 sink 的必然性,讲 StreamingLLM 怎么利用它,以及 ViT 里的对应现象。
-
注意力复杂度 O(n²d) 的账本:计算与显存各自卡在哪里
注意力的 n² 到底花在哪些矩阵乘上、显存的 n² 又花在哪里、什么时候注意力会超过 FFN 成为主导开销。这篇把 FLOPs、显存、带宽三笔账分开算清。
-
FlashAttention-2/3 的改进点:把 IO 收益榨干
FA-1 证明了少搬数据就能赢,FA-2 把循环次序和非矩阵乘开销一起砍掉,FA-3 则吃满 H100 的 TMA 与异步流水线。这篇按"还有多少油水"的顺序拆解三代各自改了什么、为什么。
-
FlashAttention 原理:分块与在线 softmax
注意力的瓶颈不是 FLOPs 而是 HBM 访存。这篇从 IO 复杂度推出 FlashAttention 的分块设计,推导在线 softmax 的重缩放公式,并说明反向传播为什么要重算而不是存中间矩阵。