Closed
[Bug|算子缺陷][迭代加固]: aclnnMoeFinalizeRoutingV3 non_contig 压测发现 是bug #575
Alice_zhouAdd on 1 day agoClosed at 9 hours ago
1 day ago Modify description of issue
1 day ago Modify description of issue
Guoqh
1 day ago Comments:
1 day ago Comments:
复核结论:当前复现材料存在测试框架的非连续索引初始化缺陷,建议按测试构造问题处理,暂不认定为算子缺陷;先修正构造,再复测。
具体依据:
- 附件
aclnnMoeFinalizeRoutingV3_non_contig.cpp第 296~300 行将expandedRowIdxHostData、expertIdxOptionalHostData的逻辑元素初始化为1,随后调用CreateAclTensorByScene。 - 按 issue 链接的公开框架实现核查,utils.h 第 290~304 行 按
storageShape分配内存,但只将hostData连续拷贝到存储前部,没有按 stride/offset 写入逻辑元素,也没有初始化剩余存储。 - 附件执行日志中,首个同步异常为
case_4:expandedRowIdx的 viewShape 为[128]、stride 为[2]、storageShape 为[256]。框架只初始化物理位置0~127,视图却读取0、2、4……254,因此逻辑元素64~127共 64 个会读取未初始化存储。该用例的expertIdxOptional同样有此问题。
所以,“hostData 全为 1”和“stride 未超出 storage”不能证明实际传入的索引值合法。该用例 drop-pad 模式下 E=32、C=1,有效行索引应在 [0,32),专家索引也应在 [0,32);未初始化数据不能保证满足这些约束。非法索引进入全载入 UB 的 kernel 后,可形成与日志中 VEC UB 越界相符的访问,因此目前不能据此归因于 Contiguous()。
建议修正 CreateAclTensorByScene:按实际 stride/offset 将逻辑数据写入物理存储,并初始化所需存储;对于本次索引全为 1 的用例,也可将整个索引物理存储填为 1。之后先在独立进程中重跑 case_4,再以相同逻辑数据做连续/非连续布局对照。若修正后仍异常,再继续定位算子。
本次结论基于附件日志、CPP 和公开框架源码复核,尚未进行修正后的上卡复测。


9 hours ago Modify description of issue
9 hours ago Close issue
一、问题描述(必填)
aclnnMoeFinalizeRoutingV3;测试场景:non_contig;压测日期:2026-11-13;执行卡号:0二、问题复现步骤(必填)
(本场景 cpp 目录:rm -rf aclnnAPI_fuzz/src/op/* # 将附件 aclnnMoeFinalizeRoutingV3_non_contig.cpp 放入 aclnnAPI_fuzz/src/op/ 下aclnnAPI_fuzz/src/op/)cd aclnnAPI_fuzz/ ; makecd out ; ./aclnnAPI_fuzz aclnnMoeFinalizeRoutingV3_non_contig_fuzz 10000三、附件与证据(必填)
💡 存在的问题(选填)
该问题由 fuzz 自动化压测平台发现(每日自动统计当天判定为 bug 的记录并提单);如需更多上下文(完整打屏日志/plog/覆盖度报告),请下载上方附件压缩件。
🔍 代码bug点定位(2026-11-13,结合 ops-* git 仓源码复核)
测试框架复核(F1~F7,aicore 前置门禁):通过
代码排查(ops-transformer/moe/moe_finalize_routing_v2)
l0op::Contiguous()连续化——设计上非连续输入应被物化为稠密张量定位分析
同根因关联:本 issue(non_contig 场景)与 #576(multithread 场景,同 kernel_name=MoeFinalizeRoutingV2)为同一缺陷的两处场景复现,任一修复后另一处复测闭环。
✅ 定性修正(2026-11-14,开发复核采纳 + 框架修复复测定谳)
结论修正:不是bug(测试框架 F1 索引有界性缺陷),本 issue 关闭。
开发复核(@guoqiuhao)确认的根因——测试框架缺陷而非算子缺陷:
CreateAclTensorByScene(utils.h:290-304)按 storageShape 分配内存后仅将 hostData 连续拷贝到存储前部,未按 stride/offset 写入逻辑元素、未初始化剩余存储expandedRowIdxviewShape=[128]/stride=[2]/storageShape=[256],hostData 大小=view 元素数(128),仅覆盖物理 0~127;视图读取 0、2、…、254,其中逻辑元素 64~127(物理 128~254)为未初始化存储——垃圾索引值进入 kernel 后形成与日志相符的 VEC UB 越界框架修复(已落地 turing_sec 与 turing_sec_card1 两实例
inc/utils/utils.h):修复后复测证据(Ascend 950 / CANN 9.3.0):
同根因关联:#576(multithread 场景)与 #582(aclnnSituMxQuant multithread broadcast aicore)同为该框架缺陷所致,一并修正关闭;#582 复测(单接口目录 5000 条)4910/5000 成功、0 aivec、进程完整结束。