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

aclnnMoeTokenUnpermuteWithRoutingMapGrad

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:aclnnMoeTokenUnpermuteWithRoutingMap的反向传播。

  • 计算公式

    (1) probs非None:

    permutedTokensGrad[outIndex[i]]=unpermutedTokensGrad[permuteTokenId[i]]permutedTokensGrad[outIndex[i]] = unpermutedTokensGrad[permuteTokenId[i]] permutedProbsGrad=permutedTokensGradpermutedTokensOptionalpermutedProbsGrad = permutedTokensGrad * permutedTokensOptional probsGradExpertOrder=j=0hidden_size(permutedProbsGradi,j)probsGradExpertOrder = \sum_{j=0}^{hidden\_size}(permutedProbsGrad_{i,j})
    • paddedMode为false时
    probsGradOut=masked_scatter(routingMapOptionalT,probsGradExpertOrder)probsGradOut = masked\_scatter(routingMapOptional^T,probsGradExpertOrder) permutedProbs=probsOptionalT.masked_select(routingMapOptionalT)permutedProbs = probsOptional^T.masked\_select(routingMapOptional^T) permutedTokensGradOut=permutedProbs.unsqueeze(1)permutedTokensGradpermutedTokensGradOut = permutedProbs.unsqueeze(-1) * permutedTokensGrad
    • paddedMode为true时
    probsGradOut[permuteTokenId[i],outIndex[i]/capacity]=probsGradExpertOrder[outIndex[i]]probsGradOut[permuteTokenId[i], outIndex[i]/capacity] = probsGradExpertOrder[outIndex[i]] permutedProbs[outIndex[i]]=probsOptional.view(1)[i]permutedProbs[outIndex[i]] = probsOptional.view(1)[i] permutedTokensGradOut=permutedProbspermutedTokensGradpermutedTokensGradOut = permutedProbs * permutedTokensGrad

    (2) probs为None:

    permutedTokensGradOut[outIndex[i]]=unpermutedTokensGrad[permuteTokenId[i]]permutedTokensGradOut[outIndex[i]] = unpermutedTokensGrad[permuteTokenId[i]]
    1. hidden_size指unpermutedTokensGrad的第1维大小。
    2. paddedMode等于true时,每个专家固定能够处理capacity个token。输入routingMapOptional的第1维是experts_num,即专家个数,输入outIndex的第0维是experts_num * capacity,根据这两个维度可以算出capacity。
    3. paddedMode等于false时,每个token固定被topK_num个专家处理。输入unpermutedTokensGrad的第0维是tokens_num,即token的个数,输入outIndex的第0维是tokens_num * capacity,根据这两个维度可以算出topK_num。

函数原型

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

[object Object]
[object Object]

aclnnMoeTokenUnpermuteWithRoutingMapGradGetWorkspaceSize

  • 参数说明:

    [object Object]
  • 返回值:

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

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

    [object Object]

aclnnMoeTokenUnpermuteWithRoutingMapGrad

  • 参数说明:

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

约束说明

  • 确定性计算:

    • aclnnMoeTokenUnpermuteWithRoutingMapGrad默认确定性实现。
  • 当输入probsOptional非空,且paddedMode为false时,要求topK_num <= 512且topK_num <= experts_num。

  • 当输入probsOptional非空,且paddedMode为true时,要求capacity <= tokens_num。

调用示例

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

[object Object]