@akshay_pachaar: 你在Anthropic参加机器学习工程师面试。面试官问:"我们的模型在42秒内生成100个token。H…

X AI KOLs Timeline 新闻

摘要

解释了KV缓存如何通过消除注意力键和值的冗余重计算来加速LLM推理,在速度与内存之间进行权衡,并介绍了生产级缓存管理挑战。

你在Anthropic参加机器学习工程师面试。 面试官问: "我们的模型在42秒内生成100个token。你如何让它快5倍?" 你:"我会优化模型架构并使用更好的GPU。" 面试结束。 以下是你遗漏的: 真正的瓶颈不是计算,而是冗余计算。 没有KV缓存,你的模型在每次生成token时都会重新计算相同的注意力键和值。 这就是为什么9秒的推理变成了42秒。你将80%的时间浪费在重复计算上。 根本问题: (阅读时参考下图) LLM token生成是自回归的: - 从提示生成token 1 - 从提示 + token 1生成token 2 - 从提示 + token 1 + token 2生成token 3 在每一步,你都在通过注意力重新处理所有之前的token。 token 50?你已经为token 1计算了50次注意力。 注意力机制的实际情况: 对于每个token,transformer计算: - 查询(Q)来自当前token - 键(K)来自所有之前token - 值(V)来自所有之前token 然后:Attention(Q, K, V) = softmax(QK^T)V 问题:之前token的K和V从不改变。你每一步都在重新计算相同的矩阵。 KV缓存如何解决这个问题: 不再重新计算K和V矩阵: - 在第一次计算后缓存它们 - 对后续token重用缓存的值 - 只为新token计算K和V 没有KV缓存(token 50): - 为所有50个token计算Q, K, V → O(n²) 有KV缓存(token 50): - 加载token 1-49的缓存K, V - 只为token 50计算Q, K, V → O(n) 你消除了二次冗余。 那么代价是什么: 虽然KV缓存使推理更快,但它也占用大量内存,因此速度与内存之间总是存在权衡。 为什么第一个token总是耗时更长: KV缓存通过先生成提示的KV缓存来加速推理。 这正是ChatGPT生成第一个token比其余token耗时更长的原因。 第一个token:计算整个提示的KV缓存 其余token:只需加载缓存的KV + 计算新token ---- 以上都是KV缓存在单个请求内部的工作原理。 在生产环境中运行是另一个问题。缓存会在文档重排序时失效,单个GPU每天会丢弃大约15 TB的可重用缓存。 我写了一篇文章,正好从这篇文章结束的地方开始:一种新的开源架构如何管理生产规模的KV缓存,其首个token生成时间快了14倍。 文章引用如下。
查看原文
查看缓存全文

缓存时间: 2026/07/07 19:36

你在Anthropic参加机器学习工程师面试。

面试官问:

“我们的模型生成100个token需要42秒。如何让它快5倍?”

你:“我会优化模型架构,用更好的GPU。”

面试结束。

以下是你遗漏的关键:

真正的瓶颈不是计算,而是重复计算。

没有KV缓存,你的模型在每次生成token时都会重新计算相同的注意力键和值。

这就是为什么9秒的推理变成了42秒。你浪费了80%的时间在重复计算上。

根本问题:

(阅读时参考下图)

LLM token生成是自回归的:

  • 从提示词生成token 1
  • 从提示词 + token 1 生成token 2
  • 从提示词 + token 1 + token 2 生成token 3

每一步,你都在重新处理所有之前的token,通过注意力机制。

生成第50个token时,你为token 1计算了50次注意力。

注意力的现实情况:

对于每个token,Transformer计算:

  • 当前token的查询(Q)
  • 所有先前token的键(K)
  • 所有先前token的值(V)

然后:Attention(Q, K, V) = softmax(QK^T)V

问题:先前token的K和V永远不会改变。你每一步都在重新计算相同的矩阵。

KV缓存如何解决:

不再重新计算K和V矩阵:

  • 第一次计算后缓存它们
  • 后续token重用缓存的值
  • 只计算新token的K和V

没有KV缓存(第50个token):

  • 为所有50个token计算Q、K、V → O(n²)

有KV缓存(第50个token):

  • 加载token 1-49的缓存K、V
  • 只为token 50计算Q、K、V → O(n)

你消除了二次冗余。

那么代价是什么:

KV缓存虽然使推理更快,但也会占用大量内存,所以速度和内存之间总是需要权衡。

为什么第一个token总是更慢:

KV缓存通过在生成token之前计算提示词的KV缓存来加速推理。

这正是ChatGPT生成第一个token比其余token慢的原因。

第一个token:为整个提示词计算KV缓存

剩余token:只加载缓存的KV + 计算新token


以上是KV缓存在单个请求内部的工作方式。

在生产环境中运行是另一个问题。文档重新排序时缓存会失效,单个GPU每天大约丢弃15TB可重用缓存。

我写了一篇文章,正是接着这篇文章结束的地方开始:一种新的开源架构如何在生产规模下管理KV缓存,实现14倍更快的首个token生成时间。

文章内容引用如下。

相似文章