理解 KV Cache:Attention、P/D 分离与 vLLM 的页式显存管理

理解 KV Cache:Attention、P/D 分离与 vLLM 的页式显存管理

💡 原文中文,约7400字,阅读约需18分钟。
📝

内容提要

本文探讨了大语言模型中KV Cache的产生与管理及其在推理过程中的重要性。KV Cache通过缓存历史K/V向量,优化生成过程并减少计算复杂度。Prefill阶段处理所有输入,而Decode阶段逐步生成输出,二者需分离以提升性能。vLLM采用页式内存管理,解决内存碎片问题,提升存储效率,确保高效的推理系统。

🎯

关键要点

  • KV Cache通过缓存历史K/V向量,优化生成过程并减少计算复杂度。

  • Prefill阶段处理所有输入,而Decode阶段逐步生成输出,二者需分离以提升性能。

  • vLLM采用页式内存管理,解决内存碎片问题,提升存储效率。

  • KV Cache的管理是推理系统工程的核心问题,尤其在请求数量增多时。

  • Prefill阶段的核心运算是矩阵-矩阵乘法,而Decode阶段则是矩阵-向量乘法。

  • Prefill和Decode的硬件需求截然相反,分离这两个阶段可以优化资源利用。

  • vLLM的PagedAttention设计借鉴了操作系统的虚拟内存管理,消除外部碎片。

  • KV Cache的设计决策反映了对硬件极限的精确回应,影响存储系统的容量和带宽。

延伸问答

KV Cache 在大语言模型中的作用是什么?

KV Cache 通过缓存历史 K/V 向量,优化生成过程并减少计算复杂度。

Prefill 和 Decode 阶段有什么不同?

Prefill 阶段处理所有输入并进行矩阵-矩阵乘法,而 Decode 阶段逐步生成输出,进行矩阵-向量乘法。

vLLM 是如何管理 KV Cache 的?

vLLM 采用页式内存管理,借鉴操作系统的虚拟内存管理,消除内存碎片,提高存储效率。

KV Cache 的设计决策对硬件有什么影响?

KV Cache 的设计反映了对硬件极限的精确回应,影响存储系统的容量和带宽。

为什么需要将 Prefill 和 Decode 阶段分离?

分离可以优化资源利用,避免 Prefill 的大批量计算抢占 Decode 的带宽和调度资源。

KV Cache 的大小如何计算?

KV Cache 大小计算公式为 2 × L × H_{kv} × d_k × S × sizeof(dtype),以 Llama-3 为例,约为 1.25 GiB。

➡️

继续阅读