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

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})
    • dropAndPad为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
    • dropAndPad为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. dropAndPad等于true时,每个专家固定能够处理capacity个token。输入routingMapOptional的第1维是experts_num,即专家个数,输入outIndex的第0维是experts_num * capacity,根据这两个维度可以算出capacity。
    3. dropAndPad等于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默认确定性实现。
  • tokens_num表示输入的token数量,hidden_size表示词向量维度,experts_num表示专家个数。
  • 通过dropAndPad区分以下两种模式:dropAndPad等于true时,每个专家固定能够处理capacity个token。dropAndPad等于false时,每个token固定被topK_num个专家处理。
  • 当输入probsOptional非空,且dropAndPad为false时
    • 要求topK_num <= 512且topK_num <= experts_num。
    • 要求experts_num满足(196608 - (probTypeLen + 1) * numExpertAlign-(tokenTypeLen + 8) * 256) / (6 * tokenTypeLen + 12) >= 1,其中probTypeLen是输入probsOptional的数据类型对应的字节数,tokenTypeLen是输入unpermutedTokensGrad的数据类型对应的字节数,numExpertAlign是experts_num对32做向上对齐的结果。
  • 当输入probsOptional非空,且dropAndPad为true时
    • 要求capacity <= tokens_num。
    • 要求hidden_size在输入unpermutedTokensGrad是BFLOAT16或FLOAT16时,需要小于等于4972544,hidden_size在输入unpermutedTokensGrad是FLOAT时,需要小于等于4149248。

调用示例

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

[object Object]