PagedAttention技术是vLLM框架中用于高效管理注意力(Attention)中缓存张量的关键技术。以下是PagedAttention技术的主要特点和实现原理:
-
内存管理:PagedAttention通过将每个序列的K(Key)和V(Value)缓存进行分块处理,每个块包含固定长度的token,从而高效地管理内存。这种方法类似于操作系统中的虚拟内存和分页机制,允许在非连续的内存空间存储连续的KV张量。
-
性能瓶颈解决:在大模型推理中,性能瓶颈主要来自于内存。PagedAttention通过减少内存浪费,提高了性能。在LLaMA-13B模型中,单个序列输入需要占用1.7GB内存,而PagedAttention通过动态管理内存,减少了60%-80%的内存浪费。
-
分块处理:PagedAttention将KV缓存分片,每个块视为一个“页”,token视为“字节”,序列视为“进程”。通过块表(block table)将连续的逻辑块映射到非连续的物理块,物理块可以根据新生成的token按需分配。
-
并行采样和共享:在并行采样时,同一个prompt可以生成多个输出序列,这些序列在生成时可以共享prompt的attention计算和显存。PagedAttention通过引用计数和“写时复制”(Copy-on-Write)机制,确保共享安全,从而减少显存占用并提升吞吐量。
-
内存共享和优化:PagedAttention通过内存共享减少了55%的显存占用,并提升了2.2倍的吞吐量。这种优化类似于操作系统中进程共享物理页的方式,不同序列可以通过映射到同一物理块来共享块。
-
内核优化:vLLM利用自己的多头查询注意力内核(
csrc/attention/attention_kernels.cu
),该内核设计为与vLLM的分页KV缓存兼容,依赖于特别设计的记忆体布局和访问方法,以实现高性能。 -
灵活性和易用性:vLLM框架与HuggingFace模型无缝集成,支持并行采样、beam search等解码算法的高吞吐量服务,支持分布式推理的张量并行,支持流式输出,并兼容OpenAI的接口服务。
PagedAttention技术通过这些机制,显著提高了大模型推理的吞吐量,并减少了内存占用,是vLLM框架实现高性能推理的核心部分。