Benchmarking PIM-attention: A Puncture Experiment on a Real Processing-in-Memory Architecture

大语言模型(LLM)的高吞吐量服务需要一次批处理足够多的请求。然而,现有的推理系统面临着巨大的挑战。一方面,每个请求的键值缓存(KV cache)占用大量的内存,而且会动态增长和收缩,显存容量不足限制了批处理的大小;另一方面,attention算法中大量使用访存密集型的GEMV算子,显存带宽成为了系统瓶颈。为了解决这个问题,我们提出了PIM-attention。PIM提供了更大的内存容量和bank级并行的访存带宽,为加速attention算子提供了机遇。本文介绍了PIM-attention的设计,并且在商用PIM设备上实现了该算法。实验结果表明,PIM可以有效加速attention算子。

代码开源仓库:https://github.com/SJTU-DDST/PIM-attention.git

1 Attention in Transformer

生成式generative模型基于Transformer模型。我们给一个输入文本,模型会输出一个回答(长度为N),其实该过程中执行了N次推理过程。即GPT类模型一次推理只输出一个token,输出的token会与输入tokens 拼接在一起,然后作为下一次推理的输入,这样不断反复直到遇到终止符。在推理下一个token的过程中,Transformer模型使用了attention算法。

1.1 attention

下图(左)展示了输入一个长度为4的文本,生成下一个token的过程。输入的4个token【你】【爱】【我】【吗】,会嵌入到Transformer,生成4个向量 [ a 1 , a 2 , a 3 , a 4 ] [a^{1}, a^{2}, a^{3}, a^{4}] [a1,a2,a3,a4]。4个向量 [ a 1 , a 2 , a 3 , a 4 ] [a^{1}, a^{2}, a^{3}, a^{4}] [a1,a2,a3,a4]再生成4个key向量 [ k 1 , k 2 , k 3 , k 4 ] [k^{1}, k^{2}, k^{3}, k^{4}] [k1,k2,k3,k4]和4个val向量 [ v 1 , v 2 , v 3 , v 4 ] [v^{1}, v^{2}, v^{3}, v^{4}] [v1,v2,v3,v4]。输入中最后一个token会生成一个query向量 q q q

  1. q q q分别与 [ k 1 , k 2 , k 3 , k 4 ] [k^{1}, k^{2}, k^{3}, k^{4}] [k1,k2,k3,k4]进行向量内积操作,生成 [ α 1 , α 2 , α 3 , α 4 ] [\alpha^{1}, \alpha^{2}, \alpha^{3}, \alpha^{4}] [α1,α2,α3,α4]。以 α 1 \alpha^{1} α1为例进行解释, α 1 = q [ 0 ] × k 1 [ 0 ] + q [ 1 ] × k 1 [ 1 ] + ⋯ + q [ n ] × k 1 [ n ] \alpha^{1}=q[0]×k^{1}[0]+q[1]×k^{1}[1]+\cdots + q[n]×k^{1}[n] α1=q[0]×k1[0]+q[1]×k1[1]++q[n]×k1[n] α 1 \alpha^{1} α1表示 a 4 a^{4} a4 a 1 a^{1} a1之间的相关性。
  2. [ α 1 , α 2 , α 3 , α 4 ] [\alpha^{1}, \alpha^{2}, \alpha^{3}, \alpha^{4}] [α1,α2,α3,α4]进行Norm操作。对它们进行normalization,使其转换为均值为0,方差为1的数据。
  3. b = ∑ i α i v i b=\sum_{i}^{} \alpha ^{i} v^{i} b=iαivi。根据输入向量间的相关性,计算出下一个token是【?】。

如下图(右),继续产生下一个token。上次的输出作为了本次推理的输入。其它的步骤就和上次推理完全一致。

在这里插入图片描述

