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

aclnnMoeFusedTopk

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:MoE计算中,对输入x做Sigmoid计算,对计算结果分组进行排序,最后根据分组排序的结果选取前k个专家。

  • 计算公式:

    对输入做sigmoid:

    sigmoidRes=sigmoid(x)sigmoidRes=sigmoid(x)

    加上addNum:

    normOut=sigmoidRes+addNumnormOut = sigmoidRes + addNum

    对计算结果按照groupNum进行分组,每组按照topN的sum值对group进行排序,取前groupTopk个组:

    groupOut,groupId=TopK(ReduceSum(TopK(Split(normOut,groupCount),k=2,dim=1),dim=1),k=kGroup)groupOut, groupId = TopK(ReduceSum(TopK(Split(normOut, groupCount), k=2, dim=-1), dim=-1),k=kGroup)

    根据上一步的groupId获取normOut中对应的元素,将数据再做TopK,得到indices的结果:

    normY,indices=TopK(normOut[groupId,:],k=k)normY,indices=TopK(normOut[groupId, :],k=k)

    根据indices从sigmoidRes中选出y:

    y=gather(sigmoidRes,indices)y = gather(sigmoidRes, indices)

    如果isNorm为true,对y按照输入的scale参数进行计算,得到y的结果:

    y=y/(ReduceSum(y,dim=1))scaley = y / (ReduceSum(y, dim=-1))*scale

    如果enableExpertMapping为true,再将indices中的物理专家按照输入的mappingNum和mappingTable映射到逻辑专家,得到输出的indices。

函数原型

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

[object Object]
[object Object]

aclnnMoeFusedTopkGetWorkspaceSize

  • 参数说明

    [object Object]
  • 返回值

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

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

    [object Object]

aclnnMoeFusedTopk

  • 参数说明

    [object Object]
  • 返回值:

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

约束说明

  • 确定性计算:

    • aclnnMoeFusedTopk默认确定性实现。
  • expertNum必须为groupNum的整数倍。

  • groupTopk小于等于groupNum。

  • maxMappingNum小于等于128。

  • TopK小于等于expertNum。

  • TopN小于等于expertNum / groupNum。

  • expertNum小于等于1024。

  • groupNum小于等于256。

调用示例

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

[object Object]