已关闭
[Bug-Report|缺陷反馈]: 【2026 HCCL通信库创新大赛-粤港澳赛区】【XDU】ReduceScatter BIRS 多层忽略通信返回值导致失败后仍继续执行 #324
dididi创建于 7月22日关闭于 8月3日
7月22日 将 Leewis 设为负责人
7月23日 关联了pull request:fixing experimental option and ReduceScatter BIRS
Davydov_Danil
7月23日 评论:
7月23日 评论:
@dididi Thanks for the feedback, a PR (https://gitcode.com/cann/hccl/pull/2185) has been prepared to resolve this issue.


17 天前 添加了label:resolved
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Describe the current behavior / 问题描述 (Mandatory / 必填)
实验性 ReduceScatter BIRS 模板在单机和多机路径中存在两层返回值丢失:
HcommWriteOnThread()、HcommWriteReduceOnThread()等通信接口返回int32_t,项目其他算法通过CHK_RET(static_cast<HcclResult>(...))检查;BIRS 的多处调用却直接丢弃返回值,并继续下发 Notify。HCCSProcessMainLoop()、SIOProcessMainLoop()、LocalCopyMainLoop()、FinalStep()、PreprocInterServer()、InterServer()均返回HcclResult,但上层RunAsync()再次直接调用而不检查返回值。这意味着即使 HCOMM 写、写归约、本地拷贝或内部阶段明确返回失败,BIRS 仍可能继续执行后续同步和数据处理,最后从
RunAsync()返回HCCL_SUCCESS。在部分 rank 失败、其他 rank 继续等待 Notify 的情况下,还可能表现为错误结果或通信超时,而原始错误被覆盖。关键代码:
RunAsync()忽略三个循环阶段和FinalStep()的HcclResult:https://gitcode.com/cann/hccl/blob/171f2ba3aee0dea7df63e7c0af8efd9843c265b1/experimental/ops/reduce_scatter/birs/template/reduce_scatter_birs.cc#L228-L250RunAsync()忽略PreprocInterServer()和InterServer()返回值:https://gitcode.com/cann/hccl/blob/171f2ba3aee0dea7df63e7c0af8efd9843c265b1/experimental/ops/reduce_scatter/birs/template/reduce_scatter_birs_inter.cc#L206-L229CHK_RET:https://gitcode.com/cann/hccl/blob/171f2ba3aee0dea7df63e7c0af8efd9843c265b1/src/ops/op_common/template/wrapper/alg_data_trans_wrapper.cc#L260-L275 、https://gitcode.com/cann/hccl/blob/171f2ba3aee0dea7df63e7c0af8efd9843c265b1/src/ops/op_common/template/wrapper/alg_data_trans_wrapper.cc#L414-L430Environment / 环境信息 (Mandatory / 必填)
cann/hcclmaster171f2ba3aee0dea7df63e7c0af8efd9843c265b1experimental/ops/reduce_scatter/birs,单机与多机 BIRS templateENABLE_EXPERIMENTAL=ON、HCOMM 版本满足实验接口要求、HCCL_BIRS_ENABLE=TRUE,并由实验选择器选中 ReduceScatter BIRSSteps to reproduce the issue / 重现步骤 (Mandatory / 必填)
建议在现有 SimWorld/HCOMM stub 中增加一次性失败注入:
ReduceScatterBIRS::RunAsync()的合法 BIRS 用例(例如现有 A3 BIRS ST 的 rank 配置)。HcommWriteOnThread()返回非零错误码,例如HCCL_E_INTERNAL;其余 stub 保持原行为。HCCSProcessMainLoop()丢弃该返回值,继续执行 Notify Record/Wait,并返回HCCL_SUCCESS。LocalCopyMainLoop()内部的HcommLocalCopyOnThread()返回失败,该 helper 会返回错误,但RunAsync()又丢弃 helper 的HcclResult,继续下一阶段。HcommWriteReduceOnThread()、FinalStep()以及多机PreprocInterServer()/InterServer()做同样注入,可观察到相同的错误传播断裂。最小断言:任一数据传输或内部阶段返回非成功时,
RunAsync()必须立即返回相同错误,且失败点之后不再下发新的 Notify、写或本地拷贝任务。Describe the expected behavior / 预期结果 (Mandatory / 必填)
int32_t的 HCOMM 数据传输接口使用CHK_RET(static_cast<HcclResult>(...)),与通用 wrapper 保持一致。HcclResult的 BIRS helper 使用CHK_RET(...),确保错误逐层传播到RunAsync()和算子入口。Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
单机路径的确定性返回值链:
多机路径的确定性返回值链:
该问题为通信错误传播缺陷,不涉及 UI,无需截图。当前没有昇腾硬件日志,以上结论来自固定基线源码和可在现有 stub 中注入错误的确定性控制流。
Special notes for this issue/备注 (Optional / 选填)
团队:XDU;成员:Mr_lee226688。该问题聚焦实验性 ReduceScatter BIRS 内的数据传输与阶段返回值丢失;与 #317 的 CCU GetToken 错误传播问题属于不同算法、不同调用链和不同修复位置。XDU 愿意后续认领修复并补充单机/多机失败注入 UT。