开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:在KV Cache的Epilog阶段,对KV Cache进行原地压缩更新。将[object Object]激活值量化压缩后,按[object Object]散写到cache,值为 -1的token跳过不处理。[object Object]尾轴[object Object]的后64列为rope段、前[object Object]列为nope段。支持三种量化模式:group(bf16 scale)、group(e8m0 scale)、rope hifloat8静态 + nope FLOAT4_E2M1动态。

  • 计算公式:

    [object Object]的最后一维(d轴)按组计算每组的amax,并量化为目标dtype,记第g组为xgx_g

    • 场景1(quantMode=0):group(64)量化为FP8,[object Object]存储为[object Object];rope段保留[object Object]

      scaleg=max(xg)FP8_MAX,qi=round(xiscaleg)scale_g = \frac{\max(|x_g|)}{FP8\_MAX}, \quad q_i = \mathrm{round}\left(\frac{x_i}{scale_g}\right)
    • 场景2(quantMode=1):同场景1,但[object Object]存储为[object Object][object Object][object Object]向上取到2的幂。

    • 场景3(quantMode=2):rope段(后64列)做hifloat8静态量化,nope段(前d-64列)做per-group FLOAT4_E2M1 动态量化([object Object]),[object Object][object Object]写出,[object Object]不生效:

      ropei=hifloat8(xixScale),scaleg=max(xg)FP4_MAX,nopei=FLOAT4_E2M1(xiscaleg)rope_i = \mathrm{hifloat8}(x_i \cdot xScale), \qquad scale_g = \frac{\max(|x_g|)}{FP4\_MAX}, \quad nope_i = \mathrm{FLOAT4\_E2M1}\left(\frac{x_i}{scale_g}\right)
  • 示例:

    [object Object]
[object Object]

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

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

    [object Object]
  • 返回值

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

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

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

    [object Object]
  • 返回值

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

[object Object]
  • 确定性计算:aclnnKvCompressEpilog默认确定性实现。
  • cache仅支持四维shape [object Object](num_slots = blockNum × blockSize),倒数第二维固定为1,不支持其他维数;仅在blockNum维支持非连续。
  • headDim约束:cache末维headDim须 ≥ 每行写出字节数kvCacheCol = 对齐(concatCol)。concatCol:quantMode=0/1为(d-64)+128+⌈(d-64)/64⌉×scaleBytes(mode0=2、mode1=1);quantMode=2为64+(d-64)/2+((d-64)/quantGroupSize)×2。对齐:quantMode=1不补齐,quantMode=0/2按32B对齐。示例:d=256、quantMode=1 → kvCacheCol=323 → headDim ≥ 323。
  • slotMapping的维度应等于x的维度减1,即slotMapping为x除最后一维外的所有维度展平。
  • x的最后一维(d轴)需满足d % 64 == 0且64 < d ≤ 8192,按每64个元素一组进行逐组量化。
  • quantMode=2时,quantGroupSize仅支持16/32/64,且nope段长度(d-64)需能被quantGroupSize整除;x需为bfloat16。
  • slotMapping中值为 -1的token会被跳过不处理;其余有效元素取值范围为[0, num_slots - 1],且元素值应保证不重复,重复时不保证结果正确性。
[object Object]

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

[object Object]