aclnnScatterPaCache

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品 ×
Atlas A2 训练系列产品/Atlas A2 推理系列产品 ×
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:更新KCache中指定位置的key。

  • 计算公式:

    • 场景一:

      key:[batch * seq_len, num_head, k_head_size]
      keyCache:[num_blocks, block_size, num_head, k_head_size]
      slotMapping:[batch * seq_len]
      cacheMode:"Norm"
      

      keyCache=slotMapping(key)keyCache = slotMapping(key)

    • 场景二:

      key:[batch, seq_len, num_head, k_head_size]
      keyCache:[num_blocks, block_size, 1, k_head_size]
      slotMapping:[batch, num_head]
      compressLensOptional:[batch, num_head]
      compressSeqOffsetOptional:[batch * num_head]
      seqLensOptional:[batch]
      cacheMode:"Norm"
      

      keyCache= slotMapping(key[:compressSeqOffset],ReduceMean(key[compressSeqOffset:compressSeqOffset+compressLens]),key[compressSeqOffset+compressLens:seqLens])\begin{aligned} keyCache =\ & slotMapping(key[: compressSeqOffset], \\ & ReduceMean(key[compressSeqOffset : compressSeqOffset + compressLens]), \\ & key[compressSeqOffset + compressLens : seqLens]) \end{aligned}

    • 场景三:

      key:[batch, seq_len, num_head, k_head_size]
      keyCache:[num_blocks, block_size, 1, k_head_size]
      slotMapping:[batch, num_head]
      compressLensOptional:[batch * num_head]
      seqLensOptional:[batch]
      cacheMode:"Norm"
      

      keyCache=slotMapping(key[seqLens−compressLens:seqLens])keyCache = slotMapping(key[seqLens - compressLens : seqLens])

    上述场景根据构造的参数来区别,符合第一种入参构造走场景一,符合第二种构造走场景二,符合第三种构造走场景三。场景一没有compressLensOptional、seqLensOptional、compressSeqOffsetOptional这三个可选参数,场景三没有compressSeqOffsetOptional可选参数。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
key 输入 待更新的key值,公式中的key。 FLOAT16、FLOAT、BFLOAT16、INT8、UINT8、INT16、UINT16、INT32、UINT32、HIFLOAT8、FLOAT8_E5M2、FLOAT8_E4M3FN、FLOAT4_E2M1、FLOAT4_E1M2 ND
keyCacheRef 输入/输出 需要更新的keyCache,公式中的keyCache。 与key一致。 ND
slotMapping 输入 key的每个token在cache中的存储偏移,公式中的slotMapping。 INT32、INT64 ND
compressLensOptional 可选输入 压缩量,公式中的compressLens。 与slotMapping一致。 ND
compressSeqOffsetOptional 可选输入 每个batch中每个head的压缩起点,公式中的compressSeqOffset。 与slotMapping一致。 ND
seqLensOptional 可选输入 每个batch的实际seqLens,公式中的seqLens。 与slotMapping一致。 ND
cacheMode 输入 keyCacheRef的内存排布格式。 STRING -

约束说明

  • 参数说明中shape使用的变量说明如下:
    • batch:当前输入的序列数量(一次处理的样本数),取值为正整数。
    • seq_len:序列的长度,取值为正整数。
    • num_head:多头注意力中“头”的数量,取值为正整数。
    • k_head_size:每个注意力头中key的特征维度(单头key的长度),取值为正整数。
    • num_blocks:keyCache中预分配的块总数,用于存储所有序列的key数据,取值为正整数。
    • block_size:每个缓存块包含的token数量,取值为正整数。
  • 输入值域限制:seqLensOptional和compressLensOptional里面的每个元素值必须满足公式:reduceSum(seqLensOptional[i] - compressLensOptional[i] + 1) <= num_blocks * block_size(对应场景二、三)。
  • 输入数据类型限制:HIFLOAT8、FLOAT8_E5M2、FLOAT8_E4M3FN、FLOAT4_E2M1、FLOAT4_E1M2仅支持key是3维的场景(对应场景一)。

调用说明

调用方式 样例代码 说明
aclnn test_aclnn_ScatterPaCache 通过aclnnScatterPaCache调用ScatterPaCache算子