大模型多轮对话与 Prefix Cache:从请求生命周期到缓存命中
上一篇文章已经说明了 Prefill、Decode 和 KV Cache 在一次自回归生成中的作用。继续讨论多轮对话时,会出现几个新的问题:回答结束后 KV Cache 去了哪里?第二轮为什么还要提交历史消息?Prefix Cache 命中究竟复用了什么?关闭对话一天以后,模型又如何记得昨天的内容?
上一篇文章已经说明了 Prefill、Decode 和 KV Cache 在一次自回归生成中的作用。继续讨论多轮对话时,会出现几个新的问题:回答结束后 KV Cache 去了哪里?第二轮为什么还要提交历史消息?Prefix Cache 命中究竟复用了什么?关闭对话一天以后,模型又如何记得昨天的内容?
在同一张 GPU 上,应该部署 32B BF16,还是 70B INT4?为什么量化后显存变小,有时速度也变快,但输出又可能发生变化?要回答这些问题,需要同时理解参数量、数值精度、量化方法和推理瓶颈。
部署大模型时,“模型文件能放进显卡”只是第一道门槛。真正运行起来后,显存还要容纳 KV Cache、临时激活、Logits、CUDA 工作区和多卡通信缓冲。输入越长、输出越长、并发越高,资源结构也会发生变化。
当我们向大模型输入“北京是中国的”,模型并不是一次把“首都。”两个词一起吐出来。Decoder-only Transformer 做的是下一个 Token 预测:先根据整个输入预测“首都”,再把“首都”作为新的输入预测“。”,最后根据“。”预测 <EOS> 并停止。
Mask2former