执行摘要
本次PR针对FastDeploy仓库的CI测试流程进行优化,通过引入单GPU并行执行和日志隔离机制,旨在提升GPU利用率和缩短CI周转时间,同时改善测试失败时的调试效率。变更覆盖CI工作流、测试执行脚本和多个e2e测试文件,影响中等,值得关注测试基础设施的工程师参考。
功能与动机
根据PR作者描述,当前单元测试大多顺序执行,导致"GPU利用率低和CI周转时间长",且测试失败时"日志分散,难以定位,增加调试成本"。因此,本次优化的核心目标是解决CI效率低下和日志管理混乱的问题,提升开发体验。
实现拆解
实现分为三个主要部分:
- CI工作流集成:在
.github/workflows/_unit_test_coverage.yml中新增日志上传步骤,当测试失败时自动打包日志并上传至存储,便于后续访问。
- 测试执行逻辑:在
scripts/coverage_run.sh中添加classify_tests函数,基于规则(如文件路径、内容关键词)将测试分类为多GPU(需顺序执行)和单GPU(可并行)。同时,通过run_test_with_logging函数实现单GPU测试的并行分片执行和多GPU测试的顺序运行,并为每个测试创建独立日志目录(基于FD_LOG_DIR环境变量)。
- 测试文件适配:修改多个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测试,反映仓库对测试基础设施的持续投入。
整体趋势表明,仓库正通过多项优化提升测试效率和可维护性。
参与讨论