Skip to content

测试问题修复:🐛 修复 engineV4 终态日志 torch_error / paddle_cuda 重叠问题#678

Merged
cangtianhuang merged 4 commits into
PFCCLab:mainfrom
cangtianhuang:dev
Jul 14, 2026
Merged

测试问题修复:🐛 修复 engineV4 终态日志 torch_error / paddle_cuda 重叠问题#678
cangtianhuang merged 4 commits into
PFCCLab:mainfrom
cangtianhuang:dev

Conversation

@cangtianhuang

Copy link
Copy Markdown
Collaborator

🧭 背景

PaddleAPITest 的 accuracy_stable 测试中,paddle.nn.functional.embedding 在 0-size weight 场景下触发 CUDA illegal memory access。该错误发生在 torch backward 阶段(由 _for_test_check_cuda_error() 检测到),tester 层正确将其归为 torch_error。但 engineV4 主进程收到 worker crash 后,对 exitcode=99 一律写入 paddle_cuda,导致同一 config 同时出现在 torch_errorpaddle_cuda 两份日志中,最终统计数据产生交集。

engineV2 早已通过 FATAL_TORCH_EXIT_CODE(97) 区分 torch 阶段与 paddle 阶段的 CUDA fatal error,engineV4 缺失这一逻辑。

🛠️ 实现方案

将 engineV4 的 worker 异常处理对齐 engineV2 逻辑:先查询 terminal_log_type(tester 层已写入的终态类型),再结合错误消息中的 cuda/oom markers 决定 exit code。torch 阶段写入的 torch_error + CUDA error → FATAL_TORCH_EXIT_CODE(97);paddle 阶段 → FATAL_CUDA_EXIT_CODE(99)。主进程根据 exit code 分类写入对应终态日志。

同时删除 base.pyreport_runtime_error 的强制覆盖逻辑(原来 default_log_type == "torch_error" 时会覆盖 classify_runtime_error 的结果),使分类结果始终以实际错误特征为准。

aggregate_logs(end=True) 结尾新增互斥性 assert,如有任何 config 出现在多种终态日志中立即暴露问题。

🔧 主要变更

1. engineV4 CUDA 归因对齐 engineV2

引入 FATAL_CUDA_EXIT_CODE/FATAL_OOM_EXIT_CODE/FATAL_TORCH_EXIT_CODE 常量。Worker 异常处理改为:读取 terminal_log_type + 匹配 cuda/oom markers → 选择对应 exit code → 写 checkpoint → os._exit。主进程根据 exit code 写入 paddle_cuda/oom/torch_error

2. 移除 report_runtime_error 的强制覆盖

删除 elif default_log_type == "torch_error" and log_type != "oom": log_type = "torch_error"classify_runtime_error 的明确结果不再被覆盖。

3. 终态日志互斥性 assert

aggregate_logs(end=True) 在返回 log_counts 前扫描所有终态日志文件,发现同一 config 出现在多种类型中时 assert 并打印诊断信息。不做任何去重——纯粹检测。

4. 统计输出数字右对齐

print_log_info 中所有数值使用 {:>8} 格式化,对齐更易读。

📁 改动文件

PaddleAPITest/
├── engineV4.py                     # 引入 exit code 常量;worker 异常分类对齐 engineV2;主进程按 exit code 归因
├── tester/
│   ├── base.py                     # 删除 report_runtime_error 中 torch_error 强制覆盖逻辑
│   └── api_config/
│       └── log_writer.py           # 互斥性 assert;print_log_info 数字右对齐

✅ 验证

print_log_info 输出格式示例如下:

==================================================
               Test Case Statistics
==================================================
Pending cases                 :    19100
Tested cases                  :    19100
Pass cases                    :    19097
Skip cases                    :        0
Paddle issue cases            :        3
Test issue cases              :        0
Retest cases                  :        0
--------------------------------------------------
Log Type Breakdown:
  checkpoint                  :    19100
  pass                        :    19097
  paddle_cuda                 :        3
==================================================

@cangtianhuang
cangtianhuang merged commit 3ac5d95 into PFCCLab:main Jul 14, 2026
1 check passed
@paddle-bot

paddle-bot Bot commented Jul 14, 2026

Copy link
Copy Markdown

Thanks for your contribution!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant