昇腾社区首页
中文
注册
开发者
下载

aclnnMoeInitRoutingV3

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:MoE的routing计算,根据的计算结果做routing处理,支持不量化和动态量化模式。本接口针对V2接口做了如下功能变更,请根据实际情况选择合适的接口:

    1.增加动态量化功能,支持输出expendX的 int8动态量化输出

    2.增加参数activeExpertRangeOptional,支持筛选有效范围内的expertId

    3.删除属性expertTokensBeforeCapacityFlag、删除输出expertTokensBeforeCapacityOut (使用expertTokensCountOrCumsumOut进行输出)

  • 计算公式:

    1.对输入expertIdx做排序,得出排序后的结果sortedExpertIdx和对应的序号sortedRowIdx:

    sortedExpertIdx,sortedRowIdx=keyValueSort(expertIdx,rowIdx)sortedExpertIdx, sortedRowIdx=keyValueSort(expertIdx,rowIdx)

    2.以sortedRowIdx做位置映射得出expandedRowIdxOut:

    expandedRowIdxOut[sortedRowIdx[i]]=iexpandedRowIdxOut[sortedRowIdx[i]]=i

    3.在drop模式下,对sortedExpertIdx的每个专家统计直方图结果,得出expertTokensCountOrCumsumOutOptional:

    expertTokensCountOrCumsumOutOptional[i]=Histogram(sortedExpertIdx)expertTokensCountOrCumsumOutOptional[i]=Histogram(sortedExpertIdx)

    4.计算quant结果:

    • 动态quant:
      • 若不输入scale:

        dynamicQuantScaleOutOptional=row_max(abs(x))/127dynamicQuantScaleOutOptional = row\_max(abs(x)) / 127 quantResult=round(x/dynamicQuantScaleOutOptional)quantResult = round(x / dynamicQuantScaleOutOptional)
      • 若输入scale:

        dynamicQuantScaleOutOptional=row_max(abs(xscaleOptional))/127dynamicQuantScaleOutOptional = row\_max(abs(x * scaleOptional)) / 127 quantResult=round(x/dynamicQuantScaleOutOptional)quantResult = round(x / dynamicQuantScaleOutOptional)

    5.对quantResult取前NUM_ROWS个sortedRowIdx的对应位置的值,得出expandedXOut:

    expandedXOut[i]=quantResult[sortedRowIdx[i]%NUM_ROWS]expandedXOut[i]=quantResult[sortedRowIdx[i]\%NUM\_ROWS]

    6.expandedRowIdxOut的有效元素数量availableIdxNum计算方式为,expertIdx中activeExpertRangeOptional范围内的元素的个数 $$ availableIdxNum = |{x\in expertIdx| expert_start \le x<expert_end \ }| $$

函数原型

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

[object Object]
[object Object]

aclnnMoeInitRoutingV3GetWorkspaceSize

  • 参数说明

    [object Object]
  • 返回值

    [object Object][object Object]

aclnnMoeInitRoutingV3

  • 参数说明:

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

约束说明

  • 确定性计算:

    • aclnnMoeInitRoutingV3默认确定性实现。
  • 输入值域限制:

    • activeNum 当前未使用,校验需等于NUM_ROWS*K。
    • expertCapacity 当前未使用,仅校验非空。
    • dropPadMode 当前只支持0,代表 Dropless 场景。
    • expertTokensNumType 当前只支持 1 和 2,分别代表 count 模式和 key_value 模式。
    • expertTokensNumFlag 只支持 true,代表输出 expertTokensCountOrCumsumOut。
    • quantMode 只支持 1 和 -1,分别代表动态 quant 场景和不量化场景。
  • 其他限制:该算子支持两种性能模板,进入两种性能模板需要分别额外满足以下条件,不满足条件则进入通用模板:

    • 进入低时延性能模板需要同时满足以下条件:

      • x、expertIdx、scaleOptional 输入 Shape 要求分别为:(1, 7168)、(1, 8)、(256, 7168)
      • x 数据类型要求:BFLOAT16
      • 属性要求:activeExpertRangeOptional=[0, 256]、 quantMode=1、expertTokensNumType=2、expertNum=256
    • 进入大 batch 性能模板需要同时满足以下条件:

      • NUM_ROWS范围为[384, 8192]
      • K=8
      • expertNum=256
      • expertEnd-expertStart<=32
      • quantMode=-1
      • rowIdxType=1
      • expertTokensNumType=1

调用示例

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

[object Object]