---
title: 约束说明
description: "- 输入数据排布格式为TYPE_BSND时："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0268.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0268.html
indexId: c01e85a29990eec85899dda8301d8ab3fc3772f9ba71b58dfd8e21308c239d2964
---
# 约束说明

- 输入数据排布格式为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。
- 当在以下场景时，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时不支持MASK_TYPE_ALIBI。
