开发者
下载
[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]
  • 基准信息说明

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

[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矩阵
        • MxFP8场景下,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模式)
        • MxFP8全量化
          • 入参dequantScaleQuery、keyAntiquantScale、valueAntiquantScale的dtype为FLOAT8_E8M0类型
          • 入参dequantScaleQuery的shape为(Q_T, Q_N, D/64, 2)、keyAntiquantScale的shape为(Bn, KV_N, Bs, D/64, 2)、valueAntiquantScale的shape为(Bn, KV_N, Bs/64, D, 2)
          • 入参queryQuantMode、keyAntiquantMode为6(per-token-group模式),valueAntiquantMode为8(per-channel-group模式)
          • 入参quantScale1的shape为(1),dtype支持FLOAT32,复用quantScale1作为pScale
    • 存在性约束
      • 伪量化场景
        • 入参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
        • MxFP8全量化
          • dequantScaleQuery、keyAntiquantScale、valueAntiquantScale需同时存在
          • 不支持传入keyAntiquantOffset、valueAntiquantOffset
          • 不支持传入deqScale1、deqScale2
          • 不支持传入antiquantScale、antiquantOffset
          • 不支持传入keyRopeAntiquantScale
    • 一致性约束
    • 特性交叉约束
    • 伪量化场景
      • inputLayout仅支持BSH, BNSD, BSND, BNSD_BSND, TND
      • key/value的数据类型为INT8时,inputLayout不支持TND
      • Q_S = 1时:
        • inputLayout不支持BNSD_BSND
        • 当key/value的数据类型为INT8, keyAntiquantMode = 0且valueAntiquantMode = 1时,query和output的数据类型仅支持FLOAT16
      • 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
      • 不支持合并rope
    • 全量化场景
      • 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格式
      • MxFP8全量化
        • query、key、value的dtype为FLOAT8_E4M3FN
        • attentionOut的dtype支持FLOAT16、BFLOAT16
        • Q_S、KV_S仅支持64对齐
        • inputLayout仅支持TND
        • 仅支持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
        • MxFP8全量化场景下,仅支持blockSize取值512
    • 存在性约束
      • 公共
        • 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全量化场景除开MxFP8均不支持PagedAttention
        • MxFP8全量化仅支持PagedAttention场景,kv cache排布仅支持BnNBsD(blocknum, KV_N, blocksize, D)
  • 左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]