Skip to content

feat: inject HCCL OOM after warmup - #2

Draft
yjyang62 wants to merge 6 commits into
pta_oom_2.9.2from
cursor/hccl_oom-b9b0
Draft

feat: inject HCCL OOM after warmup#2
yjyang62 wants to merge 6 commits into
pta_oom_2.9.2from
cursor/hccl_oom-b9b0

Conversation

@yjyang62

@yjyang62 yjyang62 commented Jun 12, 2026

Copy link
Copy Markdown
Owner

【合入来源】

  • 需求
  • 问题单
  • issue/工单
  • 重构优化
  • 资料更新

【修改方案】

  1. ProcessGroupHCCL.cpp 中新增 HCCL OOM 故障注入计数器,默认在非 ACLGraph capture 状态下按 HCCL API 调用次数触发。
  2. HCCL 注入点覆盖 collective、coalesced collective 和 point-to-point 的公共调度路径。当前实现已从 communicator 获取后的“调用前注入”移动到实际 HCCL API/OpCommand 调用并通过 HCCL_CHECK_ERROR 后再注入,使故障更接近真实 HCCL API 调用边界后的 OOM 上报;P2P coalescing 场景会先执行 hcclGroupEnd,避免人为留下未闭合 group。
  3. HCCL 触发时按要求抛出 TORCH_CHECK_WITH(OutOfMemoryError, false, retmsg.c_str());,错误文本包含 Failed to allocate memoryHCCL_E_OOM 错误码。支持通过 HCCL_OOM_TRIGGER_COUNT 调整触发阈值,设置为小于等于 0 可关闭该注入。
  4. 修复直接 CMake 构建时 torch_npu/csrc/aten/NPUNativeFunctions.h 未生成导致 CopyFromAndResizeKernelNpu.cpp 编译失败的问题:当 CMake 配置阶段发现生成头不存在时,调用现有 generate_code.sh 生成 ATen binding 文件,再继续收集/编译源文件。
  5. 将 PTA OOM 从内部 allocator malloc 的无差别计数,改为普通 tensor allocate 路径上的候选分配计数,触发前不进入真实 allocator 分配流程,降低影响面并便于上层恢复。
  6. PTA OOM 收窄触发场景但默认全卡参与:默认不自动开启,必须显式 PTA_OOM_ENABLE=1;开启后默认所有 rank、所有 device 都可触发;默认只统计非 graph capture、size >= 64MiB 的普通 tensor 分配,并且只触发一次。可通过 PTA_OOM_RANKPTA_OOM_DEVICE 显式收窄到单 rank/单卡。
  7. PTA OOM 控制项:PTA_OOM_ENABLE 显式开启注入,PTA_OOM_TRIGGER_COUNT 控制候选分配计数阈值,PTA_OOM_MIN_ALLOC_BYTES 控制最小分配大小,PTA_OOM_MAX_ALLOC_BYTES 控制最大分配大小,PTA_OOM_RANK 限定 rank,PTA_OOM_DEVICE 限定 NPU device。

【资料变更】

不涉及

【接口变更】

不涉及正式接口变更;新增仅用于故障注入分支的环境变量 HCCL_OOM_TRIGGER_COUNTPTA_OOM_ENABLEPTA_OOM_TRIGGER_COUNTPTA_OOM_MIN_ALLOC_BYTESPTA_OOM_MAX_ALLOC_BYTESPTA_OOM_RANKPTA_OOM_DEVICE

【功能验证】

  • 已执行 git diff --check,无空白格式问题。
  • 已执行 git diff --check HEAD~1..HEAD 验证最新 PTA OOM 默认全 rank 触发调整提交。
  • 尝试执行 CMake configure;当前容器缺少 Python torch 模块以及 C++ 链接所需 libstdc++,配置在编译器自检阶段失败,未能运行完整 CMake 构建。
  • 当前环境未运行依赖 NPU/HCCL 的分布式实机用例。

【CheckList】

  • 代码注释完备,正确记录错误日志
  • 代码实现进行了返回值、空指针等校验
  • PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等
  • PR持续集成流水线(CI)执行通过,代码检查无异常
Open in Web Open in Cursor 

cursoragent and others added 6 commits June 12, 2026 08:38
Co-authored-by: yjyang62 <yjyang62@users.noreply.github.com>
Co-authored-by: yjyang62 <yjyang62@users.noreply.github.com>
Co-authored-by: yjyang62 <yjyang62@users.noreply.github.com>
Co-authored-by: yjyang62 <yjyang62@users.noreply.github.com>
Co-authored-by: yjyang62 <yjyang62@users.noreply.github.com>
Co-authored-by: yjyang62 <yjyang62@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants