Prhub

#7085 [CI] Optimize test execution with single-GPU parallelism

PaddlePaddle/FastDeploy · 作者 EmmonsCurse · 合并时间 2026-04-01 14:18

分析状态 已生成
文件变更 12提交数 6 · 评论 3
代码增减 +377 / -99
CI test Optimization Logging

执行摘要

引入单 GPU 并行测试和日志收集,优化 CI 效率。

根据PR body描述:"Current unittest execution runs mostly in a sequential manner, leading to low GPU utilization and long CI turnaround time. In addition, when tests fail, logs are scattered and not easy to locate, which increases debugging cost." 核心动机是解决CI测试执行效率低和日志调试困难的问题。

建议关注CI优化和测试基础设施的工程师精读此PR,特别是scripts/coverage_run.sh中的classify_testsrun_test_with_logging函数,学习如何设计并行测试执行和日志隔离方案,同时注意分类逻辑的潜在风险。

讨论亮点

Review评论为空,没有实质性技术讨论,仅有两名reviewer(ZhangYulongg和DDDivano)批准。因此,本PR未经过深度设计权衡或争议讨论。

实现拆解

实现分为三个层次:1. CI工作流层:在.github/workflows/_unit_test_coverage.yml中添加日志上传步骤,当测试失败时打包并上传日志文件。2. 测试执行层:在scripts/coverage_run.sh中新增classify_tests函数,基于文件路径和内容规则将测试分类为多GPU或单GPU;添加run_test_with_logging函数实现并行执行和日志隔离,单GPU测试分片并行,多GPU测试顺序运行以避免资源冲突。3. 测试文件层:修改多个e2e测试文件(如tests/e2e/test_EB_Lite_serving.py等)的日志路径,使用FD_LOG_DIR环境变量统一管理日志目录,确保日志隔离。

文件 模块 状态 重要度
.github/workflows/_unit_test_coverage.yml CI Infrastructure modified 4.0
scripts/coverage_run.sh Testing Execution modified 8.0
tests/e2e/test_EB_Lite_serving.py E2E Testing modified 3.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

classify_tests run_test_with_logging

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

技术风险包括:1. 并行执行风险:单GPU测试并行化可能引入竞争条件,特别是在资源敏感的测试中,如端口占用或GPU内存冲突。2. 分类逻辑不完善:scripts/coverage_run.sh中的classify_tests函数依赖正则表达式和grep规则,可能误判测试类型,导致多GPU测试被错误并行执行,引发资源冲突或测试失败。3. 日志路径兼容性:修改了多个测试文件的日志路径为基于FD_LOG_DIR环境变量,如果环境变量未正确设置或测试依赖旧路径,可能导致日志写入失败或测试断言错误。4. 核心脚本变更大:scripts/coverage_run.sh有大量代码改动(311行新增,68行删除),增加了引入bug的风险,可能影响整个CI测试流程的稳定性。

影响范围和程度:1. 对用户影响:CI用户(主要是开发者)将体验更快的测试执行时间和改进的日志调试能力,减少调试成本。2. 对系统影响:CI系统GPU利用率提升,整体测试周转时间缩短,但并行化可能增加系统负载和复杂性。3. 对团队影响:开发效率提升,测试失败时能快速定位问题,但需要团队适应新的日志结构和可能的测试执行行为变化。影响程度为中等,直接作用于CI基础设施和测试流程。

并行执行风险 分类逻辑不完善 日志路径变更

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

本次PR针对FastDeploy仓库的CI测试流程进行优化,通过引入单GPU并行执行和日志隔离机制,旨在提升GPU利用率和缩短CI周转时间,同时改善测试失败时的调试效率。变更覆盖CI工作流、测试执行脚本和多个e2e测试文件,影响中等,值得关注测试基础设施的工程师参考。

功能与动机

根据PR作者描述,当前单元测试大多顺序执行,导致"GPU利用率低和CI周转时间长",且测试失败时"日志分散,难以定位,增加调试成本"。因此,本次优化的核心目标是解决CI效率低下和日志管理混乱的问题,提升开发体验。

实现拆解

实现分为三个主要部分:

  1. CI工作流集成:在.github/workflows/_unit_test_coverage.yml中新增日志上传步骤,当测试失败时自动打包日志并上传至存储,便于后续访问。
  2. 测试执行逻辑:在scripts/coverage_run.sh中添加classify_tests函数,基于规则(如文件路径、内容关键词)将测试分类为多GPU(需顺序执行)和单GPU(可并行)。同时,通过run_test_with_logging函数实现单GPU测试的并行分片执行和多GPU测试的顺序运行,并为每个测试创建独立日志目录(基于FD_LOG_DIR环境变量)。
  3. 测试文件适配:修改多个e2e测试文件(例如tests/e2e/test_EB_Lite_serving.py),将硬编码日志路径替换为使用FD_LOG_DIR环境变量,确保日志隔离和一致性。

评论区精华

本PR未产生实质性review讨论,仅有两名reviewer(ZhangYulongg和DDDivano)批准,无技术争议或设计权衡记录。

风险与影响

风险

  • 并行执行可能引发竞争条件,特别是对于端口或GPU内存敏感的测试。
  • 分类逻辑依赖正则和grep规则,存在误判风险,可能导致资源冲突或测试失败。
  • 日志路径变更可能破坏现有测试的日志依赖,需确保环境变量正确设置。
  • 核心脚本scripts/coverage_run.sh改动较大,增加bug引入概率。

影响

  • 正面:CI测试时间缩短,GPU利用率提升,调试效率改善。
  • 负面:需监控并行执行稳定性和日志兼容性,团队需适应新流程。

关联脉络

从近期历史PR看,相关PR包括:

  • PR #7098(日志参数优化):共享Logging标签,聚焦日志输出改进,与本PR的日志收集形成协同。
  • PR #7104(CI跳过逻辑调整):同属CI领域,优化CI触发机制,与本PR的测试执行优化互补。
  • PR #6731(单元测试补充):涉及测试覆盖和CI测试,反映仓库对测试基础设施的持续投入。
    整体趋势表明,仓库正通过多项优化提升测试效率和可维护性。

参与讨论