菜单

构建系统

相关源文件

本文档介绍了 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 列表中,然后处理该列表以创建:

  1. 易于访问的查找表 (deps)
  2. 必需依赖项的核心 install_requires 列表
  3. 用于可选功能的各种 extras

可选的附加包

该库将可选依赖项组织成称为“附加项”的组,用户可以根据自己的需求进行安装。

类别示例目的
特定于框架的torchtfflax特定深度学习框架的依赖项
特定任务的visionaudiospeech处理不同数据模态的依赖项
集成tokenizersonnx特定集成的依赖项
开发qualitytesting贡献库的依赖项
部署servingdeepspeed部署场景的依赖项
遥测open-telemetry指标收集的依赖项

来源:setup.py275-443

依赖系统允许进行细粒度安装,例如:

依赖版本表生成

构建系统包含一个自定义命令,用于生成一个 Python 模块,其中包含可在运行时导入的依赖项信息。

来源:setup.py240-273 Makefile20-28

包配置和元数据

构建系统使用元数据和配置来设置包。

配置描述
名称包名 (transformers)
版本包版本号
作者作者信息
描述简短的包描述
长描述README.md 内容
许可证Apache 2.0 许可证
分类器PyPI 分类器(Python 版本、状态等)
入口点命令行工具定义

来源:setup.py459-499

发布流程

构建系统包含一个完善的发布流程。

来源:setup.py15-68 Makefile108-127

发布流程包括:

  1. 创建发布分支
  2. 更新版本号
  3. 构建分发包
  4. 在 PyPI 测试服务器上进行测试
  5. 最终发布到 PyPI
  6. 发布后版本更新

构建命令

构建系统通过 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 集成

构建系统已集成到项目的 CI/CD 工作流程中。

来源:.circleci/config.yml1-226 .circleci/create_circleci_config.py1-429 utils/tests_fetcher.py1-600

CI 系统会验证:

  1. 依赖表是否是最新
  2. 包是否能成功构建
  3. 在声明的依赖项下,测试是否通过

CI 系统使用复杂的测试选择机制,该机制会分析代码依赖项,仅运行受拉取请求更改影响的测试,从而优化 CI 资源。

软件包结构

构建系统定义了包如何结构化以进行分发。

来源:setup.py470-473

配置文件

构建系统依赖于多个配置文件。

文件目的
setup.py主要构建系统文件
pyproject.tomlPEP 517/518 配置
Makefile构建便捷命令
.circleci/config.ymlCI/CD 配置
.circleci/create_circleci_config.py动态 CI 配置生成器
utils/tests_fetcher.pyCI 的测试选择

来源: 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 构建系统旨在处理大型机器学习库的复杂依赖关系和结构。它为用户提供了仅安装所需内容的灵活性,同时确保维护者能够可靠地打包和分发版本。

构建系统弥合了开发与部署之间的差距,提供了用于维护依赖项一致性、验证构建质量和简化发布流程的工具。