已关闭
[Bug-Report|缺陷反馈]: #784
chenyizhuo创建于 13 天前关闭于 12 天前
13 天前 修改了issue 的描述
13 天前 修改了issue 的描述
Leewis
13 天前 评论:
13 天前 评论:
问题确认:成立
1. 现状复核(代码证据)
- 约束来源:
experimental/README.md第 5 节「运行期开关」(commit af6ae92f / MR !1258,2026-06-08 合入)明确要求:贡献特性必须通过环境变量HCCL_EXPERIMENTAL_<NAME>=true控制是否生效,项目入口提供IsXxxEnabled()判断函数,且特性入口必须if (IsXxxEnabled()) { ... }守卫。 - example 现状:全目录检索无任何
getenv/IsXxxEnabled/HCCL_EXPERIMENTAL_*用法。当前唯一的生效门控均为编译期/静态条件:ENABLE_EXPERIMENTAL=ON(experimental/ops/CMakeLists.txt:11-17 守卫,由build.sh --experimental控制,本目录随add_subdirectory(all_reduce/example)编入 hccl 目标);CANN_VERSION_NUM >= CANN_VERSION(9, 0, 0)(executor .cc:374);- 运行期拓扑条件
userRankSize == 2——但它不是开关,而是REGISTER_ALG_ATTRS中op.opPriorityCheck的优先选中条件(executor/ins_v2_all_reduce_experimental_sole_executor.cc:386-388),条件满足即无条件生效。
- 时间线:开关约束 2026-06-08 合入;example(前身 register_v2_test)2026-09-01 创建(commit 2107dfc6),晚于约束约 3 个月,创建时即未按约束实现;2026-09-22 适配最新 src(commit 17171488)时也未补充。
2. 影响评估
- 默认构建(
ENABLE_EXPERIMENTAL=OFF):example 不参与编译,零影响。 - 实验构建(
ON):example 经REGISTER_EXEC_V2/REGISTER_ALG_ATTRS注册进与主链路相同的注册表(CollAlgExecRegistryV2/AlgAttrsRegistry),其opPriorityCheck在选择器扫描算法时全局生效——进程内所有单机两卡 AllReduce(受支持数据类型)被本算法无条件优先选中,无需任何显式开启动作(example README 第 5 节记录的验证结果"runner 双 rank 均选中 CcuMSAllReduceExperimentalSoleMesh"亦印证了这一点)。后果:- 改变该构建中主链路算法在两卡场景的常规选择结果;
- 挤占其他 experimental 算法的验证空间——example README 限制#1 已自认此风险("opPriorityCheck 会在选择器扫描算法时全局生效……验证其他 experimental/ 算法时,必须裁剪本目录的编译/注册以确保本算法不被选中"),但其对策是手工裁剪构建,这正是第 5 节运行期开关要消除的"意外开启影响主干"路径。
3. 修复建议(对齐 README §5 模板与仓内参照实现)
仓内已有完全合规的参照实现:experimental/ops/op_common/recursive_executor/executor/adaptor_executor.cc:18-26 的 IsRecursiveExecutorEnabled()(constexpr 主开关默认 false + 环境变量 HCCL_EXPERIMENTAL_RECURSIVE_EXECUTOR 判 "true")。建议 example 照此补充:
- 新增
IsAllReduceExampleEnabled()(开关名建议HCCL_EXPERIMENTAL_ALL_REDUCE_EXAMPLE,按 §5 命名约定,最终命名由责任田确认); - 守卫位置:
REGISTER_ALG_ATTRS属性中增加op.opCustomCheck(返回 false 即被过滤出 cost 竞争——开关关闭时算法完全不参与选择,实现完整隔离),并让op.opPriorityCheck以开关 && userRankSize == 2判断(开启时才两卡优先)。REGISTER_EXEC_V2为静态注册、无法运行期门控,选择回调层即本特性的正确"入口"; - 模板细节提示:按模板字面
constexpr bool xxxEnabled = false时特性硬关(环境变量亦无效),需维护者翻转常量后才可经环境变量启用。本样例的定位是验证 A5 注册链路可用性,constexpr 默认取 false(与 recursive_executor 一致)还是 true(保留样例经环境变量即可测的可用性),建议责任田权衡; - 同步更新 example README:第 4 节「用法」补充运行期开关说明;限制#1 的"必须裁剪编译/注册"手工对策改由开关控制替代。
4. 扩展发现(建议责任田同批评估)
- birs 项目开关命名不合规:
experimental/ops/reduce_scatter/reduce_scatter_op_experimental.cc:143-153的MatchBIRS()读取HCCL_BIRS_ENABLE且判断"TRUE"——不符合 §5 的HCCL_EXPERIMENTAL_<NAME>命名与"true"取值约定,也无 constexpr 主开关,建议一并对齐; - 建议为 experimental/ 新增代码增加开关合规性静态检查(如 CI 扫描特性代码须包含
HCCL_EXPERIMENTAL_前缀的环境变量守卫),防止同类问题随新贡献再次引入。
本回复为 AI 结合源码深度分析生成,将同步对应责任田团队进行二次确认。


Leewis
12 天前 评论:
12 天前 评论:
https://gitcode.com/cann/hccl/pull/3407 相关PR已修改合入;


12 天前 添加了label:resolved
Describe the current behavior / 问题描述 (Mandatory / 必填)
hccl/experimental/README.md中要求贡献特性必须通过运行期开关控制是否生效,当前experimental/ops/all_reduce/example未加入运行期开关。
Steps to reproduce the issue / 重现步骤
NA
Describe the expected behavior / 预期结果 (Mandatory / 必填)
experimental/ops/all_reduce/example代码中按照hccl/experimental/README.md中的模板加入运行期开关