写点什么

Ascend 上的 PageAttention

作者:zjun
  • 2024-12-18
    上海
  • 本文字数:1140 字

    阅读完需:约 4 分钟

Ascend上的PageAttention

1 PageAttention 引入的原因

PageAttention 的引入主要是为了解决大型语言模型(LLM)在服务过程中遇到的内存管理低效问题,具体原因如下:


  • 内存碎片化:传统的 KV cache(Key-Value cache)管理方式在处理不同长度的请求时,预分配连续的块内存给每个请求,导致内存碎片化和冗余复制,造成内存浪费。

  • 内存利用率低:在实际使用中,KV cache 的利用率只有 20.4%到 38.2%,说明当前的内存管理机制没有充分利用可用的内存空间。

  • 缺乏灵活的内存共享机制:现有的系统没有实现有效的 KV cache 共享,而这是许多大模型解码算法中所需要的。

2 PageAttention 的方案

为了解决这些问题,PageAttention 借鉴了操作系统中的虚拟内存和分页技术,实现了以下架构和优化:


  • 块级别的内存管理:PageAttention 将请求的 KV cache 放入块中,每个块可以存储固定数量 tokens 的 attention keys 和 values,不需要连续的空间。这减少了内部的碎片化,同时也不需要为所有的请求都预留固定数目的内存大小。

  • 灵活的 KV cache 共享机制:通过虚拟内存的技术,PageAttention 使得 KV cache 的存储更加灵活,提高了利用率,允许跨请求共享,进一步减少内存使用。

  • 高效内存管理:vLLM 大模型服务系统实现了近乎零浪费的 KV cache 内存机制,通过 PageAttention,内存管理变得更加高效,减少了内存浪费。

  • 高吞吐量和低延迟:实验结果显示,vLLM 比流行的大模型有更低的延时,大概是 2~4 倍。此外,越长的句子,越大的模型,越复杂的 decoding 算法,相对提升更明显。


PageAttention 的实现架构包括:


  • Paged KV Cache:将 KV cache 分割成多个页面,每个页面存储一定数量的 tokens,允许非连续存储,减少内存碎片。

  • CUDA 并行计算:在 GPU 上利用 CUDA 的并行计算能力,PageAttention 可以在 GPU 上实现高效的矩阵运算和注意力计算,进一步提升模型的处理速度和性能。

  • V1 和 V2 版本:vLLM 中有两个版本的 PageAttention,使用一个简单的启发式方法来决定是使用 V1 还是 V2 版本。V1 适合长度小于 8192 或者 num_seqs * num_heads>512 的情况。


通过这些架构和优化,PageAttention 显著提高了大型语言模型的服务效率,降低了延迟,提升了整体性能。

3 与标准注意力机制的区别

  • 标准注意力机制通常需要一次性处理整个序列,这在序列很长时可能导致计算效率低下和内存使用过多。

  • Paged Attention 通过将序列分段处理,减轻了这些问题,使得模型能够在更长的序列上工作,同时保持较低的计算成本。


Paged Attention 是一种较为高级的技术,它的实现通常需要在具体的应用框架中找到相关的 API 支持,或者自己编写代码来实现这种机制。在华为昇腾 AI 处理器的 API 文档中提到的 PagedAttentionOperation 就是这样一种操作,它提供了分页注意力机制的具体实现方式。

4 Ascend 上的实现

ascend 上的 PagedAttention 实现为,它是可通过 atb 算子实现。参考如下:ATB中的PagedAttention算子

用户头像

zjun

关注

还未添加个人签名 2020-03-06 加入

还未添加个人简介

评论

发布
暂无评论
Ascend上的PageAttention_大模型_zjun_InfoQ写作社区