已合并
feat: detect NPU task queue poisoning and restart worker for remaining cases #40439
kerer-sk创建于 7月8日
feat: detect NPU task queue poisoning and restart worker for remaining cases #40439
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 kerer-sk 的贡献)7月8日 关联了issue:fix: NPU 测试 worker 进程毒化后无法恢复,导致同 worker 后续用例全部静默失败
atomgit-bot
7月8日 评论:
7月8日 评论:
变更摘要
此 PR 针对 NPU 测试分片执行场景,新增了两层毒化检测与 worker 重启机制:当 worker 进程因致命算子错误导致 NPU 设备上下文被毒化后,通过签名匹配(Layer 1)和探针计算(Layer 2)快速识别毒化状态,随后 worker 以特殊退出码 70 干净退出,父进程则自动重启新 worker 继续执行剩余用例,避免后续用例静默失败污染测试报告。
主要改动
- 新增毒化检测模块:在
.github/scripts/run_npu_test_shard.py中定义了NPU_QUEUE_FATAL_EXIT_CODE=70常量、NPU_QUEUE_FATAL_SIGNATURES致命错误签名列表,以及_check_fatal_npu_error()(Layer 1 签名匹配)和_check_npu_poisoned()(Layer 2 探针计算)两个检测函数,覆盖算子错误、硬件故障和 CANN 运行时错误等多种毒化场景。 - Worker 端两层毒化检测与干净退出:在
_worker_main中,每个用例执行失败或出错后依次调用 Layer 1 签名匹配和 Layer 2 探针检测,命中则通过os._exit(70)在用例间隙干净退出,避免当前用例被标记为执行中。 - 父进程识别并重启新 Worker:在
_execute_worker_batch中新增returncode == NPU_QUEUE_FATAL_EXIT_CODE分支,父进程识别后重启新 worker 处理所有未上报的剩余用例,不丢弃任何一个未执行用例。 - 提取
message变量复用:在_execute_worker_batch中将case_result.get("message", "")提取为局部变量message,用于结果构建和日志输出,减少重复取值。


ascend-robot
7月8日 评论:
7月8日 评论:
atomgit-bot
7月8日 评论:
7月8日 评论:
此处折叠了61条消息 查看更多
梁松伟
7月15日 评论:
7月15日 评论:
/approve


7月15日 添加了label:approvedlgtm
7月15日 关闭了关联的issue
7月15日 合入了pull request
ascend-robot
7月15日 评论:
7月15日 评论:
流水线 pytorch_gitcode_PR_multiVersion#12538 [ commitID:96a8a4e6 ] 已完成


变更说明
NPU 测试分片执行中,worker 进程触发致命算子错误后设备上下文被毒化,后续用例全部静默失败污染测试报告。本 PR 增加两层毒化检测 + worker 干净退出 + 父进程重启机制,确保毒化后剩余用例由新 worker 正确执行。
变更内容
.github/scripts/run_npu_test_shard.py:NPU_QUEUE_FATAL_EXIT_CODE=70、致命错误签名列表、_check_fatal_npu_error()(Layer 1 签名匹配)、_check_npu_poisoned()(Layer 2 探针计算)_execute_worker_batch:提取message变量复用;新增returncode==70分支,父进程识别后重启新 worker 处理所有未上报用例_worker_main:用例失败后两层检测,命中则os._exit(70)干净退出触发重启关联 Issue
Fixes https://gitcode.com/Ascend/pytorch/issues/2651