本页面记录了 Transformers 库中使用的持续集成/持续部署 (CI/CD) 基础设施和通知系统。它涵盖了测试如何自动运行、结果如何报告以及通知如何发送给团队成员。
有关构建系统和依赖项管理的信息,请参阅构建系统。有关测试框架本身的信息,请参阅测试框架。
Transformers 库结合使用 GitHub Actions 和 CircleCI 作为其 CI/CD 管道。该系统旨在:
来源:.github/workflows/self-scheduled.yml1-570 .circleci/config.yml1-139 utils/tests_fetcher.py1-50 utils/notification_service.py1-100
Transformers 库根据不同目的使用几种不同的 CI 工作流:
当创建或更新拉取请求时,CircleCI 会被触发以运行测试。其过程为:
config.yml 工作流被触发fetch_tests 任务根据更改的文件确定要运行的测试来源:.circleci/config.yml1-139 .circleci/create_circleci_config.py1-429 utils/tests_fetcher.py1-565
对于更密集的测试,尤其是需要 GPU 的测试,该库在 AWS 上使用自托管运行器。这些运行器用于:
ci_* 或 ci-*)时自托管运行器按机器类型组织:
aws-g4dn-4xlarge-cache:单 GPU 机器aws-g4dn-12xlarge-cache:多 GPU 机器来源:.github/workflows/self-scheduled.yml1-570 .github/workflows/self-push.yml1-500 .github/workflows/self-scheduled-amd-mi250-caller.yml1-60
CI 系统的一个关键特性是它能够根据代码更改智能选择要运行的测试。这通过 tests_fetcher.py 脚本实现。
来源:utils/tests_fetcher.py16-565
当太多模型受到更改影响时,系统会优先测试“重要”模型,其中包括:
这在 tests_fetcher.py 文件中的 IMPORTANT_MODELS 列表中定义。
来源:utils/tests_fetcher.py76-104
Transformers 库有一个精密的通知系统,可以将测试结果报告到 Slack 频道。这通过 notification_service.py 脚本实现。
测试结果根据测试类型报告到不同的 Slack 频道:
#transformers-ci-daily-models:模型测试#transformers-ci-daily-pipeline-torch:PyTorch 管道测试#transformers-ci-daily-pipeline-tf:TensorFlow 管道测试#transformers-ci-daily-examples:示例测试#transformers-ci-daily-training:训练和 FSDP 测试#transformers-ci-daily-quantization:量化测试#transformers-ci-daily-docs:文档测试#transformers-ci-daily-amd:AMD 专用测试来源:utils/notification_service.py1-1000 .github/workflows/slack-report.yml1-94 .github/workflows/self-scheduled-caller.yml1-132
Slack 消息包括:
示例消息结构
Daily CI
There were 15 failures, out of 1250 tests.
The suite ran in 3h45m12s.
The following categories had failures:
Single | Multi | Category
3 | 2 | PyTorch
1 | 0 | TensorFlow
These following model modules had failures:
Single PT | Multi PT | Single TF | Multi TF | Other | Category
2 | 1 | 0 | 0 | 0 | bert
1 | 0 | 1 | 0 | 0 | gpt2
0 | 1 | 0 | 0 | 0 | t5
There are 5 new failed tests
(compared to previous run: 1234567)
来源:utils/notification_service.py124-278
CI 系统包含用于随时间追踪和分析测试失败的工具:
check_bad_commit.py 脚本使用 git bisect 查找哪个提交引入了失败来源:utils/check_bad_commit.py1-207 utils/process_bad_commit_report.py1-150 .github/workflows/check_failed_tests.yml1-170
CI 系统使用多种 Docker 镜像进行不同类型的测试:
| 图片 | 目的 |
|---|---|
huggingface/transformers-all-latest-gpu | 所有框架的通用测试 |
huggingface/transformers-pytorch-gpu | PyTorch 专用测试 |
huggingface/transformers-tensorflow-gpu | TensorFlow 专用测试 |
huggingface/transformers-pytorch-deepspeed-latest-gpu | DeepSpeed 测试 |
huggingface/transformers-quantization-latest-gpu | 量化测试 |
huggingface/transformers-pytorch-amd-gpu | AMD GPU 测试 |
huggingface/transformers-quality | 代码质量检查 |
huggingface/transformers-consistency | 仓库一致性检查 |
来源:.github/workflows/self-scheduled.yml60-460 .github/workflows/self-push.yml38-365 .circleci/config.yml42-143
该库有几个定时 CI 运行:
这些定时运行有助于识别可能未被特定于 PR 的测试捕获的回归问题。
来源:.github/workflows/self-scheduled-caller.yml1-132 .github/workflows/doctests.yml1-90 .github/workflows/self-scheduled-amd-mi250-caller.yml1-60
CI 系统使用多个环境变量来控制其行为:
| 可变 | 目的 |
|---|---|
TRANSFORMERS_IS_CI | 指示代码在 CI 环境中运行 |
HF_HOME | Hugging Face 模型缓存目录的路径 |
OMP_NUM_THREADS | 控制 OpenMP 线程数 |
MKL_NUM_THREADS | 控制 MKL 线程数 |
RUN_SLOW | 在 CI 中启用慢速测试 |
PYTEST_TIMEOUT | 设置测试超时时间 |
TF_FORCE_GPU_ALLOW_GROWTH | 控制 TensorFlow GPU 内存分配 |
CUDA_VISIBLE_DEVICES | 控制对测试可见的 GPU |
来源:.github/workflows/self-scheduled.yml36-48 .github/workflows/self-push.yml20-27 .circleci/config.yml145-147
CI/CD 系统还支持 Transformers 库的发布过程。这记录在 setup.py 文件中,其中包含详细说明:
发布过程通过 Makefile 目标实现半自动化。
make pre-release # Prepare for a full release
make pre-patch # Prepare for a patch release
make build-release # Build the release packages
make post-release # Post-release version bump
来源:setup.py15-67 Makefile110-127
CI 系统中的常见问题包括:
@is_flaky 标记,并可能自动重新运行check_self_hosted_runner.py 进行检查tests_fetcher.py 中的依赖项分析CI 系统包含针对不稳定测试的重试机制,其模式在 FLAKY_TEST_FAILURE_PATTERNS 中定义。
来源:.circleci/create_circleci_config.py38-55 utils/check_self_hosted_runner.py1-53