- [object Object]Ascend 950PR/Ascend 950DT[object Object]:支持
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:不支持
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持
- [object Object]Atlas 200I/500 A2 推理产品[object Object]:不支持
- [object Object]Atlas 推理系列产品[object Object]:不支持
- [object Object]Atlas 训练系列产品[object Object]:不支持
接口功能:
在Indexer注意力机制的Epilog阶段对KV Cache进行原地动态量化压缩更新,封装aclnnIndexerQuantCache。将float16/bfloat16激活值x按量化粒度(mxfp8/mxfp4 模式每32个元素一组,fp8/hifloat8 模式整行一组)动态量化为FP8(E4M3/E5M2)或MX-FP4,并按slot_mapping将量化结果与对应scale散写到cache/cache_scale,slot_mapping中值为-1的token跳过不处理。支持 mxfp8、fp8、hifloat8、mxfp4 四种量化模式(各模式含义见参数说明 quant_mode)。
语义说明:
底层aclnn接口对cacheRef、cacheScaleRef为原地实现;本Python接口同为原地语义:直接在输入cache、cache_scale上更新,未被slot_mapping命中的行保留原值。schema中cache、cache_scale分别标注为
[object Object]、[object Object],本接口无返回值,调用后直接使用入参cache、cache_scale。
[object Object]
该接口无返回值。计算结果直接原地写回输入张量[object Object]与[object Object],二者在计算后shape和dtype保持不变;未被[object Object]命中的行保留原值。
- 该接口支持推理场景下使用。
- 该接口支持单算子模式调用。
- 仅支持[object Object]Ascend 950PR/Ascend 950DT[object Object]。
- cache与cache_scale的数据类型组合需与quant_mode匹配:fp8/hifloat8 模式cache_scale为FLOAT;mxfp8/mxfp4 模式cache_scale为FLOAT8_E8M0;mxfp4 模式cache为FP4(uint8打包)。
- cache 与 cache_scale(所有量化模式,含HiFloat8)均仅支持四维shape
[object Object],倒数第二维固定为1(每token一个量化向量);num_slots = blockNum × blockSize。 - cache/cache_scale仅在blockNum维支持非连续:各block可不紧密排布,但block内须连续。
- headDim长度约束:
- cache.headDim ≥ d(MX-FP4以fp4元素计,d个fp4值占⌈d/2⌉字节);
- cache_scale.headDim ≥ scaleCol,scaleCol = mxfp8/mxfp4:⌈d/32⌉;fp8/hifloat8:1;
- 示例:d=128、quant_mode=0 → scaleCol=4 → cache.headDim ≥ 128 且 cache_scale.headDim ≥ 4。
- slot_mapping的维度应等于x的维度减1,即slot_mapping为x除最后一维外的所有维度展平。
- slot_mapping中值为-1的token会被跳过不处理;其余有效元素取值范围为[0, num_slots - 1],且元素值应保证不重复,重复时不保证结果正确性。
- 支持图模式(torchair)调用:经graph_convert注册的GE converter下沉为IndexerQuantCache算子,eager与图模式结果一致。
默认支持确定性计算。
单算子模式调用
[object Object]图模式(torchair)调用
复用上面单算子示例构造的 cache/cache_scale/x/slot_mapping,用torchair后端编译后调用即可:
[object Object]