Skip to content

Efficient Memory Management for Large Language Model Serving with PagedAttention #298

Description

@gaocegege

这两年最喜欢的一个工作,非常有系统味道。在 Transformer 的 QKV 的优化上,KVCache 是一个常见且非常有效的手段。KVCache 为什么是行之有效的优化手段,可以看这篇文章,不过需要先读过 Attention is all you need 后才能看的明白。

KVCache 的本质是拿空间换时间,于是显存就成了一个限制。PagedAttention 的核心观察是在这个过程里 GPU 显存的使用模式很像是 CPU 的内存,有非常多的碎片。在操作系统里为了避免这个问题,虚拟内存被引入。进程不再需要内存是连续的,那么显存也可以通过类似的做法来减少这一问题,进而提高显存的“利用率”

image

Paged Attention 将每个生成序列的 KV Cache 划分为多个块(block),每个块包含固定数量的 key 和 value 向量。这些块在物理存储上不需要是连续的。当进行 attention 计算时,可以通过块表(block table)查找对应序列的块,从而提取所需的 key 和 value 向量。跟内存中的 virtual memory 与 physical memory 异曲同工之妙。block table 就像页表,KV block manager 起到了管理 block table 的作用。

要不怎么都想做 LLM Sys,确实有做出这样的工作的机会。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions