已关闭
[Bug]: ACLNN 执行回调误用 enqueue 状态导致切流后控核资源绑定错误 #5452
PerrySkywalker创建于 23 天前关闭于 19 天前
23 天前 添加了label:bug
23 天前 关联了pull request:fix: correct ACLNN dequeue stream resource binding (master)
23 天前 关联了pull request:fix: correct ACLNN dequeue stream resource binding (9.2.0)
23 天前 修改了issue 的描述
游震
23 天前 评论:
23 天前 评论:
/assign @PerrySkywalker


23 天前 将 PerrySkywalker 设为负责人
19 天前 关闭了 issue
19 天前 添加了label:resolved
问题描述
torch_extension/cann_ops_transformer/common/aclnn_common.h的ACLNN_CMD在acl_call执行回调内部调用check_enqueue_need_use。外层入队准备与内层执行回调需要分别维护 enqueue/dequeue 的 stream 资源绑定状态;混用后,跨 stream 执行可能漏绑资源,导致算子使用上一个 stream 的核数限制。复现与实际结果
系统 Python、Ascend950,
TASK_QUEUE_ENABLE=1。用 C++ 最小回调通过OpCommand::SetCustomHandler/Run执行 A→B→A:aclrtGetResInCurrentThread读取消费线程实际绑定资源。首次 A 为 8/16,B 为 4/8;再次 A 时 enqueue 判断返回 false,实际仍为 4/8,期望为 8/16。外层与回调线程 ID 不同。
将执行回调统一改为 dequeue 判断后,A→B→A 的实际资源为 8/16→4/8→8/16。
TASK_QUEUE_ENABLE=0的同步对照也通过。修复方案
仅将
acl_call内部的check_enqueue_need_use改为check_dequeue_need_use,保留外层 enqueue 判断以及现有aclrtUseStreamResInCurrentThread调用。同步修复 master 和 9.2.0。回归验证
已修改实际安装包头文件,并在系统 Python 下重新编译
flash_mla_with_kvcacheTorch 扩展:两个目标分支各提交同一处一行修复,分别通过 staged 和完整 PR 差异的 pre-commit(含 OAT)检查。上述上卡测试使用本机安装包重编译,不代表两个分支各自全量构建或远端 CI 已通过。
关联 PR