本文档描述了Hugging Face Transformers库中使用的测试基础设施。它涵盖了测试组织、CI/CD管道、测试执行环境和报告机制。有关模型特定测试的编写信息,请参阅模型开发指南;有关文档测试的信息,请参阅文档贡献指南。
Transformers库拥有一个全面的测试框架,用于确保代码质量并防止回归。该框架围绕在持续集成(CI)环境中运行的自动化测试构建,主要使用GitHub Actions和自托管运行器进行GPU测试。
来源
Transformers库中的测试按模型架构和功能区域进行组织
tests/models/,按模型架构组织(例如,tests/models/bert/,tests/models/gpt2/)tests/ 目录的根目录下,涵盖跨模型功能tests/pipelines/: 对流水线功能的测试tests/trainer/: 对训练功能的测试tests/quantization/: 对模型量化的测试tests/extended/: 对扩展功能(如deepspeed集成)的测试来源
CI/CD管道主要通过GitHub Actions工作流进行编排,使用GitHub托管的运行器和自托管的GPU运行器。
定时CI: 每天对主分支进行检查
.github/workflows/self-scheduled.yml 并由 .github/workflows/self-scheduled-caller.yml 触发.github/workflows/self-scheduled-amd-mi250-caller.yml推送CI: 当代码被推送到特定分支时触发
.github/workflows/self-push.yml 并由 .github/workflows/self-push-caller.yml 触发.github/workflows/self-push-amd.yml文档测试: 验证文档示例是否正常工作
.github/workflows/doctests.yml特殊情况CI: 针对特定模型或功能
.github/workflows/push-important-models.yml 用于测试关键模型utils/check_copies.py 进行代码一致性检查来源
CI系统使用Docker容器提供隔离、可复现的测试环境。针对不同的测试场景使用不同的容器
huggingface/transformers-all-latest-gpuhuggingface/transformers-pytorch-gpuhuggingface/transformers-tensorflow-gpuhuggingface/transformers-pytorch-deepspeed-latest-gpuhuggingface/transformers-quantization-latest-gpuhuggingface/transformers-all-latest-gpu-push-cihuggingface/transformers-pytorch-amd-gpu 和 huggingface/transformers-pytorch-amd-gpu-push-ci这些容器在工作流文件中被引用,并独立构建和维护。每个容器都包含其特定测试场景所需的依赖项。
来源
为了高效执行,测试被分发到多个运行器上
utils/split_model_tests.py 分割成子集来源
测试使用pytest执行,并采用特定配置
环境变量:
TRANSFORMERS_IS_CI: 表示测试正在CI中运行HF_HOME: 下载模型的缓存目录RUN_SLOW: 启用慢速测试CUDA_VISIBLE_DEVICES: 控制GPU可见性Pytest命令:
测试报告: 生成于 reports/ 目录中,并采用特定命名约定
来源
一个复杂的报告系统收集测试结果并提供测试失败通知
来源
测试结果以详细的消息格式报告到Slack频道,并存储在HuggingFace Hub中以供历史分析
通知服务: 实现在 utils/notification_service.py 中
消息格式:
频道: 不同测试类型的不同Slack频道
#transformers-ci-daily-models#transformers-ci-daily-pipeline-torch 和 #transformers-ci-daily-pipeline-tf#transformers-ci-daily-training#transformers-ci-daily-quantization#transformers-ci-daily-amd#transformers-ci-daily-docsHuggingFace Hub存储:
来源
当代码被推送时,仅执行相关测试以优化CI资源
utils/tests_fetcher.py 识别哪些文件已更改ci_*, ci-*)进行特殊处理来源
tests/models/{model_name}/)doctests.yml 工作流运行来源
多个实用脚本支持测试框架
utils/split_model_tests.py 将测试分割成可管理的块utils/notification_service.py 格式化并发送测试报告utils/check_self_hosted_runner.py 验证运行器可用性utils/extract_warnings.py 从测试运行中收集警告utils/get_previous_daily_ci.py 检索先前运行的结果utils/check_bad_commit.py 识别引入故障的提交其他实用程序确保仓库一致性
检查复制: utils/check_copies.py 验证复制的代码是否保持同步
# Copied from 评论标记的代码块检查导入: utils/check_inits.py 确保导入结构正确定义
更新元数据: utils/update_metadata.py 保持模型元数据最新
transformers-metadata 仓库同步来源
Transformers测试框架通过自动化CI/CD管道、专业测试类别和详细报告的结合,提供了全面的测试覆盖。该系统旨在捕获回归错误并确保代码质量,同时通过Slack通知和构件存储向开发人员提供有用的反馈。
使用支持GPU的自托管运行器可以对性能关键型代码路径进行全面测试,而测试选择机制则通过仅在代码更改时运行相关测试来确保CI资源的有效利用。