本页面介绍了用于构建、测试和部署 Transformers 库的开发基础架构。它涵盖了开发生命周期中使用的构建系统、测试框架、持续集成管道和 Docker 镜像。
Transformers 库使用全面的开发基础架构来确保代码质量、跨框架兼容性以及所有组件的正常运行。该基础架构包括:
下图说明了开发基础架构的总体概览:
来源
构建系统负责依赖管理、包配置和发布准备。
依赖项在 setup.py 中进行管理,其中定义了基础依赖项和针对不同用例的可选附加项。
依赖项系统旨在允许灵活的安装配置,同时保持跨框架的兼容性。setup.py 中的 _deps 列表定义了所有带有版本约束的依赖项,然后这些依赖项会被处理成依赖项表。
来源
依赖项表使用以下工具自动更新:
make deps_table_update
来源
包配置在 setup.py 和 pyproject.toml 中均有定义。
setup.py:包元数据、依赖项、入口点pyproject.toml:开发工具(ruff、pytest)的配置来源
发布流程由 Makefile 目标管理,并在 setup.py 中进行文档化。
# Pre-release steps
make pre-release # For major/minor releases
make pre-patch # For patch releases
# Post-release steps
make post-release # For major/minor releases
make post-patch # For patch releases
# Build distribution
make build-release
来源
测试框架由按组件类型组织的测试、用于识别相关测试的测试获取器系统以及用于运行测试的实用工具组成。
测试按不同目录组织:
| 目录 | 描述 |
|---|---|
tests/models/ | 特定模型的测试 |
tests/pipelines/ | 管道测试 |
tests/tokenization/ | 分词器测试 |
tests/extended/ | 扩展测试(例如,deepspeed) |
tests/utils/ | 实用工具测试 |
examples/ | 示例用法测试 |
来源
测试获取器系统(utils/tests_fetcher.py)根据代码更改来识别要运行的测试。这是实现高效 CI 的关键组件,因为它只运行受更改影响的测试。
测试获取器的工作原理如下:
来源
测试配置在 conftest.py 和 pyproject.toml 中进行管理。
来源
可以使用以下命令在本地运行测试:
来源
Transformers 库使用多种 CI 系统来确保在不同环境下的全面测试。
使用的主要 CI 系统有:
来源
主要的 GitHub Actions 工作流有:
| 工作流 | 目的 |
|---|---|
self-push.yml | 推送至 main 分支时运行测试 |
self-scheduled.yml | 运行计划测试(夜间) |
self-scheduled-amd-mi250-caller.yml | 运行 AMD GPU 测试 |
doctests.yml | 运行文档测试 |
slack-report.yml | 发送测试报告到 Slack |
check_failed_tests.yml | 处理和报告失败的测试 |
自托管运行器配置为使用特定的 GPU 资源。
来源
CircleCI 配置处理:
CircleCI 管道是根据 PR 或提交中的更改文件动态生成的。create_circleci_config.py 脚本根据 tests_fetcher.py 的输出创建具有特定测试作业的配置。
来源
测试结果通过多种方式报告:
通知系统处理测试结果以:
来源
Docker 镜像应用程序是开发基础设施的关键部分,为测试和开发提供了一致的环境。
主要的 Docker 镜像变体包括
| 图片 | 目的 | 应用场景 |
|---|---|---|
transformers-all-latest-gpu | 所有支持 GPU 的框架 | 模型测试、示例 |
transformers-pytorch-gpu | 支持 GPU 的 PyTorch 特定版本 | PyTorch 管道测试 |
transformers-tensorflow-gpu | 支持 GPU 的 TensorFlow 特定版本 | TensorFlow 管道测试 |
transformers-pytorch-deepspeed-latest-gpu | 支持 DeepSpeed 的 PyTorch | DeepSpeed/FSDP 测试 |
transformers-quantization-latest-gpu | 量化库 | 量化测试 |
transformers-pytorch-amd-gpu | 适用于 AMD GPU 的 PyTorch | AMD GPU 测试 |
transformers-consistency | 代码质量工具 | 存储库一致性检查 |
Docker 镜像旨在为不同的测试场景提供具有特定依赖项的隔离环境。每个镜像都包含其特定用途所需的框架和库。
来源
Docker 镜像在几种情况下进行构建和推送
build_ci_docker_image*)来源
Docker 镜像用于 CI 工作流以提供一致的环境。自托管的运行器配置了特定的硬件资源,Docker 容器被配置为访问这些资源。
CI 系统为不同的测试场景使用不同的机器类型
| 机器类型 | GPU 配置 | 用于 |
|---|---|---|
aws-g4dn-4xlarge-cache | 单个 GPU | 单 GPU 测试 |
aws-g4dn-12xlarge-cache | 多个 GPU | 多 GPU 测试 |
| AMD MI210/MI250 | AMD GPU | AMD 特定测试 |
挂载卷(-v /mnt/cache/.cache/huggingface:/mnt/cache/)为模型权重和其他工件提供了持久缓存,跨 CI 运行,显著提高了性能。
来源
存储库包含各种用于辅助开发的工具
代码质量通过以下方式维护
ruff 进行 linting 和格式化(取代了之前使用的 black 和 isort)Makefile 提供了几个代码质量目标
来源
多项检查可确保存储库一致性
这会运行多项检查
存储库包含每个检查的专用工具
| 实用工具 | 目的 |
|---|---|
check_copies.py | 确保重复代码同步 |
check_modular_conversion.py | 检查模块化转换函数 |
check_dummies.py | 验证虚拟模型实现 |
check_repo.py | 通用存储库结构检查 |
check_inits.py | 验证初始化文件 |
check_config_docstrings.py | 检查配置 docstrings |
check_config_attributes.py | 验证配置属性 |
check_doctest_list.py | 维护文档测试列表 |
update_metadata.py | 更新模型元数据 |
来源
开发基础架构集成了各种外部服务
与 Hugging Face Hub 集成,用于
CI 系统使用一个令牌(HF_HUB_READ_TOKEN)来访问受限存储库,以及一个单独的令牌(TRANSFORMERS_CI_RESULTS_UPLOAD_TOKEN)来将测试结果上传到专用数据集存储库。
来源
全面的 Slack 通知,用于
通知系统根据被测组件将报告发送到指定的 Slack 频道
| 渠道 | 目的 |
|---|---|
#transformers-ci-daily-models | 模型测试结果 |
#transformers-ci-daily-pipeline-torch | PyTorch 管道测试结果 |
#transformers-ci-daily-pipeline-tf | TensorFlow 管道测试结果 |
#transformers-ci-daily-training | Trainer/FSDP/DeepSpeed 测试结果 |
#transformers-ci-daily-quantization | 量化测试结果 |
#transformers-ci-daily-amd | AMD GPU 测试结果 |
#transformers-ci-daily-docs | 文档测试结果 |
来源
Transformers 库的开发基础架构旨在支持具有多个框架集成的庞大而复杂的代码库。它确保了代码质量、全面的测试和高效的开发工作流程。
基础架构将不断发展,以满足不断增长的库和社区的需求。