其实不难看出,在推理的过程中,一个token对应一个key向量和一个val向量。聪明的读者肯定发现了,这些key向量和val向量在推理过程中进行了大量的复用。如果本次推理产生了N个token,向量 k 1 k^{1} k1 v 1 v^{1} v1就会被复用N次。如果我们能够把这些key向量和val向量保存下来,就可以大大提升推理效率。

这也就催生出了KV cache这个数据结构。KV cache其实就是用来保存在推理过程中的产生的key向量和val向量。

1.2 Multi-head attention

上述的attention算法仅仅是为了便于读者理解attention机制。在实际应用中的attention算法要更复杂,一般使用的是Multi-head attention。

在Multi-head attention,一个token对应NUM_HEAD个key向量和val向量。如下图,这一个NUM_HEAD=2的示例。输出的向量 b b b由NUM_HEAD部分组成。注意, b 2 b^{2} b2的生成过程仅与一个head对应的key向量 [ k 1 , 2 , k 2 , 2 , k 3 , 2 , k 4 , 2 ] [k^{1,2}, k^{2,2}, k^{3,2}, k^{4,2}] [k1,2,k2,2,k3,2,k4,2]和val向量 [ v 1 , 2 , v 2 , 2 , v 3 , 2 , v 4 , 2 ] [v^{1,2}, v^{2,2}, v^{3,2}, v^{4,2}] [v1,2,v2,2,v3,2,v4,2]相关。其实,上节描述的attention就是NUM_HEAD=1的特例。

在这里插入图片描述

在llama2-7B和mpt-7B模型中,NUM_HEAD=32,向量 k i , j k^{i,j} ki,j v i , j v^{i,j} vi,j的长度为128。

2 Design

PIM系统首要考虑的便是数据划分。对于一个请求,系统需要维护NUM_HEAD×N个key和val向量,其中N为token的数量。如下图,当前的设计是按head进行划分,一个head对应一个PIM进行处理。如果在token维度进行切分,那么,Norm操作就需要Host端完成。

在这里插入图片描述

对于batch请求查询,则分配BATCH_SIZE×NUM_HEAD个DPU进行处理。

3 Evaluation

使用Intel® Xeon® Silver 4126 CPU和商用存算器件UPMEM。因为UPMEM不支持浮点运算,因此,将模型参数量化为了INT32 INT16 INT8类型进行测试。推理的sequence长度设置为了4096。

UPMEM 1024 DPU vs. 1 CPU socket (32 core)

INT32,运行时间如下表:

batch size=2batch size=4batch size=8batch size=16batch size=32
CPU-1 thread3614971122144240292320575002
CPU-2 thread318085052489443167569320905
CPU-4 thread201153530267075129761255217
CPU-8 thread175623479668711135376270380
CPU-16 thread199673818474054143600285429
CPU-32 thread450815734190032162256307577
UPMEM5059550698507335136651326

INT16,运行时间如下表:

batch size=2batch size=4batch size=8batch size=16batch size=32
CPU-1 thread134322607551847104472226658
CPU-4 thread8826172433343465890130330
CPU-8 thread9388182203618470694139735
UPMEM2766627701277852817128656

INT8,运行时间如下表:

batch size=2batch size=4batch size=8batch size=16batch size=32
CPU-1 thread9792171573327967277134062
CPU-4 thread605011352208183432365852
CPU-8 thread50169254174183490868823
UPMEM2875928814288542910429764

结论:

  • MPT-7B模型,针对attention算子【不是端到端】,推理batch size = 32时,

    • 模型参数量化为INT32,最高可以取得4.97倍加速比

    • 模型参数量化为INT16,最高可以取得4.54倍加速比

    • 模型参数量化为INT8,最高可以取得2.21倍加速比

  • UPMEM并不是为AI场景设计的加速器,其算力远远跟不上访存带宽。

    • 我们了解到,在UPMEM中添加更多的ALU,这在技术上完全可行
    • 如果算力可以吃满访存带宽,加速比将会提升至50-100×
  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值