接口功能:Compressor是推理场景下SMLA和QLI的前处理算子,用于将每4或128个token的KV cache压缩成一个,然后每个token与这些压缩的KV cache进行DSA计算。在长序列的情况下,Compressor可以有效地减少计算开销。主要计算过程为:
- 将输入与做Matmul运算得到,将输入与做Matmul运算后再与做Add运算得到,与根据输入的start_pos及cu_seqlens完成更新。
- 在coff为2的情况下对和进行数据重排。
- 对进行softmax运算将softmax结果与做Mul计算,后进行ReduceSum运算。
计算公式:
- 计算矩阵乘法:
- 计算分组加法:
- 计算分组Softmax:
- 计算Hadamard乘积:
- 沿着压缩轴分组求和:
每个算子分为,必须先调用“aclnnCompressorGetWorkspaceSize”接口获取入参并根据流程计算所需workspace大小,再调用“aclnnCompressor”接口执行计算。
[object Object]
[object Object]
参数说明
[object Object]undefined
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]: cacheMode不支持输入2,且不支持0轴非连续。
返回值
第一段接口完成入参校验,出现以下场景时报错:
[object Object]
- 确定性计算:
- aclnnCompressor默认确定性实现。
- x参数维度含义:B(Batch Size)表示输入样本批量大小、S(Sequence Length)表示输入样本序列长度、H(Head Size)表示hidden层的大小、D(Head Dim)表示hidden层的最小单元大小、T表示所有Batch输入样本序列长度的累加和。
- 输入shape限制:
- wkv支持输入shape[coff* D,H]
- wgate支持输入shape[coff* D,H]
- stateCache支持输入shape[block_num,block_size,2coff D],要求blockNum>0,cacheMode=2时,需要满足blockSize >= coff * cmp_ratio + S - 1。
- ape支持输入shape[cmp_ratio,coff* D]
- startPos支持输入shape[B,]
- 若x的维度采用BS合轴,即x的输入shape为[T,H]
- cuSeqlens输入shape必须为[B+1,]。该参数中每个元素的值表示当前batch与之前所有batch的token数总和,即前缀和,因此后一个元素的值必须大于等于前一个元素的值,且第一位必须位0。
- seqused,支持输入shape[B,],要求每个Batch的有效token数要求小于等于对应Sequence Length长度,即seqused[n] <= cu_seqlens[n+1] - cu_seqlens[n],且不小于0。
- cacheMode=1时,state_block_table支持输入shape[B,ceil(Smax/block_size)]。Smax为每个Batch中最大的Sequence Length,即Smax=max(start_pos)+max(cu_seqlens[n+1] - cu_seqlens[n])。cacheMode=2时,state_block_table支持输入shape[B]。
- cmpKv,输出shape为[min(T,T//cmp_ratio+B),D]:compressed_tokens + compressed_tokens + ... + compressed_tokens + pad。
- 若x的维度不采用BS合轴,即x的输入shape为[B,S,H]
- cuSeqlens,参数必须为空。
- seqused,支持输入shape[B,],要求每个Batch的有效token数要求小于等于对应Sequence Length长度,即要求seqused[n] <= S,且不小于0。
- cacheMode=1时,stateBlockTable支持输入shape[B,ceil(Smax/block_size)]。Smax为每个Batch中最大的Sequence Length,即Smax=max(start_pos)+S。cacheMode=2时,stateBlockTable支持输入shape[B]。
- cmpKv,输出shape为[B,ceil(S/cmp_ratio),D]:(compressed_tokens+pad0) + (compressed_tokens+pad1) + ... + (compressed_tokens+padN)。
- 输入值域限制:
- 该接口支持B、S泛化,且存在如下场景限制:
- 只支持B、S为0
- 部分长序列场景下,如果计算量过大可能会导致出现超过NPU内存的报错,注:这里计算量会受x输入shape的影响,值越大计算量越大。典型的长序列(即B、S的乘积或T较大)场景包括但不限于:
- 该接口支持B、S泛化,且存在如下场景限制:
- 该接口支持B、S、T取0,即shape与B、S、T值相关的入参允许传入空tensor,其余入参不支持传入空tensor。该场景下stateCache不做更新,输出cmpKv为空tensor。
- 输入属性限制:
- 支持D为128/512。
- 支持H为1K~10K,512对齐。
- 支持blockSize为1~1024。
- 支持cmpRatio为2/4/8/16/32/64/128。支持如下三种典型组合场景:
- C4A: D=512, coff=2, cmp_ratio=4;
- C4Li: D=128, coff=2, cmp_ratio=4;
- C128A: D=512, coff=1, cmp_ratio=128。
无