已关闭
[Bug-Report|缺陷反馈]: build_ci默认并发度过高导致高核低内存环境编译OOM #3042
陈展熹创建于 8月19日关闭于 26 天前
8月19日 issue类型由 任务 改变为 缺陷
8月19日 将 chengding888 设为负责人
8月19日 添加了label:bug-report
袁野
8月19日 评论:
8月19日 评论:
感谢反馈
@chengding888 请处理下,谢谢


chengding888
8月19日 评论:
8月19日 评论:
好的


28 天前 关联了pull request:fix(build_ci): auto-derive job_num from CPU count and cgroup memory
chengding888
26 天前 评论:
26 天前 评论:
已修复,参考关联PR


26 天前 issue状态由 待办的 改变为 已完成
26 天前 关闭了 issue
26 天前 删除了关联的pull request:fix(build_ci): auto-derive job_num from CPU count and cgroup memory
26 天前 删除了关联的pull request:fix(build_ci): auto-derive job_num from CPU count and cgroup memory
Describe the current behavior / 问题描述 (Mandatory / 必填)
build_ci.py 的 BuildParam._get_job_num() 仅根据 multiprocessing.cpu_count() 计算默认编译并发度:
当前容器可见128个逻辑CPU,因此默认得到 Job Num 116,并生成 cmake --build ... -j 116。该计算未考虑容器cgroup内存上限;当前环境内存上限为32 GiB,大量cc1plus进程并行启动后触发OOM,导致构建失败。
此外,tools/scripts/run_operation_test_with_config.py 通过 TestCaseLauncher.compile_if_need() 调用build_ci.py时未提供并发参数,也未向测试入口暴露job_num,使用该测试入口时会直接采用过高的默认并发度。
Environment / 环境信息 (Mandatory / 必填)
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
在可见128个逻辑CPU、cgroup内存限制32 GiB的容器中检出PyPTO代码。
不指定-j参数,通过operation回归入口触发构建:
构建日志显示默认并发度为116:
多个互不相关的C++翻译单元同时被系统终止,构建失败。
Describe the expected behavior / 预期结果 (Mandatory / 必填)
默认并发度应避免只依据CPU数量决定,建议至少满足以下一种方式:
在上述32 GiB环境中使用-j8或-j16时,应能够避免因并发过高触发OOM。
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
同一轮构建中多个无关目标同时出现Killed signal;cgroup记录oom_kill 863,符合并发编译触发内存上限的现象。
Special notes for this issue/备注 (Optional / 选填)
去重检索未发现cann/pypto中已有默认job_num过高或高核低内存环境编译OOM的同类Issue。现有Issue #128是CANN 8.5 include路径缺失导致的编译失败,与本问题不同。