已关闭
[Documentation|文档反馈]: op_api 对外头文件 @param 注释与签名不一致 8 处(幽灵参/缺参/名称零匹配/参数序错含静默算错) #5833
dihidao创建于  22 天前关闭于  17 天前
dihidao
dihidao
22 天前 创建

场景:开发者按 op_api 对外头文件注释调用 aclnn 接口(494 个 .h 机器扫描 153 候选人工核验后产出)。

问题与位置(master 2026-10-06 核实):

  1. mc2/moe_distribute_dispatch_teardown/op_api/aclnn_moe_distribute_dispatch_teardown.h:22 注释以 epRecvCountsOut 收尾但签名 :56 该位置实为 assistInfoForCombineOut——按文档绑定把 combine 辅助信息当接收 token 数解析 → MC2 结果语义错乱;comm_type 与 commType 拼名不一致;
  2. posembedding/norm_rope_concat/op_host/op_api/aclnn_norm_rope_concat.h:25 注释仅覆盖 25/35 参——queryOutput/keyOutput/valueOutput/normQueryMean/normQueryRstd/normKeyMean/normKeyRstd/normAddedQueryMean 等 10 个出参零文档,漏传/空指针崩溃;
  3. attention/nsa_compress_attention_infer/op_host/op_api/aclnn_nsa_compress_attention_infer.h:20(experimental 同名同型)23 参中 19 条写成"param [in] xxx"缺 @ 前缀 → doxygen 只渲染 4 参;
  4. moe/moe_token_permute_with_routing_map/op_host/op_api/aclnn_moe_token_permute_with_routing_map.h:19 注释出参序 permutedTokensOut→sortedIndicesOut→permuteProbsOutOptional,签名 :39 实为 permuteTokensOut→permuteProbsOutOptional→sortedIndicesOut——按注释顺序绑定 probs/sortedIndices 拿反 → 下游 unpermute 用错索引(moe_token_unpermute 同族同错+缺 restoreShapeOptional);
  5. experimental/attention/flash_attn_exp/op_api/aclnn_flash_attn.h:25 注释缺 maxSeqlenQ/maxSeqlenKV(TND 场景关键参数,签名 :84 有)→ 传 0 或错值 → 注意力输出错;且 "@param 名 [IN]" 方向后置语法 doxygen 解析异常;
  6. posembedding/interleave_rope/op_host/op_api/aclnn_interleave_rope.h:21 注释 sin 在 cos 前,签名 :40 为 (x, cos, sin, out,...)——二者均为 aclTensor*,按注释顺序传参编译通过但旋转位置编码静默算错(rotary_position_embedding/op_host 两文件同型,共 4 文件);
  7. gmm/grouped_matmul_finalize_routing/op_api/aclnn_grouped_matmul_finalize_routing.h:21(+weight_nz/v2 共 3 文件)dtype 形参零文档 → 输出 dtype 选择无依据;
  8. mc2/quant_grouped_mat_mul_allto_allv/op_api/aclnn_quant_grouped_mat_mul_allto_allv.h:22(v2 同)groupSize 形参零文档 → 量化 group 长度配置无依据。

影响:1/4/6 为静默算错(最高风险),其余编译失败或不知道必填参数。

