Skip to content

测试修复:🐛 修复测试运行互斥、错误阶段记录与 CASE 日志恢复 - #710

Merged
cangtianhuang merged 11 commits into
PFCCLab:mainfrom
cangtianhuang:dev
Aug 18, 2026
Merged

测试修复:🐛 修复测试运行互斥、错误阶段记录与 CASE 日志恢复#710
cangtianhuang merged 11 commits into
PFCCLab:mainfrom
cangtianhuang:dev

Conversation

@cangtianhuang

Copy link
Copy Markdown
Collaborator

背景

本 PR 将 dev 合入 upstream/main 以来的测试基建修改统一提交,覆盖后台任务互斥、测试阶段错误分类、CASE 日志持久化恢复和 take_along_axis 输入生成。原实现按脚本名生成 PID 文件,多个入口可能同时操作同一输出目录;CASE 日志在进程中断或重试时可能留下未闭合记录;错误日志中的阶段信息也不统一,影响定位和复测分类。

问题定位

  • PID 文件按脚本名区分,无法阻止不同脚本同时写入同一输出目录,停止和自然退出清理之间也存在竞态
  • take_along_axis 的函数入口参数名为 arr,Tensor method 绑定后接收者参数为 x,旧规则直接读取 arr.shape 会触发 NoneType 异常
  • worker 日志使用文件尾部作为聚合依据时,主进程或 worker 中断可能把未闭合 CASE 发布到 log_inorder.log
  • 结果日志阶段名称由调用方自由拼接,输入、Paddle、Torch、同步和比较阶段的错误分类不一致

实现方案

后台任务以实际 output.log_dir 作为任务身份,使用同目录 PID 文件和 flock 锁串行化启动、停止、状态查询和 PID 清理。CASE 日志继续使用每 worker 一个临时文件和增量 offset;完整 CASE_END 后执行 fsync,聚合通过 .log_inorder.build.inorder_state.json 保存安全 offset,使用发布临时文件原子替换最终日志。只有最终派生输出发布成功后才清理 source,主进程重启时可丢弃未闭合尾部并恢复完整 CASE。

测试阶段统一使用 Stage 类型和预定义阶段常量,保留错误类型与执行阶段的独立性。输入规则通过 arr/x 回退兼容函数和 Tensor method 两种绑定形式。

主要变更

1. 输出目录级任务互斥

run.pyrun-example.shtest_pipeline/V4/*.sh 统一使用 output.log_dir/.paddleapitest.pid 及对应锁文件,增加进程组停止等待、旧 PID 保护和自然退出清理保护。CLI 文档与 run 配置 schema 同步移除脚本自定义 pid_file

2. CASE 日志持久化与恢复

tester/reporting/log_aggregation.py 增加安全 build、source offset、fsync 和原子发布流程,支持首次 baseline、主进程中断恢复、worker crash synthetic end 和 cleanup 重试幂等。tester/reporting/log_runtime.pylog_worker.py 负责结果分片和 CASE_END 的落盘。

3. 统一错误阶段和结果日志

tester/reporting/log_schema.py 定义输入、Paddle、Torch、同步、比较和内存预检查阶段;accuracy、paddle-only、稳定性和性能 tester 使用统一阶段名称,删除旧的 Paddle error dismiss 兼容路径,并扩展结果日志结构化字段。

4. 输入生成规则修复

tester/input_generation/generation_rules.py 兼容 paddle.take_along_axispaddle.Tensor.take_along_axis 的参数绑定差异。

改动文件

类别 文件 功能说明
任务控制 run.py, run-example.sh, test_pipeline/V4/*.sh 输出目录级锁、PID 生命周期和后台任务管理
配置文档 docs/CLI_REFERENCE.md, test_pipeline/run_config.schema.json, test_pipeline/run_config.yaml CLI 和运行配置约束同步
日志恢复 tester/reporting/log_aggregation.py, tester/reporting/log_runtime.py, tester/reporting/log_worker.py CASE source、offset、fsync、原子发布和恢复
日志结构 tester/reporting/log_schema.py, tester/reporting/log_comparison.py 统一阶段类型和结构化错误输出
测试执行 tester/base.py, tester/accuracy.py, tester/accuracy_stable.py, tester/paddle_only.py, tester/paddle_cinn_vs_dygraph.py, tester/paddle_device_vs_cpu.py, tester/paddle_device_vs_gpu.py, tester/paddle_gpu_performance.py, tester/paddle_torch_gpu_performance.py, tester/torch_gpu_performance.py 统一阶段传递和错误分类
输入生成 tester/input_generation/generation_rules.py 修复 method 参数绑定兼容

@cangtianhuang
cangtianhuang merged commit a515a86 into PFCCLab:main Aug 18, 2026
1 check passed
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.

1 participant