开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能: GroupedMatmul和MoeFinalizeRouting的融合算子,GroupedMatmul计算后的输出按照索引做combine动作。

    相较于aclnnGroupedMatmulFinalizeRoutingV2接口,此接口新增:

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:新增入参tuningConfigOptional,调优参数。数组中的第一个值表示各个专家处理的token数的预期值,算子tiling时会按照该预期值合理进行tiling切分,性能更优。
    • Atlas 350 加速卡:新增了MX量化场景,相关信息参考
  • 计算公式:

    • 1.分组矩阵乘法GMM:

      yi=(xi×weighti)scaleiperTokenScaleiy_i=(x_i\times weight_i) * scale_i * perTokenScale_i
    • 2.路由专家与专家输出分配:

      对于每个token j,执行路由与输出专家分配:

      y[rowIndex[i],:]=y[rowIndex[i],:]+yi(j)[jstarti(j)]y[ rowIndex[i] , : ] = y[rowIndex[i], :] + y_{i(j)}[ j - start_{i(j)}]

      其中 i(j)i(j) 是 token j被分配到的专家索引。yi(j)[jstarti(j)]y_{i(j)}[ j - start_{i(j)}]是该token在对应专家下的计算结果。

    • 3.共享专家输出融合:

      y[rowIndex[i],:]=y[rowIndex[i],:]+sharedInputWeight×sharedInput[j,:]y [rowIndex[i],:] = y[rowIndex[i],:] + sharedInputWeight \times sharedInput[j, :]
    • 4.共享专家输出融合:最终输出结果是所有专家输出与共享专家输出,按照rowIndex所有进行合并的结果,计算过程如下:

      y[rowIndex[i],:]=iE[j]yi[jstarti]+sharedInputWeight×sharedInput[j,:]y[rowIndex[i],:] = \sum_{i \in \mathcal{E}[j]} y_i [j - start_i] + sharedInputWeight \times sharedInput[j, :]

      其中E[j]\mathcal{E}[j]是表示分配给token j的专家集合。

[object Object]

每个算子分为,必须先调用“aclnnGroupedMatmulFinalizeRoutingV3GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnGroupedMatmulFinalizeRoutingV3”接口执行计算。

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

    [object Object]
  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

    • x1仅支持INT8。维度为(m, k),维度m的取值范围为[1,16*1024*8],k支持2048;
    • x2仅支持INT4。当输入为INT32时维度为(e, k, n / 8),输入转为INT4时维度为(e, k, n),e取值范围[1,256],k支持2048,n支持7168。
    • scaleOptional支持INT64。shape支持三维,维度为(e, 1, n),e、n和w的e、n一致。
    • biasOptional支持FLOAT32。e、n和w的e、n一致。
    • offsetOptional支持FLOAT32。shape支持三维,维度为(e, 1, n),e、n和w的e、n一致。
    • perTokenScaleOptional支持FLOAT32。支持一维,维度为(m),m和x的m一致。
    • groupListOptional支持e和w的e一致。
    • sharedInputOptional支持二维,维度为(bsdp,n),bsdp必须小于等于batchSize/e,n和w的n一致。
    • logitOptional支持m和x的m一致。
    • rowIndexOptional支持m和x的m一致。
    • x1、x2、groupListOptional是必选参数,scaleOptional、pertokenScaleOptional、logitOptional、rowIndexOptional、biasOptional,sharedInputOptional是可选参数。
  • Atlas 350 加速卡:

    • x1不支持INT8。
    • x2不支持INT4。维度为(e,k,n),转置情况下维度为(e,n,k),e取值范围[1,1024]。
    • scaleOptional支持FLOAT8_E8M0。shape支持四维,维度为(e,n,Ceil(k/64),2) 并且数据类型只支持FLOAT8_E8M0,转置属性必须和x2保持一致。
    • biasOptional支持BF16。
    • sharedInputOptional支持二维,维度为(bsdp,n),bsdp代表batchSize / dataParallelSize。
    • perTokenScaleOptional支持FLOAT8_E8M0。shape支持三维,维度为(m,Ceil(k/64),2)。
    • x1、x2、scaleOptional、pertokenScaleOptional、groupListOptional、logitOptional、rowIndexOptional是必选参数,biasOptional,sharedInputOptional是可选参数。目前暂不支持offsetOptional参数。所有参数均不支持空tensor。
    • out的第一维bacth、sharedInputOffset必须大于等于0。
    • x1支持M为0的空Tensor。
    • x2支持N为0的空Tensor。
  • 返回值

    返回aclnnStatus状态码,具体参见

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

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

    [object Object]
  • 返回值

    返回aclnnStatus状态码,具体参见

[object Object]
  • 确定性计算:

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:aclnnGroupedMatmulFinalizeRoutingV3默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。
    • Atlas 350 加速卡 :aclnnGroupedMatmulFinalizeRoutingV3默认非确定性实现,不支持通过aclrtCtxSetSysParamOpt开启确定性。
  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:仅支持伪量化场景。

    • 输入和输出支持以下数据类型组合:

      [object Object]undefined
    • 在该场景中,scaleOptional代表per-channel和per-group离线融合的结果。

    • 在该场景中,biasOptional代表离线计算的辅助结果,值要求为8×w×scaleOptional8 \times w \times scaleOptional,并在第一维累加。

    • 该场景支持对称量化和非对称量化。在对称量化时,offsetOptional需要设置为空;在非对称量化时,offsetOptional代表离线计算的辅助结果,即为antiquantOffsetOptional×scaleOptionalantiquantOffsetOptional \times scaleOptional的结果。

    • 在该场景中,antiquantScaleOptional、antiquantOffsetOptional必须设置为空。

  • Atlas 350 加速卡:仅支持MX全量化场景。

    • 输入和输出支持以下数据类型组合:

      [object Object]undefined
    • 在MXFP4/MXFP8场景中,offsetOptional、antiquantScaleOptional、antiquantOffsetOptional必须设置为空。

    • 在MXFP4场景中,必须满足k必须为偶数的约束。在x2非转置的情况下,n必须为偶数。

    • 在MXFP4/MXFP8场景中,支持x2转置或者非转置。x2与scale的转置属性必须保持一致。

    • e 必须小于等于1024。

    • 在MXFP4场景中,k不能为2。

[object Object]

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

  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

    [object Object]
  • Atlas 350 加速卡:

    [object Object]