开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:适配decode & prefill场景的FlashAttention算子,既可以支持prefill计算场景(PromptFlashAttention),也可支持decode计算场景(IncreFlashAttention)。

    相比于FusedInferAttentionScoreV4,本接口新增qStartIdxOptional、kvStartIdxOptional、pseType参数。

    说明: decode场景下特有KV Cache:KV Cache是大模型推理性能优化的一个常用技术。采样时,Transformer模型会以给定的prompt/context作为初始输入进行推理(可以并行处理),随后逐一生成额外的token来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为此需要给当前序列中的每个项目(无论是prompt/context还是生成的token)提取键值(KV)向量。这些向量存储在一个矩阵中,通常被称为kv缓存(KV Cache)。

  • 计算公式:

    self-attention(自注意力)利用输入样本自身的关系构建了一种注意力模型。其原理是假设有一个长度为nn的输入样本序列xxxx的每个元素都是一个dd维向量,可以将每个dd维向量看作一个token embedding,将这样一条序列经过3个权重矩阵变换得到3个维度为ndn*d的矩阵。

    self-attention的计算公式一般定义如下,其中QKVQ、K、V为输入样本的重要属性元素,是输入样本经过空间变换得到,且可以统一到一个特征空间中。公式及算子名称中的"Attention"为"self-attention"的简写。

    Attention(Q,K,V)=Score(Q,K)VAttention(Q,K,V)=Score(Q,K)V

    本算子中Score函数采用Softmax函数,self-attention计算公式为:

    Attention(Q,K,V)=Softmax(QKTd)VAttention(Q,K,V)=Softmax(\frac{QK^T}{\sqrt{d}})V

    其中QQKTK^T的乘积代表输入xx的注意力,为避免该值变得过大,通常除以dd的开根号进行缩放,并对每行进行softmax归一化,与VV相乘后得到一个ndn*d的矩阵。

    说明

    [object Object]
[object Object]

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

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

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

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

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

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

