昇腾社区首页
中文
注册
开发者
下载

aclnnDequantRopeQuantKvcache

产品支持情况

[object Object]undefined

功能说明

  • 算子功能:对输入张量(x)进行dequant(可选)后,按[object Object](为切分的长度)对尾轴进行切分,划分为q、k、vOut,对q、k进行旋转位置编码,生成qOut和kOut,之后对kOut和vOut进行量化并按照[object Object]更新到kCacheRef和vCacheRef上。

  • 计算公式:

    dequantX=Dequant(x,weightScaleOptional,activationScaleOptional,biasOptional)dequantX = Dequant(x,weightScaleOptional,activationScaleOptional,biasOptional) q,k,vOut=SplitTensor(dequantX,dim=1,sizeSplits)q,k,vOut = SplitTensor(dequantX,dim=-1,`sizeSplits`) qOut,kOut=ApplyRotaryPosEmb(q,k,cos,sin)qOut,kOut = ApplyRotaryPosEmb(q,k,cos,sin) quantK=Quant(kOut,scaleK,offsetKOptional)quantK = Quant(kOut,scaleK,offsetKOptional) quantV=Quant(vOut,scaleV,offsetVOptional)quantV = Quant(vOut,scaleV,offsetVOptional)

    如果cacheModeOptional为contiguous则:

    kCacheRef[i][indice[i]]=quantK[i]kCacheRef[i][indice[i]]=quantK[i] vCacheRef[i][indice[i]]=quantV[i]vCacheRef[i][indice[i]]=quantV[i]

    如果cacheModeOptional为page则:

    kCacheRefView=kCacheRef.view(1,kCacheRef[2],kCacheRef[1])kCacheRefView=kCacheRef.view(-1,kCacheRef[-2],kCacheRef[-1]) vCacheRefView=vCacheRef.view(1,vCacheRef[2],vCacheRef[1])vCacheRefView=vCacheRef.view(-1,vCacheRef[-2],vCacheRef[-1]) kCacheRefView[indices[i]]=quantK[i]kCacheRefView[indices[i]]=quantK[i] vCacheRefView[indices[i]]=quantV[i]vCacheRefView[indices[i]]=quantV[i]

函数原型

每个算子分为,必须先调用“aclnnDequantRopeQuantKvcacheGetWorkspaceSize”接口获取入参并根据流程计算所需workspace大小,再调用“aclnnDequantRopeQuantKvcache”接口执行计算。

[object Object]
[object Object]

aclnnDequantRopeQuantKvcacheGetWorkspaceSize

  • 参数说明:

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]

aclnnDequantRopeQuantKvcache

  • 参数说明

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

约束说明

  1. 确定性计算:

    • aclnnDequantRopeQuantKvcache默认确定性实现。
  2. cacheModeOptional为contiguous时:kCacheRef的第0维大于x的第0维,indices数据值大于等于0且小于等于vCacheRef的第1维([b,s,n,d]格式中的s)减x的第1维。

  3. cacheModeOptional为page时:indices 数据值大于等于0,小于kCacheRef的第0维*第1维且不重复。

  4. 输入x不为INT32时,x、cos、sin与输出qOut、kOut、vOut的数据类型保持一致,此时activationScaleOptional,weightScaleOptional、biasOptional不生效。

  5. 输入x为INT32时,cos、sin与输出qOut、kOut、vOut的数据类型保持一致,此时weightScaleOptional必选,activationScaleOptional、biasOptional可选(biasOptional不需要与其他输入类型一致)。

  6. x的尾轴小于等于4096,且按64对齐。

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]