菜单

CI/CD 流水线

相关源文件

本文档解释了 YOLOv5 开发中使用的持续集成和持续部署 (CI/CD) 工作流程。它涵盖了 GitHub Actions 工作流程、测试矩阵和开发实践,以确保 YOLOv5 代码库中代码的质量和可靠性。

1. CI/CD 概述

YOLOv5 使用 GitHub Actions 作为其主要的 CI/CD 平台,以自动化测试、代码质量检查和存储库维护。CI/CD 流水线通过以下方式帮助维护代码质量:

  • 在多个操作系统和 Python 版本上运行自动化测试
  • 对模型性能进行基准测试以捕获回归
  • 强制执行代码格式和文档标准
  • 管理贡献者许可协议
  • 通过自动化的问题和 PR 管理来保持存储库的整洁

2. GitHub Actions 工作流程

YOLOv5 实现了多个 GitHub Actions 工作流程,这些工作流程处理开发生命周期的不同方面

来源: .github/workflows/ci-testing.yml .github/workflows/format.yml .github/workflows/stale.yml .github/workflows/merge-main-into-prs.yml .github/workflows/cla.yml

2.1. 主要 CI 测试工作流程

YOLOv5 的 CI/CD 系统的核心是定义在 .github/workflows/ci-testing.yml 中的 CI 测试工作流程中定义的。此工作流程在每次推送到 master、针对 master 的拉取请求以及通过计划的每日 cron 作业时运行。

来源: .github/workflows/ci-testing.yml16-151

CI 测试工作流程包含三个主要作业:

  1. 基准测试:测试模型在基准测试上的性能
  2. 测试:在不同环境中验证功能
  3. 摘要:报告结果并根据需要发送通知

测试矩阵

YOLOv5 的 CI 使用测试矩阵策略来确保跨不同环境的兼容性

作业操作系统Python 版本模型目的
基准测试Ubuntu3.11yolov5n性能测试
测试Ubuntu3.11, 3.8*yolov5n功能测试
测试Windows3.11yolov5n功能测试
测试macOS3.11yolov5n功能测试

* Python 3.8 专门用于与 torch 1.8.0 (最低支持版本) 进行测试

来源: .github/workflows/ci-testing.yml18-63

2.2. 代码质量工作流程

格式化工作流程(.github/workflows/format.yml) 确保所有拉取请求都遵循 YOLOv5 的编码标准

  • 自动格式化 Python 代码和文档字符串
  • 格式化 Markdown、YAML、JSON 和 CSS 文件
  • 检查拼写
  • 为问题和 PR 添加适当的标签
  • 可以使用 GPT4o 生成 PR 摘要

此工作流程在问题和拉取请求事件上运行,有助于保持一致的代码质量。

来源: .github/workflows/format.yml1-59

2.3. 贡献者许可协议工作流程

CLA 工作流程(.github/workflows/cla.yml) 管理贡献者许可协议流程

  • 在拉取请求事件和特定问题评论上运行
  • 检查 PR 作者是否已签署 Ultralytics CLA
  • 在需要时添加评论请求 CLA 签名
  • CLA 签名后更新 PR 状态

此工作流程确保对 YOLOv5 的所有贡献都符合许可要求。

来源: .github/workflows/cla.yml1-46

3. 维护工作流程

YOLOv5 采用其他工作流程来帮助维护存储库

3.1. 过期问题管理

过期工作流程(.github/workflows/stale.yml) 自动管理不活跃的问题和 PR

  • 通过计划的每日 cron 作业运行
  • 在 30 天无活动后将问题标记为过期
  • 在另外 10 天后关闭过期问题
  • 在 90 天无活动后将 PR 标记为过期
  • 在另外 30 天后关闭过期 PR
  • 豁免具有特定标签("documentation"、"tutorial"、"TODO")的问题

这有助于问题跟踪器专注于活动开发。

来源: .github/workflows/stale.yml1-48

3.2. PR 同步

merge-main 工作流程(.github/workflows/merge-main-into-prs.yml) 使 PR 与主分支保持同步

  • 可以通过工作流程分派手动触发
  • 识别落后于默认分支的 PR
  • 尝试自动更新这些 PR
  • 报告每个 PR 的成功或失败

这有助于通过使 PR 与最新更改保持同步来防止合并冲突。

来源: .github/workflows/merge-main-into-prs.yml1-73

4. CI/CD 组件和依赖项

CI/CD 流水线依赖于 `requirements` 文件中定义的特定依赖项

来源: requirements.txt1-50

5. CI 测试流程

主要的 CI 测试工作流程测试 YOLOv5 的核心功能

5.1. 基准测试

基准测试作业使用特定指标评估模型性能

python benchmarks.py --data coco128.yaml --weights yolov5n.pt --img 320 --hard-fail 0.29
python benchmarks.py --data coco128-seg.yaml --weights yolov5n-seg.pt --img 320 --hard-fail 0.22

`--hard-fail` 参数设置了模型必须满足的最低性能阈值。

来源: .github/workflows/ci-testing.yml38-42

5.2. 功能测试

测试作业验证核心功能

  1. 检测管道:

    • 训练:train.py --imgsz 64 --batch 32 --weights yolov5n.pt --cfg yolov5n.yaml --epochs 1
    • 验证:val.py --imgsz 64 --batch 32 --weights yolov5n.pt
    • 推理:detect.py --imgsz 64 --weights yolov5n.pt
    • Hub 集成:hubconf.py --model yolov5n
    • 模型构建:models/yolo.py --cfg yolov5n.yaml
    • 导出:export.py --weights yolov5n.pt --img 64 --include torchscript
  2. 分割管道:

    • 用于分割模型的训练、验证、预测和导出
  3. 分类管道:

    • 用于分类模型的训练、验证、预测和导出

来源: .github/workflows/ci-testing.yml83-132

6. 设置本地开发环境

为了确保您的代码在提交 PR 之前通过 CI 检查

  1. 安装 CI 中使用的相同依赖项

  2. 在本地运行验证测试

  3. 检查您的代码是否遵循 YOLOv5 的格式标准。

来源: .github/workflows/ci-testing.yml69-133

7. CI/CD 状态监控

您可以监控 YOLOv5 的 CI/CD 流水线的状态

  1. 通过查看存储库 README 顶部的徽章来查看最新的 CI 状态。
  2. GitHub 存储库的 Actions 选项卡 中查看所有工作流程的详细状态。
  3. 查看 PR 上的 CI 状态检查,以识别需要解决的任何问题。

来源: .github/workflows/format.yml54-59

8. 总结

YOLOv5 的 CI/CD 流水线可确保代码质量、跨环境兼容性以及核心功能的持续测试。自动化工作流程通过提供对更改的快速反馈并在整个代码库中保持一致的标准,使开发和贡献更加顺畅。