[object Object]
  • 约束类型说明

    FusedInferAttentionScore算子约束分为4个档位,按约束复杂程度递增分为 单参数约束、存在性约束、一致性约束和特性交叉约束,各档位约束内容和示例如下:

    • 单参数约束:对于单个接口参数的约束,包含FusedInferAttentionScore算子接口中的 Tensor、TensorList、Array 和 Attributes
      • 对于Tensor、TensorList、Array,单参数约束中包含如下校验
        • 校验 shape,包括shape维度dim、每一维度 dim value
        • 校验 dtype
        • 校验 format
      • 对于属性 Attribute
        • 校验属性取值
    • 存在性约束:约束特定场景下,特性参数组内,必须传入某参数,或不支持传入某参数
    • 一致性约束:特性参数组内,各个参数间约束。
      • Example 1:属性sparseMode和输入tensor attenMask均属于Attention Mask参数组,sparseMode取值为2/3/4时,attenMask shape必须为(2048,2048),此类约束即为参数组内的一致性约束
    • 特性交叉约束:涉及多个参数组,不同参数组间交叉约束
      • Example 1:输入tensor blockTable 和 属性 blockSize 属于Paged Attention(同PA)参数组,输入tensor attenMask属于 Mask参数组;在PA场景下,attenMask输入最后一维(attenMaskS2)需要大于等于maxBlockNumPerSeq * blockSize,此类约束即为多参数组间的交叉约束;且为保证风格统一,此约束会放在入参顺序靠后的 Paged Attention参数组中
  • 特性参数组

    [object Object]undefined
  • 基准信息说明

    资料约束中,常见字段释义如下:

    [object Object]undefined
  • 参数组约束

    [object Object]
    • 公共参数组(CommonChecker)

      • 单参数约束

        • 公共约束

          [object Object]
      • 存在性约束

        [object Object]
      • 一致性约束

        [object Object]
      • 特性交叉约束

        • 非量化场景[object Object]
          • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
            • Prefill MLA 场景下,不支持 tensorlist、左 padding
            • MLA 场景下,不支持后量化
    • PSE参数组

      • 单参数约束
        • 公共
          • 入参 pseType 应满足以下条件:
            • pseType 必须为0, 2 或者 3
            • pseType 为 1 不支持 FA 推理场景,仅支持 FA 训练场景
          • 入参 pseShift 应满足以下条件:
            • tensor 的数据类型应满足以下条件:
              • pseType 为 2 或者 3 时,tensor 的数据类型必须为 FLOAT32
              • pseType 为 0 时,且 query 的数据类型为 FLOAT16 或者 INT8 时,tensor 的数据类型必须为 FLOAT16
              • pseType 为 0 时,且 query 的数据类型为 BFLOAT16 时,tensor 的数据类型必须为 BFLOAT16
            • tensor shape 应满足以下条件:
              • pseType 为 2 或者 3 时,tensor shape 应为 (Q_N)
              • pseType 为 0 时:
                • tensor shape 的维度必须为 4
                • P_S1(tensor shape 的第 3 维) > 1 时:
                  • tensor shape 的第 1 维应等于 1 或者 B
                  • tensor shape 的第 2 维应等于 Q_N
                  • tensor shape 的第 3 为应大于等于 Q_S
                  • 非 prefix 场景时,tensor shape 的第 4 维应大于等于 KV_S
                  • prefix 场景时,tensor shape 的第 4 维应大于等于KV_S + actualSharedPrefixLen
                • P_S1(tensor shape 的第 3 维) = 1 时:
                  • tensor shape 的第 1 维应等于 1 或者 B
                  • tensor shape 的第 2 维应等于 Q_N
                  • 非 prefix 场景时,tensor shape 的第 4 维应大于等于 KV_S
                  • prefix 场景时,tensor shape 的第 4 维应大于等于 KV_S + actualSharedPrefixLen
      • 存在性约束
        • 公共
          • 入参 pseShift 应满足以下条件:
            • pseType 为 2 或者 3 时,必须传入 pseShift
      • 一致性约束
        • 公共
          • pseType 为 2 或者 3 时, 入参 qStartIdx 和 kvStartIdx 应满足以下条件:
            • qStartIdx 的取值范围应满足 [-2147483648, 2147483647]
            • kStartIdx 的取值范围应满足 [-2147483648, 2147483647]
            • kvStartIdx - qStartIdx 的取值范围应满足 [-1048576, 1048576]
            • 若 qStartIdxOptional 或 kvStartIdxOptional 非空,则取列表中的第一个数据作为 qStartIdx 或 kvStartIdx
      • 特性交叉约束
        • 公共
          • PagedAttention场景下,入参 pseShift 应满足以下条件:
            • tensor shape 的最后一维应大于等于 maxBlockNumPerBatch * blockSize
          • alibi 场景下,Q_S 应等于 KV_S
          • MLA场景下,入参 pseShift 应满足以下条件:
            • 不支持 pse,不能传入 pseShift
          • D 不等长场景下,入参 pseShift 应满足以下条件:
            • 不支持 pse,不能传入 pseShift
          • 伪量化场景下,当 pseType 为 0 且 Q_S 为 1 时,pseShift 的第三维仅支持 1
    • [object Object]Attention Mask参数组[object Object]

      • 单参数约束

        • 公共
          • 入参 attenMask 需要满足以下条件:

            • tensor dtype 为 INT8/UINT8/BOOL 类型
            • tensor format 为 ND/NCHW/NHWC/NCDHW 类型
            • 如果输入attenMask shape中的Q_S、KV_S非32B对齐,可以向上取到对齐的Q_S、KV_S
          • 入参 sparseMode 需要满足以下条件:

            • sparseMode 支持输入范围为 0-4,默认值为 0
            • sparseMode 在不开启 mask 时,仅支持输入为0
            • sparseMode 含义如下表所示(注:attenMask矩阵示例部分中的1 = masked out,0 = keep)
            [object Object]undefined
      • 存在性约束

      • 一致性约束

        • 公共
          • 入参 attenMask 的输入维度仅支持 2/3/4
            • Atlas 350 加速卡:
              • 维度为 2 时,不支持 sparseMode 为 0/1 模式
            • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
              • sparseMode 为 0/1 模式时,若传入 query_rope 和 key_rope,或者 query 与 key 的 D 不等于 value 的 D,则不支持 attenMask 输入维度为 2
              • sparseMode 为 0/1 模式时,若 attenMask 输入维度为 2,则 layout 仅支持为 BSH、BSND、BNSD、BNSD_BSND
          • 入参 sparseMode 为 0/1 模式时,attenMask矩阵的 shape 应满足 [batchSize/1,>=Q_S,>=KV_S + actualSharedPrefixLen]
          • 入参 sparseMode 为 2/3/4 模式时,attenMask矩阵的 shape 最后两维应等于2048,即支持传入(2048,2048)或(1,2048,2048)或(1,1,2048,2048)
          • 非伪量化或 Q_S 大于1时,preTokens 与 nextTokens 应满足 nextTokens * (-1) <= preTokens,以确保具有有效数据
        • 伪量化
          • Q_S等于1时,attenMask 输入维度仅支持 3/4,且 attenMask 输入的 shape 应满足,第一维等于 batchSize 或 1,倒数第二维应大于等于 Q_S,最后一维应大于等于 blockTable 的第二维 * blockSize + actualSharedPrefixLen
          • Q_S大于1时,若 sparseMode 为 4 模式,且 attentionOut 为 int8 类型时,则 preTokens 与 nextTokens 均不能为负数
      • 特性交叉约束

        • 非量化
          • Decode MLA场景下,sparseMode 仅支持 0/3/4 模式
          • GQA 场景下,当 query,key 及 value 的 head dim 不相等时,sparseMode 仅支持 0/2/3 模式
        • 全量化
          • Decode MLA场景下,如果query/key/value的类型为 INT8,当 layout 为 TND/TND_NTD 时,sparseMode 仅支持 0/3 模式,且 0 模式下不支持传入 attenMask 矩阵
          • Decode MLA场景下,如果query/key/value的类型为 INT8,当 layout 不为 TND/TND_NTD 时,Q_S 大于 1 时,sparseMode 仅支持 3 模式,且传入 attenMask 矩阵;Q_S 等于 1 时,sparseMode 仅支持 0 模式,且不支持传入 attenMask 矩阵
          • Decode MLA场景下,如果query/key/value的类型为 FLOAT8_E4M3FN/HIFLOAT8时,sparseMode 仅支持 0/3 模式,且 0 模式下不支持传入 attenMask 矩阵
    • ActualSeqLen参数组

      • 单参数约束
        • 公共
          • 入参 actualSeqLengths(query 的 actualSeqLengths)应满足以下条件:
            • 长度应满足以下条件:
              • 当 query 的 layout 为 TND/NTD 时,长度应等于 batch 数
              • 当 query 的 layout 为非 TND/NTD 时,长度应等于 1 或者 大于等于 query 的 batch 值
            • 入参中的数值应满足以下条件:
              • 当 query 的 layout 为 TND/NTD 时,其值应递增(大于等于前一个值)排列
              • 当 query 的 layout 为 TND/NTD 是,最后一个元素应等于 T
              • 当 query 的 layout 为非 TND/NTD 时,其值应不大于 Q_S
              • 其值应为非负数
          • 入参 actualSeqLengthsKv(key/value 的 actualSeqLengths)应满足以下条件:
            • 长度应满足以下条件:
              • 当 key/value 的 layout 为 TND/NTD 时,长度应等于 batch 数
              • 当 key/value 的 layout 为非 TND/NTD 时,长度应等于 key/value 的 batch 值
            • 入参中的数值应满足以下条件:
              • 当 key/value 的 layout 为 TND/NTD 时,最后一个元素应等于 T
              • 当 key/value 的 layout 为 TND/NTD 时,其值应递增(大于等于前一个值)排列
              • 当 key/value 的 layout 为非 TND/NTD 时,其值应不大于 KV_S
              • 其值应为非负数
      • 存在性约束
        • 公共
          • 入参 actualSeqLengths(query 的 actualSeqLengths)应满足以下条件:
            • 当 query 的 layout 为 TND/NTD 时,必须传入 actualSeqLengths
          • 入参 actualSeqLengthsKv(key/value 的 actualSeqLengths)应满足以下条件:
            • 当 key/value 的 layout 为 TND/NTD 时,必须传入 actualSeqLengthsKv
            • PagedAttention场景下,必须传入 actualSeqLengthsKv
      • 一致性约束
      • 特性交叉约束
        • 公共
          • alibi pse (pseType 为 2 或 3)场景下,入参 actualSeqLengths 和 actualSeqLengthsKv 应满足以下条件:
            • actualSeqLengths 和 actualSeqLengthsKv 在每个 batch 的数值需要相等
        • 全量化
          • Decode MLA 场景下,若传入 actualSeqLengths,query 的 layout 必须为 TND/NTD
    • [object Object]伪量化/全量化参数组(DequantChecker)[object Object]

      • 单参数约束
        • 伪量化场景
          • 入参 keyAntiquantMode 和 valueAntiquantMode 应满足以下条件:
            • 入参中的数值应满足以下条件:
              • 其值应为 0(per-channel/per-tensor)、1(per-token)、2(per-tensor 叠加 per-head)、3(per-token 叠加 per-head)、 4(per-token 模式使用 page attention 管理 scale/offset)、 5(per-token 叠加 per-head 模式并使用 page attenion 管理 scale/offser)、6(per-token-group)
              • 除 key 支持 per-channel 叠加 value 支持 per-token,keyAntiquantMode 和 valueAntiquantMode 应相等
          • 入参 keyAntiquantScale 和 valueAntiquantScale 应满足以下条件:
            • 入参的数据类型应满足以下条件:
              • per-channel(per-tensor),数据类型应与 query 相同
              • per-token,数据类型仅支持 FLOAT32
              • per-tensor 叠加 per-head,数据类型应与 query 相同
              • per-token 叠加 per-head,数据类型仅支持 FLOAT32
              • per-token 模式使用 page attention 管理 scale/offset,数据类型仅支持 FLOAT32
              • key 支持 per-channel 叠加 value 支持 per-token,数据类型仅支持 FLOAT32
              • per-token-group,数据类型仅支持 FLOAT8_E8M0
            • 入参的 shape 应满足以下条件:
              • per-channel,shape 应为 (1, N, 1, D)、(1, 1, N, D)、(1, N, D)、(1, H)、(N, 1, D)、(N, D)、(H)
              • per-tensor,shape 应为 (1)
              • per-token,shape 应为 (1, B, >=KV_S)、(B, >=KV_S)
              • per-tensor 叠加 per-head,shape 应为 (N)
              • per-token 叠加 per-head,shape 应为 (B, N, >=KV_S)
              • per-token 模式使用 page attention 管理 scale/offset,shape 应为 (blockNum, blockSize)
              • ter-token 叠加 per-head 模式并使用 page attention 管理 scale/offset, shape 应为 (blockNum, N, blockSize)
              • key 支持 per-channel 叠加 value 支持 per-token,keyAntiquantScale 的 shape 应为 (1, N, 1, D)、(1, N, D)、(1, H)、(N, 1, D)、(N, D)、(H)
              • key 支持 per-channel 叠加 value 支持 per-token,valueAntiquantScale 的 shape 应为 (1, B, >=KV_S)、(B, >=KV_S)
              • per-token-group,shape 应为 (1, B, N, >=KV_S, D/32)
          • 入参 key 和 value 应满足以下条件:
            • 入参的数据类型应满足以下条件:
              • per-tensor 模式,其支持的数据类型为 INT8
              • per-channel 模式,其支持的数据类型为 INT8、INT4(INT32)、HIFLOAT8、FLOAT8_E4M3FN
              • per-token 模式,其支持的数据类型为 INT8、INT4(INT32)、FLOAT8_E4M3FN
              • per-tensor 叠加 per-head 模式,其支持的数据类型为 INT8
              • per-token 叠加 per-head 模式,其支持的数据类型为 INT8、INT4(INT32)
              • per-token 模式使用 page attenion 管理 scale/offset,其支持的数据类型为 INT8、FLOAT8_E4M3FN
              • key 支持 per-channel 叠加 value 支持 per-token,其支持的数据类型为 INT8、INT4(INT32)
              • per-token-group,其支持的数据类型为 FLOAT4_E2M1
        • 全量化场景
          • Decode MLA 全量化
            • 入参 dequantScaleQuery、keyAntiquantScale、valueAntiquantScale 的dtype为FLOAT32类型
            • 入参 keyAntiquantScale、valueAntiquantScale 的shape为(1)
            • 入参 keyAntiquantMode、valueAntiquantMode 为0(per-tensor模式),queryQuantMode为3(per-token叠加per-head模式)
          • per-tensor 全量化
            • 入参 deqScale1、deqScale2 的dtype支持 UINT64、FLOAT32
            • 入参 quantScale1 的dtype支持FLOAT32
            • 入参 deqScale1、quantScale1、deqScale2 的shape为(1)
            • 入参 queryQuantMode、keyAntiquantMode、valueAntiquantMode 为0
      • 存在性约束
        • 伪量化场景
          • 入参 keyAntiquantScale 和 valueAntiquantScale 应满足以下条件:
            • 必须传入 keyAntiquantScale
            • 必须传入 valueAntiquantScale
          • 入参 keyAntiquantOffset 和 valueAntiquantOffset 应满足以下条件:
            • 传入 keyAntiquantOffset 时,必须传入 valueAntiquantOffset
            • 传入 valueAntiquantOffset 时,必须传入 keyAntiquantOffset
            • 当 key/value 的数据类型为 FLOAT8_E4M3FN、HIFLOAT8、FLOAT4_E2M1时,不支持 offset,不能传入 keyAntiquantOffset
            • 当 key/value 的数据类型为 FLOAT8_E4M3FN、HIFLOAT8、FLOAT4_E2M1时,不支持 offset,不能传入 valueAntiquantOffset
        • 全量化场景
          • Decode MLA 全量化
            • dequantScaleQuery、keyAntiquantScale、valueAntiquantScale 需同时存在
            • 不支持传入 keyAntiquantOffset、valueAntiquantOffset
            • 不支持传入 deqScale1、quantScale1、deqScale2
            • 不支持传入 antiquantScale、antiquantOffset
            • 不支持传入 keyRopeAntiquantScale
          • per-tensor 全量化
            • deqScale1、quantScale1、deqScale2 需同时存在
            • 不支持传入 dequantScaleQuery、keyAntiquantScale、valueAntiquantScale
            • 不支持传入 keyAntiquantOffset、valueAntiquantOffset
            • 不支持传入 antiquantScale、antiquantOffset
            • 不支持传入 keyRopeAntiquantScale
      • 一致性约束
      • 特性交叉约束
        • 伪量化场景
          • inputLayout 仅支持 BSH, BNSD, BSND, BNSD_BSND, TND
          • key/value 的数据类型为 INT8 时,inputLayout 不支持 TND
          • 当 Q_S 等于 1 时,inputLayout 不支持 BNSD_BSND
          • Q_S > 1 时:
            • key/value 的数据类型为 INT8 时,keyAntiquantMode 不支持 2,3,4,5
            • key/value 的数据类型为 INT8,且keyAntiquantMode 为0或1时,query 和 output 的数据类型仅支持 BF16
            • key/value 的数据类型为 INT8,且keyAntiquantMode 为0或1时,Q_S长度不能大于16
            • key/value 的数据类型为 INT8,且keyAntiquantMode 为0或1时,不支持 tensor list
            • key/value 的数据类型为 INT8,且keyAntiquantMode 为0或1时,不支持左 padding
            • key/value 的数据类型为 INT8,且keyAntiquantMode 为0或1时,不支持 page attention
            • key/value 的数据类型不支持 INT4、INT32
          • page attention 场景下,入参 keyAntiquantScale 和 valueAntiquantScale 应满足以下条件:
            • tensor shape 应满足以下条件:
              • per-token 模式,shape 的最后一维应大于等于 maxBlockNumPerBatch * blockSize
              • per-token 叠加 per-head 模式,shape 的最后一维应大于等于 maxBlockNumPerBatch * blockSize
              • per-token-group 模式,shape 的倒数第二维应大于等于 maxBlockNumPerBatch * blockSize
        • 全量化场景
          • Decode MLA 全量化
            • query、key、value 的dtype为 FLOAT8_E4M3FN/INT8/HIFLOAT8
            • attenOut 的dtype为 BFLOAT16
            • queryRope、keyRope 的dtype为BFLOAT16
            • 当query/key/value是 FLOAT8_E4M3FN/HIFLOAT8 时, inputLayout 仅支持 BSH、BSND、BNSD、TND、BSH_NBSD、BSND_NBSD、BNSD_NBSD、TND_NTD;当 query/key/value 类型为 INT8 时, inputLayout 仅支持BSH、BSND、TND、BSH_NBSD、BSND_NBSD、TND_NTD
            • Q_N 支持1、2、4、8、16、32、64、128
            • KV_N必须为1;G 支持 [1, 128];Q_S 支持[1,16]
            • 当query的inputLayout为BSH时,dequantScaleQuery的shape应该为(B, Q_S, Q_N);当query的inputLayout为BSND、BNSD、TND时,dequantScaleQuery 的shape相比query仅少一个维度D,且每一维需要和query的对应维度保持一致
            • 不支持公共前缀场景、不支持pse场景、不支持alibi场景、不支持左padding场景
            • 当 query/key/value 类型为 INT8 时,仅支持 PagedAttention场景,且kv cache排布为NZ格式
          • per-tensor 全量化
            • query、key、value 的dtype为INT8
            • attentionOut 的dtype支持FLOAT16、BFLOAT16
            • Q_S 不能为1
            • Q_N 支持 [1, 256];KV_N 支持 [1, 256];G 支持 [1,64];D 支持 [1,512]
            • inputLayout 支持 BSH、BNSD、BSND、BNSD_BSND
            • 不支持PagedAttention场景、不支持alibi场景、不支持Rope存在、不支持后量化、不支持D不等长场景、不支持公共前缀场景
    • [object Object]后量化参数组(PostQuantChecker)[object Object]

      • 单参数约束
        • 公共
          • 入参 quantScale2 需要满足以下条件:
            • tensor dtype 为 BF16/FP32 类型
          • 入参 quantOffset2 需要满足以下条件:
            • tensor dtype 为 BF16/FP32 类型
          • PostQuant 场景下,输出 attenOut 的数据类型仅支持 INT8/FP8_E4M3FN/HIFLOAT8
      • 存在性约束
        • 公共
          • PostQuant 场景下,必须传入 quantScale2
      • 一致性约束
        • 公共
          • PostQuant 场景下,当 quantScale2 维度大于1且量化方式为 per-channel 时,若 layout 为 BSH/BSND/BNSD/BNSD_BSND,则 quantScale2 仅支持 shape 为 queryN*valueD,否则仅支持 [numHeads, vHeadDim]
          • PostQuant 场景下,当 quantScale2 维度等于1且量化方式为 per-tensor 时,quantScale2 仅支持 shape 为 (1)
          • PostQuant 场景下,当 quantOffset2 存在时,quantOffset2 应与 quantScale2 保持相同 shape 及数据类型
      • 特性交叉约束
        • 公共
          • PostQuant 场景下,当 query 输入类型不为 BF16 时,quantScale2 仅支持 FP32 类型
        • 非量化
          • PostQuant 场景下,当存在 prefix 时,仅支持输出 attenOut 的数据类型为 INT8
        • 伪量化
          • PostQuant 场景下,输出 attenOut 的数据类型仅支持与输入 Key、Value 数据类型相同
          • 当 keyAntiquantMode 和 valueAntiquantMode 为 per-token 或 per-token 使用 page attention 管理 scale/offset,query 数据类型为 FP16/BF16 且 key/value 数据类型为FLOAT8_E4M3FN 时,不支持叠加后量化
    • Paged Attention参数组

      • 单参数约束
        • 公共
          • 入参 blockTable 需要满足以下条件:
            • tensor dtype 为int32类型
            • tensor shape 为2维,每一维dim value取值均不能为0,第一维长度需等于Batch size,第二维长度不能小于maxBlockNumPerSeq(maxBlockNumPerSeq为每个batch中最大actualSeqLengthsKv对应的block数量)
          • 入参 blockSize 需要满足以下条件:
            • blockSize 需要大于0
            • blockSize是用户自定义的参数,该参数的取值会影响PagedAttention的性能,通常情况下,PagedAttention可以提高吞吐量,但会带来性能上的下降,调大blockSize会有一定性能收益
        • 非量化
          • 入参 blockSize 需要满足以下条件:
            • Decode MLA/Prefill MLA场景:blockSize 16对齐,最大支持1024
            • GQA场景:QueryHeadDim/KeyHeadDim/ValueHeadDim均为64或128时,blockSize 16对齐,最大支持1024;其他情况下,若Q_S> 1,blockSize 128对齐,最大支持1024,若Q_S= 1,blockSize 16对齐,最大支持512
        • 伪量化
          • 入参 blockSize 需要满足以下条件:需要根据key、value dtype size 32B对齐,最大支持512。即当key、value dtype为INT8/HIFLOAT8/FLOAT8_E4M3FN 时,blockSize 需要32对齐,即当key、value dtype为INT4(INT32)、FLOAT4_E2M1 时,blockSize 需要64对齐
        • 全量化
          • Decode MLA 全量化场景下,仅支持blockSize取值128
      • 存在性约束
        • 公共
          • PagedAttention 开启情况下,必须传入 actualSeqLengthsKv
          • PagedAttention 不支持tensorlist场景,不支持左padding场景,不支持公共前缀场景,不支持D不等长场景
      • 一致性约束
      • 特性交叉约束
        • 公共
          • PagedAttention的开启场景下,若同时开启attenMask,传入attenMask的最后一维需要大于等于 maxBlockNumPerSeq * blockSize
          • PagedAttention场景下,kv cache排布为BnNBsD时性能通常优于kv cache排布为BnBsH时的性能,建议优先选择BnNBsD格式。
          • PagedAttention场景下,当输入kv cache排布格式为BnBsH(blocknum, blocksize, H),且 KV_N * D 超过65535时,受硬件指令约束,会被拦截报错。可通过开启GQA(减小 KV_N)或调整kv cache排布格式为BnNBsD(blocknum, KV_N, blocksize, D)解决。
        • 伪量化
          • PagedAttention场景下,kv cache 的 layout 为 4 维时,inputLayout 必须为 BNSD、BNSD_BSND 或 TND
        • 全量化
          • Decode MLA场景下:
            • 当query的数据类型为FP8_E4M3FN/HIFLOAT8,且inputLayout为BSH、BSND、BSH_NBSD、BSND_NBSD时,kv cache排布只支持BnBsH(blocknum, blocksize, H)和NZ (blocknum,KV_N,D/D0,blocksize,D0) 两种格式
            • 当query的数据类型为FP8_E4M3FN/HIFLOAT8,且inputLayout为BNSD、TND、BNSD_NBSD、TND_NTD时,kv cache排布支持BnBsH(blocknum, blocksize, H)、BnNBsD(blocknum, KV_N, blocksize, D)和NZ(blocknum,KV_N,D/D0,blocksize,D0)三种格式
            • 当query的数据类型为INT8时,kv cache排布仅支持NZ,且kv cache排布为 (blocknum,KV_N,D/D0,blocksize,D0)
            • 当kv cache排布为NZ时,最后一维D0是32, keyRope 最后一维D0是16
          • GQA全量化场景不支持PagedAttention
    • 左padding参数组

      • 单参数约束
        • 非量化
          • Query 左padding 场景下,queryPaddingSize 的 shape 应为 (1)
          • Key、value 左padding 场景下,kvPaddingSize 的 shape 应为 (1)
      • 存在性约束
        • 公共
          • Query 左padding 场景下,必须传入 queryPaddingSize
          • Key、value 左padding 场景下,必须传入 kvPaddingSize
      • 一致性约束
      • 特性交叉约束
        • 公共
          • 左padding 场景下,不支持 PagedAttention
          • 左padding 场景下,不支持 pseType = 2/3
          • 左padding 场景下,不支持 BSH_BNSD、BSND_BNSD、TND、NTD、NTD_TND、TND_NTD 场景
          • 左padding 场景下,必须传入 actualSeqLengths/actualSeqLengthsKv
    • 公共前缀参数组

      • 单参数约束
        • 入参 keySharedPrefix 和 valueSharedPrefix 应满足以下条件:
          • tensor shape 应满足以下条件:
            • shape 应为 (1)
            • layout 为 BNSD 和 BSND 时,N 轴和 D 轴应与 key/value 的 N 轴和 D 轴相等
            • layout 为 BSH 时,H 轴应与 key/value 的 H 轴相等
            • keySharedPrefix 和 valueSharedPrefix 的 S 轴应相等
          • tensor 数据类型应满足以下条件:
            • 数据类型应与 key/value 的数据类型相同
        • 入参 actualSharedPrefixLen 应满足以下条件:
          • shape 应满足以下条件: shape 应为 1
          • 入参中的数值应满足以下条件:
            • 其值不能大于 keySharedPrefix 和 valueSharedPrefix 的 shape 的 S 轴
      • 存在性约束
        • 公共
          • 入参 keySharedPrefix 和 valueSharedPrefix 应满足以下条件:
            • 传入 keySharedPrefix 时,必须传入 valueSharedPrefix
            • 传入 valueSharedPrefix 时,必须传入 keySharedPrefix
      • 一致性约束
      • 特性交叉约束
        • 公共
          • 不支持 PagedAttention 场景
          • 不支持 tensorlist 场景
          • 不支持左 padding 场景
          • 不支持 alibi 场景
          • 不支持 TND 场景
          • 不支持 Prefill MLA (包括 D 不等长和 ROPE 独立输入)场景
          • 不支持 Decode MLA 场景
        • 全量化
          • 全量化(包括 MLA 全量化和 GQA 全量化)场景,不支持 prefix
          • 后量化场景,仅支持数据类型 INT8
        • 伪量化
          • 伪量化 key/value 合成场景所有量化模式 prefix 均支持
          • 伪量化 key/value 分离场景,prefix 仅支持以下量化模式:
            • Q_S > 1 时,伪量化方式为 per-channel(per-tensor)、per-token 时,key/value 数据类型仅支持 INT8
            • Q_S = 1 时,伪量化方式为 per-tensor、per-tensor 叠加 per-head、per-token 叠加使用 page attention 模式管理 scale/offset、per-token 叠加 per-head 并使用 page attention 模式管理 scale/offset,key/value 数据类型仅支持INT8
            • Q_S = 1 时,伪量化方式为 per-channel、per-token、per-token 叠加 per-head、key 支持 per-channel 叠加 value 支持 per-token,key/value 数据类型支持 INT8、INT4(INT32)
    • Rope参数组

      • 单参数约束
        • 公共
          • 入参 queryRope 和 keyRope 需要满足以下条件
            • tensor dtype 为 FLOAT16/BFLOAT16
            • tensor shape 中D维为 64
      • 存在性约束
        • 公共
          • 入参 queryRope 和 keyRope 必须同时存在
      • 一致性约束
      • 特性交叉约束
        • 公共
          • query shape的D仅支持128、512
          • 非tensorlist场景, queryRope shape 维度需要和 query 保持一致,除了 queryRope shape 的D为64外, 其余维度需要和 query 一致;keyRope shape 维度需要和 key 保持一致,除了 keyRope shape 的D为64外, 其余维度需要和 key 一致
          • 非量化场景,入参 queryRope 和 keyRope 的 dtype 需要和 query、key 保持一致
          • 不支持公共前缀场景、不支持pse场景、不支持alibi场景
          • 不支持伪量化场景
        • Decode MLA
          • Layout 仅支持 BNSD、BSND、BSH、TND、BNSD_NBSD、BSND_NBSD、BSH_NBSD、TND_NTD
          • Q_N 支持 1/2/4/8/16/32/64/128;KV_N 仅支持1
          • 非量化场景,Q_S无限制;全量化场景,Q_S 支持 [1,16]
          • 不支持左padding场景、不支持tensorlist场景
        • Prefill MLA
          • Layout 仅支持 BNSD、BSND、BSH、TND、NTD、BSH_BNSD、BSND_BNSD、NTD_TND、BNSD_BSND
          • 在tensorlist场景下,传入 keyRope shape 中D为64,B需要和 key 的tensorlist长度保持一致,N、S需要与 key 的tensorlist中每个tensor的N、S相等
          • 不支持全量化场景
    • LearnableSink参数组

      • 单参数约束
        • 公共
          • 入参 learnableSink 需要满足以下条件
            • tensor dtype 为 FLOAT16/BFLOAT16
            • tensor shape 为 (Q_N)
      • 存在性约束
      • 一致性约束
      • 特性交叉约束
        • 公共
          • LearnableSink 开启场景下,tensor dtype需要和query dtype保持一致
          • LearnableSink 开启场景下,QueryHeadDim/KeyHeadDim 仅支持 64、128、192,ValueHeadDim 仅支持 64、128
          • LearnableSink 开启场景下,innerPrecise 必须为高精度模式 (0)
          • LearnableSink 不支持左padding场景、不支持公共前缀场景、不支持pse场景、不支持alibi场景
          • LearnableSink 不支持全量化场景、不支持伪量化场景、不支持Decode MLA场景
    • SoftmaxLSE参数组

      • 单参数约束
        • 公共
          • 输出 lseOut 仅支持数据类型 FP32
      • 存在性约束
        • 公共
          • softmaxLSE 场景下,输出 lseOut 不应为空
      • 一致性约束
      • 特性交叉约束
        • 公共
          • softmaxLSE 且非空tensor场景下,如输出 layout 为 TND 或 NTD,则 lseOut 输入维度应为 3,且 shape 匹配 [Q_T,Q_N,1]
          • softmaxLSE 且非空tensor场景下,如输出 layout 不为 TND 或 NTD,则 lseOut 输入维度应为 4,且 shape 匹配 [B,Q_N,Q_S,1]
[object Object]

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

[object Object]