开发者
下载

约束说明

  • 输入数据排布格式为TYPE_BSND时:
    • 在非PA_ENCODER下,Atlas A2 训练系列产品/Atlas A2 推理系列产品Atlas A3 推理系列产品/Atlas A3 训练系列产品上的query、key、value可传二维[nTokens, hiddenSize]或四维[batch, seqLen, headNum, headSize]。
    • 在PA_ENCODER下:
      • Atlas A2 训练系列产品/Atlas A2 推理系列产品Atlas A3 推理系列产品/Atlas A3 训练系列产品上的query、key、value可传二维[nTokens, hiddenSize]或三维[nTokens, headNum, headSize]。
      • Atlas 350 加速卡上的query、key、value仅可传三维[nTokens, headNum, headSize]。
  • Atlas 推理系列产品上 :
    • 0<batch<=2000。
    • mask大小必须使用真实的maxSeqLen。
    • qSeqLen必须等于kvSeqLen。
    • 当maskType为MASK_TYPE_NORM_COMPRESS且mask维度为[1,128,2048,16](2048长窗口)时,上述约束有如下例外:
      • "mask大小必须使用真实的maxSeqLen"不适用:该场景使用固定的2048×2048共享压缩mask画布,mask大小为2048×2048,与实际maxSeqLen无关。
      • mask数据类型仅支持float16。
      • 不支持量化(quantType必须为TYPE_QUANT_UNDEFINED)。
      • scaleType必须为SCALE_TYPE_TOR(不支持LOGN)。
      • isTriuMask由源码强制为1(构造函数层,当maskType为MASK_TYPE_NORM_COMPRESS且310P时),外部传入非必需(倒三角mask,即下三角及对角线为0/可见,上三角为负大值/不可见,推荐-60000或-10000)。
      • maskStride为2048。
      • mask需使用NZ格式输入([1,128,2048,16]),ND格式[2048,2048]需在用户侧转换为NZ。
  • 当在以下场景时,headSize = vHeadSize,范围为(0, 256],其他情况headSize可以不等于vHeadSize,二者的范围为(0, 576]。
    • 开启量化。
    • 注意力使用logN缩放特性。
    • 开启SWA功能。
    • “inputLayout”为TYPE_BNSD。
    • Atlas 推理系列产品上运行,此时headSize必须为16的倍数。
    • Atlas 训练系列产品上运行,此时headSize必须为16的倍数。
  • 关于tensor维度中的nTokens:
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品Atlas A3 推理系列产品/Atlas A3 训练系列产品上为各batch上seqLen之和。
    • Atlas 推理系列产品上:PA_ENCODER下为所有batch的seqLen之和向上对齐到16的整数倍。
    • 其余情况下为所有batch上的seqLen先向上对齐到16的整数倍,再求和。
  • 关于选取何种mask:
    • 在全量阶段,依据原生模型的配置,选择“maskType”是MASK_TYPE_NORM或MASK_TYPE_ALIBI。
    • 在增量阶段,如果原模型非alibi,且mask没有做padding,可选择“maskType”为UNDEFINED,即不传mask;其他情况则依据原生模型的配置,选择“maskType”是MASK_TYPE_NORM或MASK_TYPE_ALIBI。
    • 在长序列场景下,可以考虑压缩mask,压缩mask的构造方法详见压缩mask
  • 在PA_ENCODER下:
    • qScale不生效。
    • query、key、value的维度数要相同。
  • 若想使用GQA模式,需满足:headNum > kvHeadNum。
  • Atlas 训练系列产品只支持PA_ENCODER,仅支持基础功能,不支持功能列表中的所有功能。
  • 在CalcType为ENCODER,DECODER且非bypass场景下hiddenSize必须为16的倍数。
  • query、key、value的headSize为非64的倍数时,会导致算子性能下降,为了确保最佳性能,建议将query、key、value的headSize设置为64的倍数。
  • cpu侧的tensor需要利用hostData设置数据的地址,无需设置deviceData;npu侧的tensor需要利用deviceData设置数据的地址,无需设置hostData。特殊情况:ENCODER/DECODER在非kv-bypass场景下tokenOffset和Seqlen这两个tensor如果都同时传了deviceData和hostData,则会采用deviceData中的数据进行kvcache部分的计算。
  • headNum%kvHeadNum == 0。
  • Atlas 350 加速卡:仅支持maskType为MASK_TYPE_ALIBI、MASK_TYPE_NORM、MASK_TYPE_NORM_COMPRESS。
  • headSize不等于headSizeV时:
    • 不支持maskType为MASK_TYPE_ALIBI。
    • headSize = 192,headSizeV = 128。