开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:在Indexer注意力机制的Epilog阶段,对KV Cache进行原地压缩更新。将[object Object]/[object Object]的激活值按逐块动态量化(Per-Block Dynamic Quantization)压缩为FP8(E4M3/E5M2)、INT8([object Object])或MX-FP4格式,并按[object Object]将量化结果与对应[object Object]散写到cache,值为 -1的token跳过不处理。支持MX-FP8、Normal、HiFloat8、MX-FP4四种量化模式。

  • 计算公式:

    [object Object]的最后一维(d轴)按量化粒度计算每组的amax,并量化为目标dtype,记第g组为xgx_g(MX-FP8/MX-FP4模式每32个元素一组;Normal/HiFloat8模式整行一组):

    scaleg=max(xg)Q_MAX,qi=round(xiscaleg)scale_g = \frac{\max(|x_g|)}{Q\_MAX}, \quad q_i = \mathrm{round}\left(\frac{x_i}{scale_g}\right)
    • 场景1(quantMode=0,MX-FP8):scale存储为[object Object][object Object]时对scale进行舍入。
    • 场景2(quantMode=1,Normal):动态逐块量化,scale存储为[object Object]
    • 场景3(quantMode=2,HiFloat8):输出为x×xScalex \times xScale后的hifloat8。
    • 场景4(quantMode=3,MX-FP4):按标准MX块(每32元素)量化为FP4([object Object]每字节打包2个fp4值),scale存储为[object Object]
  • 示例:

    [object Object]
[object Object]

每个算子分为,必须先调用“aclnnIndexerQuantCacheGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnIndexerQuantCache”接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]
    • 数据类型组合需匹配量化模式:quantMode=0,cache为FP8且scale为FLOAT8_E8M0;quantMode=1/2时,cache为FP8/UINT8且scale为FLOAT;quantMode=3,cache为FP4且scale为FLOAT8_E8M0。
  • 返回值

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

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

    [object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

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

[object Object]
  • 确定性计算:aclnnIndexerQuantCache默认确定性实现。
  • 数据类型组合需与quantMode匹配:Normal/HiFloat8模式cacheScale为FLOAT;MX-FP8/MX-FP4模式cacheScale为FLOAT8_E8M0;MX-FP4模式cache为FP4(uint8打包)。
  • cache 与 cacheScale均仅支持四维shape [object Object],倒数第二维固定为1(每token一个量化向量),不支持其他维数;num_slots = blockNum × blockSize。
  • cache/cacheScale仅在blockNum维支持非连续(分页):各block可不紧密排布,但block内(blockSize、headDim维)须连续。
  • headDim长度约束
    • cache.headDim ≥ d(MX-FP4模式以fp4元素计,d个fp4值占 ⌈d/2⌉ 字节)。
    • cacheScale.headDim ≥ scaleCol,scaleCol:MX-FP8/MX-FP4(quantMode=0/3)为 ⌈d/32⌉;Normal/HiFloat8(quantMode=1/2)为 1。
    • 示例:d=128、quantMode=0 → scaleCol=4 → cache.headDim ≥ 128 且 cacheScale.headDim ≥ 4。
  • x的最后一维(d轴)须能被32整除且 d ≤ 8192。
  • slotMapping的维度应等于x的维度减1,即slotMapping为x除最后一维外的所有维度展平。
  • slotMapping中值为 -1的token会被跳过不处理;其余有效元素取值范围为[0, num_slots - 1],且元素值应保证不重复,重复时不保证结果正确性。
[object Object]

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

[object Object]