| Ensure process groups shutdown during NPU exit
Co-authored-by: dujinhang<15990042527@163.com>
# message auto-generated for no-merge-commit merge:
!35049 merge v2.7.1 into v2.7.1
Ensure process groups shutdown during NPU exit
Created-by: du-jin-hang
Commit-by: dujinhang
Merged-by: ascend-robot
Description: <!--
PR描述模板更新日期:20260203
-->
# 【合入来源】
> <font color="red">**如有社区issue,请关联issue链接**</font>\
> <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font>
- [ ] 需求
- [x] 问题单
- [ ] issue/工单
- [ ] 重构优化
- [ ] 资料更新
# 【修改方案】
问题现象:
双进程退出 profiling 时,Device 0 进程正常,Device 1 进程plog日志中出现error信息
根因:
两个进程在退出阶段踩到了不同的线程时序窗口。watchdog 是后台线程循环,在aclFinalizeImpl start后,执行了watchdog 中的setdevice
当前 _destructor_process_group() 只清理 Python 全局状态,清空 Python map 不能保证 C++ ProcessGroupHCCL 立即析构,也不能保证 watchdog 已经 join。因此在用户未显式 destroy_process_group() 的场景下,watchdog 可能活到 profiling stop/finalize 之后,再执行 SetDevice
解决方案:
在 _destructor_process_group() 清理 Python 全局 PG 状态之前,先显式 shutdown 所有现存 process group
# 【资料变更】
> 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”
# 【接口变更】
> 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”
# 【功能验证】
> 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\
> 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图
# 【CheckList】
> PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]
- [ ] 代码注释完备,正确记录错误日志
- [ ] 代码实现进行了返回值、空指针等校验
- [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等
- [ ] PR持续集成流水线(CI)执行通过,代码检查无异常
See merge request: Ascend/pytorch!35049 | 1 天前 |