Skip to content

APITest 功能新增:引入更高效的 GPU 任务调度与并行执行引擎 engineV4#638

Merged
cangtianhuang merged 3 commits into
PFCCLab:mainfrom
cangtianhuang:fix/gpu-scheduling
Jun 8, 2026
Merged

APITest 功能新增:引入更高效的 GPU 任务调度与并行执行引擎 engineV4#638
cangtianhuang merged 3 commits into
PFCCLab:mainfrom
cangtianhuang:fix/gpu-scheduling

Conversation

@cangtianhuang

Copy link
Copy Markdown
Collaborator

📝 主要内容

相比 engineV2 的核心改进

1. 架构升级:从进程池到任务队列

engineV2 采用 Pebble 的 ProcessPool + 动态负载均衡方案,engineV4 引入每工作进程独立队列架构(WorkerPool + per-worker queues)。改进包括:

  • 替代 ProcessPool:自主实现工作者生命周期管理,提供更细粒度的控制
  • 任务调度:从被动负载均衡 → 主动轮询式派发,消除动态分配开销
  • 内存效率:避免 ProcessPool 的内部队列管理开销,降低内存占用

2. 增强的容错能力

  • 独立看门狗线程(Watchdog):实时监测工作者状态,而非依赖进程池的被动检测
  • 分类化退出码
    • exit(99):致命 CUDA 错误 → 自动重启工作者
    • exit(98):OOM 错误 → 自动重启工作者
    • exit(1):测试失败 → 标记为错误,保留工作者
  • 任务排队恢复:工作者重启期间的待执行任务进入 pending_dispatch 队列,确保无任务丢失

3. 智能内存管理

  • 多设备支持:NVIDIA GPU(NVML)/ XPU(xpu-smi)/ Iluvatar(ixsmi)自动检测
  • 实时内存快照:缓存 TTL 机制减少频繁查询开销(支持 XPU/Iluvatar)
  • 更严格的内存检查:单个任务启动前循环等待(max 30×10s),确保有充足显存

4. 运行时可观测性优化

  • ACK 消息:工作者收到任务即刻回复 ACK,准确记录任务开始时间
  • 事件驱动:状态转变(ready/ack/done/error/timeout/crashed)清晰可追踪
  • 实时进度:支持 --show_runtime_status 选项,大规模测试可控制输出频率

新增功能

1. 启动脚本强化

新增 run-v4.sh 提供运维友好的三大操作:

./run-v4.sh              # 后台启动
./run-v4.sh --status     # 查看运行状态(显示 PGID、worker 数、运行时长)
./run-v4.sh --stop       # 终止进程组(支持 PGID 级别的群杀)

性能对标

指标 engineV2 engineV4 改进
架构复杂度 依赖 Pebble 原生 Python 可维护性 ↑
超时检测 被动(进程池内置) 主动(看门狗线程) 精度 ↑
内存管理 粗粒度(批次处理) 细粒度(任务级等待) 稳定性 ↑

向后兼容性

  • 完全保留 engineV2 的所有命令行参数
  • 支持所有原有测试模式(accuracy、paddle_only、paddle_cinn 等)
  • 已有的测试配置文件无需修改

@cangtianhuang cangtianhuang merged commit 4ae3235 into PFCCLab:main Jun 8, 2026
1 check passed
@cangtianhuang cangtianhuang deleted the fix/gpu-scheduling branch June 8, 2026 08:44
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