问题复现方式:master 对照上述行号与签名。
修复建议:逐条按签名重写注释。已检索本仓历史 issues(#5705 为 Python 接口问题),未见本批 @param 问题报告。

likedislike
游震成员
22 天前 评论:

您好,感谢反馈!

问题分析

一、出参顺序/名称与签名错位(第 1、4、6 项,绑定误导风险)

  • mc2/moe_distribute_dispatch_teardown/op_api/aclnn_moe_distribute_dispatch_teardown.h:注释末两个出参为 expertTokenNumsOut、epRecvCountsOut,签名(:60-61)实为 assistInfoForCombineOut、expertTokenNumsOut——assistInfoForCombineOut 完全无注释,epRecvCountsOut 在签名中不存在;comm_type 与签名 commType 拼写不一致属实。按注释顺序绑定会使第 3、4 个出参错位:tiling 侧要求 assistInfoForCombineOut 的 dim0 必须等于 a1*128(moe_distribute_dispatch_teardown_tiling_base.cpp:604-610),多数错绑会以参数校验错误暴露,但报错指向的参数与开发者预期完全对不上,定位成本高;形状恰好匹配时则直接产出语义错误的结果。
  • moe/moe_token_permute_with_routing_map/op_host/op_api/aclnn_moe_token_permute_with_routing_map.h:注释出参序 permutedTokensOut→sortedIndicesOut→permuteProbsOutOptional,签名(:41)实为 permuteTokensOut→permuteProbsOutOptional→sortedIndicesOut,后两个出参互换,且首出参名称 permutedTokensOut/permuteTokensOut 也不一致。op_api 层对 sortedIndicesOut(int32)与 permuteProbsOutOptional(须与 probsOptional 同 dtype)有校验(aclnn_moe_token_permute_with_routing_map.cpp:75-89),错绑通常以参数错误暴露而非静默算错,但按注释排查会被报错信息误导。同族 moe_token_unpermute 的第一段接口注释完全没有 @param 条目,restoreShapeOptional 等全部形参无说明。
  • rope 系列 4 个文件(interleave_rope/op_host/op_api 下的 aclnn_interleave_rope.h 与 aclnn_rotary_position_embedding.h,rotary_position_embedding/op_host/op_api 下的 aclnn_rotary_position_embedding.h 及 v2):注释均为 sin 在前、cos 在后,签名均为 (x, cos, sin, …)。sin 与 cos 的 dtype、shape 约束完全相同,交换传参不会触发任何编译期或运行时校验,会直接得到错误的旋转位置编码结果——这 4 处属于真正的静默算错场景,与您的风险排序一致。

二、形参缺失说明(第 2、5、7、8 项)

  • posembedding/norm_rope_concat/op_host/op_api/aclnn_norm_rope_concat.h:签名 35 个形参中注释仅覆盖 25 个,11 个出参张量(queryOutput/keyOutput/valueOutput/normQueryMean…normAddedKeyRstd)仅有一条泛化的 out 描述,且该描述引用的 x 并不在本接口签名中。
  • experimental/attention/flash_attn_exp/op_api/aclnn_flash_attn.h:签名中的 maxSeqlenQ/maxSeqlenKV(:84)无注释;@param q [IN] … 把方向标记后置,不符合 doxygen @param[in] name 的标准语法,生成文档时方向属性无法被识别。
  • gmm/grouped_matmul_finalize_routing/op_api/ 主文件、v2、weight_nz 共 3 个文件:签名中的 int64_t dtype 形参无注释。dtype 是输出类型选择参数(参与 op_api/grouped_matmul_finalize_routing.cpp:41 的 GetOutputDataType 决定输出 dtype),同目录 v3 与 weight_nz_v2 已有正确注释,可作对齐参考。
  • mc2/quant_grouped_mat_mul_allto_allv/op_api/ 主文件与 v2:签名中的 int64_t groupSize 形参无注释。

三、doxygen 语法缺失(第 3 项)

  • attention/nsa_compress_attention_infer/op_host/op_api/aclnn_nsa_compress_attention_infer.h(experimental 同名文件同型):第一段接口 23 个形参中 19 条说明写作 param [in] xxx 缺 @ 前缀,仅 4 条带 @,按 doxygen 标准语法只能渲染后 4 条;注释中 topkMaskOptional/compressStride/topkIndicesOut 与签名 topKMaskOptional/compressBlockStride/topKOutput 的名称也不一致。

处理方向

可行的修复方向与您的建议一致:以函数签名为基准逐条重写注释——补齐 assistInfoForCombineOut、maxSeqlenQ/maxSeqlenKV、dtype、groupSize 及 norm_rope_concat 各出参等缺失说明,修正出参顺序与名称拼写,统一为 doxygen 标准的 @param[in]/@param[out] 写法(gmm v3、weight_nz_v2 中 dtype 的注释写法可直接参考),并一并清理上述拷贝残留;修改仅涉及注释,不改变接口签名与行为。另外,您提到 494 个头文件扫描共 153 个候选,如方便欢迎把完整清单补充到本 Issue,便于一次性排查未报告的同类问题。我们会对上述文件逐项确认并评估批量修正方案,有进展将在本 Issue 同步。

likedislike
游震成员
22 天前 评论:

问题1: @tangjn
问题2: @yue-ma
问题3: @L_Euler
问题4: @kdy18482276080
问题5: @yipyip
问题6: @jiangjiawei
问题7: @yangziqi_007
问题8: @luobaiqing

likedislike
游游震成员
22 天前 将 tangjn 设为负责人
此处折叠了13条事件消息 查看更多
Wwym_666成员
18 天前 关联了pull request:aclnnNormRopeConcat补充缺失的参数注释
huangshuai59成员
17 天前 评论:

问题8已修复合入

likedislike
HHan-Xiaobin成员
17 天前 将 IceBearPolar 设为负责人
HHan-Xiaobin成员
17 天前 移除了负责人 IceBearPolar
Han-Xiaobin成员
17 天前 评论:

问题3已修复合入

likedislike
kdy18482276080成员
17 天前 评论:

问题4已修复合入

likedislike
Kkdy18482276080成员
17 天前 移除了负责人 kdy18482276080
HHan-Xiaobin成员
17 天前 将 kdy18482276080 设为负责人,移除负责人 L_Euler
Jjiangjiawei成员
17 天前 移除了负责人 jiangjiawei
yue-ma成员
17 天前 评论:

问题2已修复合入

likedislike
Yyue-ma成员
17 天前 移除了负责人 yue-ma
CANN-robotCANN-robot成员
17 天前 关闭了 issue
CANN-robotCANN-robot成员
16 天前 添加了label:resolved