Closed
[Documentation|文档问题]: moe/moe_finalize_routing: README 公式求和上界错误且约束说明为空 #6735
zhu_qiAdd on  14 days agoClosed at  10 days ago
zhu_qi
14 days ago Create

一、问题描述(必填)

moe/moe_finalize_routing/README.md 存在两处文档问题:

  1. 计算公式求和上界多 1。正文公式为 ∑k=0K\sum_{k=0}^{K}(闭区间,共 K+1 项)。Kernel 实际循环为 j < K_(见 op_kernel/moe_finalize_routing_fp.h),应为 k=0k=0 到 K−1K-1。
  2. 「约束说明」为空。该章节仅写「无。」Host 侧 InferShape 实际校验输入为 2D/1D、同行同列,索引张量为 INT32;Kirin X90 / 9030 不支持 BFLOAT16。这些约束未写入约束章节。

二、涉及文件

  • moe/moe_finalize_routing/README.md 约第 26 行(公式)、第 104 行(约束说明)
  • 对照实现:moe/moe_finalize_routing/op_kernel/moe_finalize_routing_fp.h(for (j = 0; j < K_; j++))
  • 对照实现:moe/moe_finalize_routing/op_host/moe_finalize_routing_infershape.cpp(维度与 dtype 校验)

三、建议修改

  1. 将求和上界改为 ∑k=0K−1\sum_{k=0}^{K-1}。
  2. 在「约束说明」中补充:各输入维度关系、expandedRowIdx / expandedExpertIdx 为 INT32、Kirin 不支持 BF16,以及必要的 Shape 范围说明。
likedislike
周云飞
周云飞Collaborators
14 days ago Comments:

感谢指出这两处文档问题。

关于求和上界,按您提供的 j < K_ 循环,若公式中的 K 与实现中的 K_ 含义一致,参与累加的应为 K 项,即下标从 0 到 K−1。因此,将公式改为 ∑k=0K−1\sum_{k=0}^{K-1} 是合理的修订方向,可以避免现有写法被理解为累加 K+1 项。这属于公式表述问题,不能据此认定实际计算也多执行了一次。

关于「约束说明」,建议分别补充输入形状关系、索引类型和产品支持限制,而不是笼统写为「无」:

  • 形状约束应逐个说明输入的维数、哪些输入需要同行或同列,以及可选输入存在时的要求;具体数值范围应以实际校验和实现限制为依据,不宜直接推定。
  • 两个索引输入需要明确标注 INT32。当前内核片段中,两者均使用 GlobalTensor<int32_t>,这支持在文档中明确索引类型要求。
  • BFLOAT16 需要区分通用类型支持与产品限制。类型推导允许 BFLOAT16,但已提供的内核入口中,相关 BFLOAT16 分支在 __NPU_ARCH__ 为 3003 或 3113 时被排除。因此,不能仅凭类型推导就认定所有产品均支持;写入 Kirin X90 / 9030 的限制前,还需确认产品名称与架构条件的对应关系。

目前提供的片段尚未覆盖 README 原文、求和循环及完整形状校验,具体维度关系和 Shape 范围仍需进一步确认。可行的处理方向是修正文档公式,并将已核实的输入约束和产品限制同步补入「约束说明」,不改变算子的计算行为。

likedislike
周云飞
周云飞Collaborators
14 days ago Comments:

/assign @azyuli

likedislike
CANN-robotCANN-robotCollaborators
14 days ago Assign azyuli as responsible person
azyuliazyuliCollaborators
10 days ago Associated pull request
CANN-robotCANN-robotCollaborators
10 days ago Close issue
CANN-robotCANN-robotCollaborators
10 days ago Added label: resolved