已关闭
[Requirement|需求建议]: 新增将MoE路由分数归一化的融合算子ScoreNormalize #169
MegaWay创建于  2025年11月13日关闭于  2025年12月29日
MegaWay
MegaWay
2025年11月13日 创建

Backgroud(背景信息)

使用AscendC 实现对MoE专家得分进行归一化的算子ScoreNormalize。ScoreNormalize算子将MoE模型中的路由专家分数进行归一化,输入x(BFloat16)是shape为[rows,k]的张量,即路由专家的分数,其中rows表示序列长度,k表示topk。

ScoreNormalize将分数以最后一维执行归一化,计算公式为:

x=xi=1kxi×2.5x = \frac{x}{\sum_{i=1}^{k}x_i} \times 2.5

Benefit / Necessity (价值/作用)

将通过多个aclnn适配的归一化操作融合为一个算子实现,优化效率。

Design(设计方案)

Tilling 策略

  • 分核策略:
    • 将输入[num_rows, h] 按 num_rows分核, 结合UB大小计算得到每个核能存放的最大的rows_per_core,再根据数据总量计算每个核需要被调用的次数loop_count

Kernel 侧设计

进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、数据搬出(CopyOut)三个阶段,实现专家得分归一化计算。

  • 初始化(Init)
    • 计算rows_per_core以及loop_count
    • 建立GM Tensor映射,初始化队列缓冲区,初始化临时缓冲区
  • 计算流程(Compute)
    • 调用WholeReduceSum对得分求和
    • 调用Broadcast将得分广播
    • 调用Div将广播后的得分和求和的得分做除法
    • 调用Muls将做除法后的得分乘2.5
  • 数据搬入(CopyIn)搬出(CopyOut)
    • CopyIn: 将score数据从inGM中搬入到inQueue
    • CopyOut: 将归一化后的score数据从outQueue搬出到outGM
  • 流程调度(Process)
    • 遍历loop_count,按CopyIn->Compute->CopyOut的顺序调度
likedislike
MegaWay
MegaWay
2025年11月13日 评论:

/assign @wangyuwei22

likedislike
CANN-robotCANN-robot成员
2025年11月13日 将 wangyuwei22 设为负责人
MegaWayMegaWay
2025年11月13日 关联了pull request:Add fused operator ScoreNormalize
Annyqw成员
2025年11月13日 评论:

收到您的需求建议,我们将会在SIG组织会议上进行评审。

likedislike
暖阳成员
2025年11月13日 修改了issue 的描述
MegaWayMegaWay
2025年11月26日 修改了issue 的描述
YuZhengzhong成员
2025年11月27日 评论:

您好,请问issue的公式中乘2.5是为什么,这个参数在不同的模型中是否会不同?如果会不同,这里建议2.5作为算子的一个入参

likedislike
MegaWay
MegaWay
2025年11月28日 评论:

您好,请问issue的公式中乘2.5是为什么,这个参数在不同的模型中是否会不同?如果会不同,这里建议2.5作为算子的一个入参

@Allan_Yu

您好,这个参数在模型中不会改变,参考deepseek的归一化方式写的

likedislike
monologue815成员
2025年11月28日 评论:

您好,目前已评审接纳该需求,请按照贡献流程中的要求提交PR合入代码:https://gitcode.com/cann/ops-transformer/blob/master/CONTRIBUTING.md

likedislike
MegaWayMegaWay
2025年12月29日 issue状态由 进行中 改变为 已完成
MegaWayMegaWay
2025年12月29日 关闭了 issue
CANN-robotCANN-robot成员
2025年12月29日 添加了label:Accepted
CANN-robotCANN-robot成员
3月20日 添加了label:resolved