Ascend上的PageAttention
【摘要】 PageAttention的引入主要是为了解决大型语言模型(LLM)在服务过程中遇到的内存管理低效问题
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算子
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)