开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:MoE计算中,最后处理合并MoE FFN的输出结果。本接口针对V2接口aclnnMoeFinalizeRoutingV2做出如下变更,请根据实际情况选择合适的接口:
    1. 兼顾V2原有功能的情况下,增加零计算专家、拷贝专家和常量专家的计算,计算公式变更如下。
  • 计算公式
expertId=expertIdx[i,k]if expertIdzero_expert_range:skip;elif expertIdcopy_expert_range:x=x[i]out(i,j)=x1i,j+x2i,j+k=1Kscalesi,k(x+biasmathrmexpertId,j)elif expertIdconstant_expert_range:x=α1x[i]+α2vout(i,j)=x1i,j+x2i,j+k=1Kscalesi,k(x+biasmathrmexpertId,j)else:out(i,j)=x1i,j+x2i,j+k=0Kscalesi,k(expandedXexpandedRowIdxiK+k,j+biasexpertidiK+k,j)\begin{aligned} &\mathrm{expertId} = \mathrm{expertIdx}[i,k] \\ &\text{if } \mathrm{expertId} \in \mathrm{zero\_expert\_range}:\\&\quad \text{skip}; \\&\text{elif } \mathrm{expertId} \in \mathrm{copy\_expert\_range}: \\ &\quad x = x[i] \\ &\quad \mathrm{out}(i, j) = x1_{i, j} + x2_{i, j} + \sum_{k=1}^{K}\mathrm{scales}_{i,k} \cdot \left(x + \mathrm{bias}_{mathrm{expertId},j}\right) \\ &\text{elif } \mathrm{expertId} \in \mathrm{constant\_expert\_range}: \\&\quad x = \alpha_1 \cdot x[i] + \alpha_2 \cdot v \\ &\quad \mathrm{out}(i, j) = x1_{i, j} + x2_{i, j} + \sum_{k=1}^{K}\mathrm{scales}_{i,k} \cdot \left(x + \mathrm{bias}_mathrm{expertId},j\right) \\ &\text{else}: \\ &\quad \mathrm{out}(i, j) = x1_{i, j} + x2_{i, j} + \sum_{k=0}^{K}\mathrm{scales}_{i,k} \cdot\big(\mathrm{expandedX}_{\mathrm{expandedRowIdx}_{i\cdot K+k},j} + \mathrm{bias}_{\mathrm{expertid}_{i\cdot K+k},j}\big) \end{aligned} [object Object]

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

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

    [object Object]
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
      • expandedX要求是一个2D/3D的Tensor,支持的数据类型为FLOAT16、BFLOAT16、FLOAT32,支持drop less和drop pad场景。
      • scalesOptional:混合精度模式下,支持 expandedX 为 BFLOAT16 时 scalesOptional 为 FLOAT32;非混合精度模式下,数据类型要求与expandedX一致。
    • Atlas 350 加速卡:
      • expandedX要求是一个2D/3D的Tensor,支持的数据类型为FLOAT16、BFLOAT16、FLOAT32,支持drop less和drop pad场景。
      • scalesOptional数据类型可以与expandedX不一致。
    • [object Object]Atlas 推理系列产品[object Object]:
      • expandedX要求是一个2D的Tensor,数据类型支持FLOAT16、FLOAT32,shape要求尾轴H为32对齐。
      • x1Optional、x2Optional、biasOptional、expertIdxOptional仅支持传入nullptr
      • 仅支持dropPadMode传入2。
      • scalesOptional数据类型支持FLOAT16、FLOAT32,且需要与expandedX一致。
  • 返回值:

    aclnnStatus:返回状态码,具体参见

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

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

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

[object Object]
  1. 确定性计算:

    • aclnnMoeFinalizeRoutingV3默认确定性实现。
  2. NUM_ROWS:表示行数;

    • K:表示从总的专家E中选出K个专家;
    • H:表示hidden size,即每个token序列长度,为列数;
    • E:表示expert num,即专家数,E需要大于等于K;
    • C:表示expert capacity,即专家处理token数量的能力阈值。
  3. expandedRowIdx:当dropPadMode参数值为0、2时,Tensor中的值取值范围是[0,NUM_ROWS * K-1];当dropPadMode参数值为1、3时,Tensor中的值取值范围是[-1, E * C - 1]。

  4. 在x1Optional参数未输入的情况下,x2Optional参数也不能输入。

  5. scalesOptional不存在时,K为1。

  6. biasOptional存在时,expertIdxOptional必须同时存在。

  7. dropPadMode的取值与含义对应如下:

    • 0:drop less 场景,expandedRowIdx按排列(与输出格式对应)。
    • 1:drop pad 场景,expandedRowIdx按排列(与输出格式对应)。
    • 2:drop less 场景,expandedRowIdx按排列(与输出格式对应)。
    • 3:drop pad 场景,expandedRowIdx按排列(与输出格式对应)。
[object Object]

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

[object Object]