本文档介绍了 Hugging Face Transformers 库的构建系统,该系统负责依赖管理、包配置、分发设置和发布流程。构建系统主要基于 setup.py,遵循 Python 打包标准,并为 Transformers 库的特定需求实现了自定义增强。
有关测试框架的信息,请参阅 测试框架。
来源:setup.py1-500 src/transformers/dependency_versions_table.py1-110
Transformers 库使用复杂的依赖管理系统来适应各种用例,并通过可选依赖项最大限度地减少安装开销。
该系统在 setup.py 中维护一个包含所有依赖项及其版本要求的中央列表。
来源:setup.py97-208 setup.py446-457 src/transformers/dependency_versions_table.py1-110
核心依赖项定义在 _deps 列表中,然后处理该列表以创建:
deps)install_requires 列表extras 包该库将可选依赖项组织成称为“附加项”的组,用户可以根据自己的需求进行安装。
| 类别 | 示例 | 目的 |
|---|---|---|
| 特定于框架的 | torch、tf、flax | 特定深度学习框架的依赖项 |
| 特定任务的 | vision、audio、speech | 处理不同数据模态的依赖项 |
| 集成 | tokenizers、onnx | 特定集成的依赖项 |
| 开发 | quality、testing | 贡献库的依赖项 |
| 部署 | serving、deepspeed | 部署场景的依赖项 |
| 遥测 | open-telemetry | 指标收集的依赖项 |
依赖系统允许进行细粒度安装,例如:
构建系统包含一个自定义命令,用于生成一个 Python 模块,其中包含可在运行时导入的依赖项信息。
来源:setup.py240-273 Makefile20-28
构建系统使用元数据和配置来设置包。
| 配置 | 描述 |
|---|---|
名称 | 包名 (transformers) |
版本 | 包版本号 |
作者 | 作者信息 |
描述 | 简短的包描述 |
长描述 | README.md 内容 |
许可证 | Apache 2.0 许可证 |
分类器 | PyPI 分类器(Python 版本、状态等) |
入口点 | 命令行工具定义 |
构建系统包含一个完善的发布流程。
来源:setup.py15-68 Makefile108-127
发布流程包括:
构建系统通过 Makefile 提供多种命令:
| 命令 | 目的 |
|---|---|
make deps_table_update | 更新依赖版本表 |
make deps_table_check_updated | 验证依赖表是否最新 |
make build-release | 构建 wheel 和源代码分发 |
make pre-release | 准备新版本发布 |
make pre-patch | 准备补丁版本发布 |
make post-release | 发布后更新版本 |
make post-patch | 补丁发布后更新版本 |
来源:Makefile20-28 Makefile108-127
构建系统已集成到项目的 CI/CD 工作流程中。
来源:.circleci/config.yml1-226 .circleci/create_circleci_config.py1-429 utils/tests_fetcher.py1-600
CI 系统会验证:
CI 系统使用复杂的测试选择机制,该机制会分析代码依赖项,仅运行受拉取请求更改影响的测试,从而优化 CI 资源。
构建系统定义了包如何结构化以进行分发。
构建系统依赖于多个配置文件。
| 文件 | 目的 |
|---|---|
setup.py | 主要构建系统文件 |
pyproject.toml | PEP 517/518 配置 |
Makefile | 构建便捷命令 |
.circleci/config.yml | CI/CD 配置 |
.circleci/create_circleci_config.py | 动态 CI 配置生成器 |
utils/tests_fetcher.py | CI 的测试选择 |
来源: setup.py1-514 Makefile1-128 .circleci/config.yml1-226 .circleci/create_circleci_config.py1-429 utils/tests_fetcher.py1-600
来源: Makefile20-28 Makefile36-47 Makefile50-72 Makefile108-127
构建系统包含命令,用于测试分发版是否能正常工作
来源: setup.py54-60 Makefile121-127
Transformers 构建系统旨在处理大型机器学习库的复杂依赖关系和结构。它为用户提供了仅安装所需内容的灵活性,同时确保维护者能够可靠地打包和分发版本。
构建系统弥合了开发与部署之间的差距,提供了用于维护依赖项一致性、验证构建质量和简化发布流程的工具。