已关闭
[Bug][arch35][pooling] AdaptiveAvgPool3dGrad/MaxPool3DGrad/MaxPoolGrad kernel 使用 SyncAll 但 Tiling 未设置 SetScheduleMode(BATCH_MODE) #3866
tangweiwei2创建于 7月6日关闭于 7月7日
7月6日 将 xieshengwei1024 设为负责人
tangweiwei2
7月6日 评论:
7月6日 评论:
pooling类算子问题,已确认存在问题,安排@xieshengwei1024解决


7月6日 将 liuchuangdev 设为负责人
7月6日 移除了负责人 xieshengwei1024
7月6日 将 tangweiwei2 设为负责人
7月7日 关闭了 issue
7月7日 添加了label:resolved
问题描述 (Describe the current behavior)
在 arch35(Ascend950)场景下,pooling 类算子
AdaptiveAvgPool3dGrad、MaxPool3DGrad、MaxPoolGrad的 kernel 中使用了SyncAll()进行全核同步,但其 op_host tiling 代码中均未调用SetScheduleMode(BATCH_MODE)(即SetScheduleMode(1))。SyncAll()要求所有参与同步的核同时启动并在同一调度批次内运行。若未设置 BatchMode,系统默认按核分批调度,会导致:SyncAll()处无限等待,引发死锁/挂起;涉及算子与代码位置
op_kernel/adaptive_avg_pool3d_grad_nc_large_float.h:123、adaptive_avg_pool3d_grad_float.h:126、adaptive_avg_pool3d_grad_nc_large_cast.h:128,172、adaptive_avg_pool3d_grad_cast.h:134AdaptiveAvgPool3dGradtilingop_host/adaptive_avg_pool3d_grad_tiling.cpp等op_kernel/arch35/max_pool3d_grad_simt_kernel.h:96Tiling4MaxPool3DGradop_host/arch35/max_pool3d_grad_tiling.cpp等op_kernel/arch35/max_pool_grad_simt.h:109Tiling4MaxPoolGradop_host/arch35/max_pool_grad_tiling.cpp等这些 pooling grad 算子均通过
SyncAll()实现核间同步(各核计算梯度 partial 后,全核同步确保数据一致性)。三个算子均有明确的ascend950binary config,arch35 场景下会触发该问题。经确认,所有算子 tiling 文件全文无
SetScheduleMode调用:环境信息 (Environment)
重现步骤 (Steps to reproduce)
blockDim > 1),因未设置 BatchMode,核间调度存在批次差异;SyncAll()处可能发生挂起或梯度结果异常。预期结果 (Describe the expected behavior)
各算子 tiling 中应调用
SetScheduleMode(1)设置为 BatchMode,确保所有核同时启动,使SyncAll()全核同步正确生效。参考仓库中已有正确实现,例如:pooling/adaptive_max_pool3d_grad/op_host/adaptive_max_pool3d_grad_normal_tiling.cpp:199:context_->SetScheduleMode(1);pooling/avg_pool3_d_grad/op_host/avg_pool_3d_grad_tiling.cpp:774:tilingContext_->SetScheduleMode(BATCH_MODE);修复建议
在各算子的 tiling 入口函数中添加:
context->SetScheduleMode(1); // kernel 使用 SyncAll 全核同步,需设置为 BatchMode具体位置:
adaptive_avg_pool3d_grad_tiling.cpp)Tiling4MaxPool3DGrad(max_pool3d_grad_tiling.cpp)Tiling4MaxPoolGrad(max_pool_grad_tiling.cpp)备注 (Special notes)
此问题为通过代码静态排查发现(模式:kernel 含
SyncAll但 tiling 缺SetScheduleMode)。同类问题在仓库其他算子类别(hash / conv / loss / norm / quant / index 等)中也存在,将分别提 issue 跟踪。