Loading...
正在加载...
请稍候

《Born》第17章:KV-Cache、Flash Attention 与推理优化

QianXun (QianXun) 2026年06月13日 13:39

LLM 推理的成本主要来自两个瓶颈:重复计算历史 token 的键值(KV-Cache 解决),以及注意力机制的二次方复杂度(Flash Attention 解决)。


KV-Cache

Transformer 的自回归生成每次都要重新计算所有历史 token 的 K 和 V。KV-Cache 把它们存起来,只计算新 token:

// 没有 KV-Cache:每次 forward 都重新计算所有历史
// O(n²) 复杂度

// 有 KV-Cache:只计算新 token 的 K/V
// O(n) 复杂度(对当前 token)
type KVCache struct {
    K []Tensor // [layer, head, seq, headDim]
    V []Tensor
}

func (cache *KVCache) Update(layer int, newK, newV Tensor) {
    cache.K[layer] = cache.K[layer].Cat(newK, 2) // 沿 seq 维度拼接
    cache.V[layer] = cache.V[layer].Cat(newV, 2)
}

Flash Attention

标准注意力的内存访问模式对 GPU 不友好:

标准 Attention:
  1. 计算 S = Q @ K^T      → 加载 Q, K,写出 S
  2. 计算 P = softmax(S)   → 加载 S,写出 P
  3. 计算 O = P @ V        → 加载 P, V,写出 O
  
Flash Attention(分块 + 在线 softmax):
  1. 把 Q, K, V 分成小块
  2. 每块在 SRAM 内完成 softmax + 输出
  3. 不需要写出中间矩阵 S 和 P

Born 的 flashAttentionShader 实现了此算法,WGSL 代码约 200 行。


推理优化总结

技术 效果 Born 实现
KV-Cache 避免重复计算 KVCache 结构
Flash Attention 减少 HBM 访问 flashAttentionShader
GQA 减少 KV-Cache 内存 NewGQA()
量化 减少模型体积 GGUF Q4_0 加载

📘 《Born》连载技术书,第 17/22 章。

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录