跳转至

构建系统

本文引用的文件 - .bazelrc - MODULE.bazel - tensorflow.bazelrc - warnings.bazelrc - build_tools/configure/configure.py - build_tools/ci/build.py - build_tools/pjrt_wheels/BUILD.bazel - build_tools/rocm/rocm_xla.bazelrc - build_tools/rocm/rocm_xla_ci.bazelrc - build_tools/sycl/build.sh - third_party/extensions/third_party.bzl - docs/build_from_source.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

本文件面向XLA构建系统的使用者与维护者,系统性梳理基于Bazel的构建配置、CI/CD流水线与跨平台编译支持。内容涵盖构建规则、依赖管理、编译选项配置、自定义构建、交叉编译与增量构建优化、缓存策略与并行编译配置,以及常见问题排查方法。文档同时提供从零搭建开发环境、编译源码与打包发布的实践步骤,并以图示方式呈现关键流程。

项目结构

XLA采用Bazel模块化组织,根目录通过MODULE.bazel声明外部依赖与模块扩展;构建配置由多份.bazelrc文件协同完成,其中tensorflow.bazelrc提供通用构建选项,.bazelrc负责导入与合并;build_tools目录提供配置脚本、CI构建器、特定后端(ROCm、SYCL)配置与轮子打包规则;third_party/extensions集中注册第三方库;docs提供从源码构建的指导。

graph TB
A[".bazelrc"] --> B["tensorflow.bazelrc"]
A --> C["warnings.bazelrc"]
D["MODULE.bazel"] --> E["third_party/extensions/third_party.bzl"]
F["build_tools/configure/configure.py"] --> G["xla_configure.bazelrc(生成)"]
H["build_tools/ci/build.py"] --> I["CI流水线命令集合"]
J["build_tools/pjrt_wheels/BUILD.bazel"] --> K["Python Wheel(PJRT插件)"]
L["build_tools/rocm/rocm_xla.bazelrc"] --> M["ROCm构建配置"]
N["build_tools/sycl/build.sh"] --> O["SYCL构建脚本"]

图表来源 - .bazelrc - tensorflow.bazelrc - warnings.bazelrc - MODULE.bazel - third_party/extensions/third_party.bzl - build_tools/configure/configure.py - build_tools/ci/build.py - build_tools/pjrt_wheels/BUILD.bazel - build_tools/rocm/rocm_xla.bazelrc - build_tools/sycl/build.sh

章节来源 - .bazelrc - MODULE.bazel - tensorflow.bazelrc - warnings.bazelrc - third_party/extensions/third_party.bzl

核心组件

  • 根配置与导入链
  • .bazelrc:启用Bzlmod开关、加载tensorflow.bazelrc与warnings.bazelrc,并尝试导入xla_configure.bazelrc。
  • tensorflow.bazelrc:提供平台、后端、远程执行、缓存、交叉编译等大量构建配置片段与默认选项。
  • warnings.bazelrc:统一将警告视为错误,并对第三方代码静默处理。
  • 模块与依赖
  • MODULE.bazel:声明Bazel模块依赖、单版本覆盖与补丁、Python工具链与pip解析、第三方扩展注册、规则集工具链注册等。
  • third_party.extensions:集中注册众多第三方库,便于在不同后端与目标间复用。
  • 配置与CI
  • configure.py:交互式生成xla_configure.bazelrc,自动探测工具链与CUDA能力,注入后端与编译器选择、标签过滤等。
  • build.py:CI构建器,按BuildType枚举生成标准化的bazel命令,含并行、重试、测试过滤、RBE参数等。
  • 轮子与插件
  • pjrt_wheels/BUILD.bazel:定义CPU/GPU PJRT插件Wheel的构建规则、入口点与版本拼接逻辑。
  • 后端与工具链
  • rocm_xla.bazelrc/rocm_xla_ci.bazelrc:ROCm专用构建与CI配置,含Sanitizer、多卡运行、忽略列表等。
  • sycl/build.sh:SYCL后端构建脚本,封装安装与构建流程。
  • 文档与示例
  • docs/build_from_source.md:Linux/CPU/GPU构建步骤、容器化建议与Hermetic CUDA说明。

章节来源 - .bazelrc - tensorflow.bazelrc - warnings.bazelrc - MODULE.bazel - third_party/extensions/third_party.bzl - build_tools/configure/configure.py - build_tools/ci/build.py - build_tools/pjrt_wheels/BUILD.bazel - build_tools/rocm/rocm_xla.bazelrc - build_tools/rocm/rocm_xla_ci.bazelrc - build_tools/sycl/build.sh - docs/build_from_source.md

架构总览

下图展示了XLA构建系统的关键交互:用户通过configure.py生成后端配置,Bazel读取根.bazelrc与tensorflow.bazelrc,结合MODULE.bazel与第三方扩展完成依赖解析与工具链注册;CI通过build.py统一调度;ROCm/SYCL等后端通过专用.bazelrc或脚本参与构建;最终产出二进制与Wheel。

graph TB
subgraph "用户层"
U["开发者/CI"]
end
subgraph "配置层"
RC[".bazelrc"]
TFRC["tensorflow.bazelrc"]
WR["warnings.bazelrc"]
CFG["configure.py<br/>生成xla_configure.bazelrc"]
end
subgraph "模块与依赖"
MOD["MODULE.bazel"]
EXT["third_party.extensions"]
end
subgraph "构建与产物"
BZ["Bazel"]
CI["build.py"]
PJRT["PJRT Wheel 规则"]
ROCM["ROCm 配置"]
SYCL["SYCL 脚本"]
end
U --> CFG --> RC
RC --> TFRC
RC --> WR
MOD --> EXT
CFG --> BZ
TFRC --> BZ
WR --> BZ
EXT --> BZ
CI --> BZ
PJRT --> BZ
ROCM --> BZ
SYCL --> BZ

图表来源 - .bazelrc - tensorflow.bazelrc - warnings.bazelrc - MODULE.bazel - third_party/extensions/third_party.bzl - build_tools/configure/configure.py - build_tools/ci/build.py - build_tools/pjrt_wheels/BUILD.bazel - build_tools/rocm/rocm_xla.bazelrc - build_tools/sycl/build.sh

详细组件分析

组件A:构建配置与导入链

  • .bazelrc
  • 控制Bzlmod开关与工具链分辨率,导入tensorflow.bazelrc与warnings.bazelrc,并尝试导入xla_configure.bazelrc。
  • 建议:保持与tensorflow.bazelrc的导入顺序,确保后端配置片段生效。
  • tensorflow.bazelrc
  • 提供平台、后端、远程执行、缓存、交叉编译、测试过滤等大量配置片段,是构建选项的“大仓库”。
  • 关键片段:CUDA/ROCm/SYCL、RBE、缓存、交叉编译、PJRT发布配置等。
  • warnings.bazelrc
  • 将警告视为错误,并对第三方头文件静默处理,避免噪声干扰。
flowchart TD
Start(["启动 Bazel"]) --> LoadRoot[".bazelrc 导入"]
LoadRoot --> ImportTF["导入 tensorflow.bazelrc"]
LoadRoot --> ImportWarn["导入 warnings.bazelrc"]
ImportTF --> TryXLA["尝试导入 xla_configure.bazelrc"]
ImportWarn --> TryXLA
TryXLA --> Resolve["解析后端/平台/工具链"]
Resolve --> End(["进入具体构建"])

图表来源 - .bazelrc - tensorflow.bazelrc - warnings.bazelrc

章节来源 - .bazelrc - tensorflow.bazelrc - warnings.bazelrc

组件B:模块与依赖管理

  • MODULE.bazel
  • 声明Bazel模块依赖与单版本覆盖,应用补丁,注册Python工具链与pip解析,注册第三方扩展与规则集工具链。
  • 影响:决定外部库版本、补丁与工具链可用性,直接影响后端(CUDA/ROCm/SYCL)与编译器选择。
  • third_party.extensions
  • 统一注册大量第三方库(如cuDNN/NCCL/Triton/ROCm设备库等),便于在不同后端与目标间共享。
graph LR
MOD["MODULE.bazel"] --> Deps["依赖与覆盖"]
MOD --> Py["Python工具链/PIP解析"]
MOD --> Ext["第三方扩展(third_party_ext)"]
Ext --> Reg["use_repo 注册第三方库"]
Deps --> Toolchains["规则集工具链注册"]

图表来源 - MODULE.bazel - third_party/extensions/third_party.bzl

章节来源 - MODULE.bazel - third_party/extensions/third_party.bzl

组件C:配置脚本与后端选择

  • configure.py
  • 自动探测Clang/GCC/LD路径与版本,查询CUDA计算能力,生成xla_configure.bazelrc。
  • 支持后端:CPU/CUDA/ROCm/SYCL;主机编译器:Clang/GCC;CUDA编译器:Clang/NVCC;ROCm编译器:HIPCC;SYCL编译器:ICPX。
  • 输出:构建配置片段(后端、编译器、链接器、标签过滤、环境变量等)。
sequenceDiagram
participant Dev as "开发者"
participant Script as "configure.py"
participant FS as "文件系统"
participant RC as "xla_configure.bazelrc"
Dev->>Script : 传入选项(--backend/--host_compiler/...)
Script->>Script : 探测工具链/版本/计算能力
Script->>FS : 写入 xla_configure.bazelrc
FS-->>RC : 生成配置文件
RC-->>Dev : 可被 .bazelrc/try-import 加载

图表来源 - build_tools/configure/configure.py - .bazelrc

章节来源 - build_tools/configure/configure.py - .bazelrc

组件D:CI构建器与流水线

  • build.py
  • 定义多种BuildType(Linux x86 CPU/GPU、Windows x86 CPU、macOS、JAX/TensorFlow集成等),按类型组装bazel命令。
  • 默认选项:颜色、测试输出、并行、重试、BES上传、jobs数等;按后端注入标签过滤与环境变量。
  • 多GPU场景:通过run_under与环境变量控制并行度与可见设备。
sequenceDiagram
participant CI as "CI"
participant Builder as "build.py"
participant Bazel as "Bazel"
participant Prof as "analyze-profile"
CI->>Builder : 选择 BuildType
Builder->>Builder : 组装options/configs/env
Builder->>Bazel : bazel build/test [targets]
Bazel-->>Builder : 结果
Builder->>Prof : bazel analyze-profile profile.json.gz
Prof-->>CI : 性能分析报告

图表来源 - build_tools/ci/build.py

章节来源 - build_tools/ci/build.py

组件E:轮子与插件打包

  • pjrt_wheels/BUILD.bazel
  • 定义CPU/GPU PJRT插件Wheel的构建规则,使用py_wheel与cc_binary,按CUDA主版本动态生成插件名与入口点。
  • 版本号:由nightly时间戳与release candidate编号拼接,遵循PEP 440。
flowchart TD
A["开始"] --> B["解析CUDA主版本"]
B --> C["拼接Wheel版本号"]
C --> D["生成CPU插件规则"]
C --> E["生成GPU插件规则"]
D --> F["py_wheel 打包"]
E --> F
F --> G["产出 .whl 与测试套件"]

图表来源 - build_tools/pjrt_wheels/BUILD.bazel

章节来源 - build_tools/pjrt_wheels/BUILD.bazel

组件F:ROCm与SYCL后端配置

  • rocm_xla.bazelrc/rocm_xla_ci.bazelrc
  • 提供ROCm专用构建与CI配置,含Sanitizer(ASAN/TSAN)、多卡运行、忽略列表、RBE参数等。
  • sycl/build.sh
  • 封装SYCL后端构建流程,包括安装Bazel、OneAPI、克隆仓库与清理。
graph TB
R1["rocm_xla.bazelrc"] --> R2["rocm_rbe / tsan / asan / ci_multi_gpu"]
S1["sycl/build.sh"] --> S2["安装/构建/清理"]

图表来源 - build_tools/rocm/rocm_xla.bazelrc - build_tools/rocm/rocm_xla_ci.bazelrc - build_tools/sycl/build.sh

章节来源 - build_tools/rocm/rocm_xla.bazelrc - build_tools/rocm/rocm_xla_ci.bazelrc - build_tools/sycl/build.sh

组件G:从源码构建与发布示例

  • docs/build_from_source.md
  • Linux CPU/GPU构建步骤、容器化建议(ml-build镜像)、Hermetic CUDA说明、JAX容器内构建XLA目标示例。
  • 建议:优先使用容器,减少本地环境差异;GPU构建时可手动指定CUDA计算能力。
flowchart TD
S(["开始"]) --> D1["准备容器/环境"]
D1 --> C1["./configure.py --backend=CPU/CUDA"]
C1 --> B1["bazel build //xla/..."]
B1 --> T1["bazel test //xla/... (可选)"]
T1 --> W1["打包/分发(可选)"]
W1 --> E(["结束"])

图表来源 - docs/build_from_source.md

章节来源 - docs/build_from_source.md

依赖分析

  • 模块依赖与版本控制
  • MODULE.bazel通过bazel_dep与single_version_override管理依赖版本与补丁,确保跨平台一致性。
  • 第三方扩展
  • third_party.extensions统一注册大量第三方库,减少重复定义,提升复用效率。
  • 工具链与后端
  • rules_ml_toolchain注册CUDA/ROCm/SYCL工具链;MODULE.bazel中注册本地配置仓库,驱动后端可用性。
graph TB
M["MODULE.bazel"] --> D1["bazel_dep / single_version_override"]
M --> E1["module_extension(use_extension)"]
E1 --> T1["register_toolchains"]
M --> P["Python工具链与pip解析"]
M --> X["本地配置仓库(local_config_*)"]

图表来源 - MODULE.bazel - third_party/extensions/third_party.bzl

章节来源 - MODULE.bazel - third_party/extensions/third_party.bzl

性能考虑

  • 并行与缓存
  • CI构建器默认启用高并发与BES异步上传;tensorflow.bazelrc提供公共缓存配置与RBE选项,建议在CI中开启远程缓存以加速增量构建。
  • 测试过滤与标签
  • 通过build/test_tag_filters按后端与GPU能力精确筛选测试,减少无效执行。
  • 诊断与分析
  • CI构建器生成profile.json.gz并通过bazel analyze-profile进行分析,定位瓶颈。

章节来源 - build_tools/ci/build.py - tensorflow.bazelrc - build_tools/ci/build.py

故障排除指南

  • 配置未生效
  • 检查.xla_configure.bazelrc是否被.try-import加载;确认后端与编译器组合是否受支持。
  • CUDA/ROCm/SYCL不可用
  • 确认MODULE.bazel中的本地配置仓库已注册;检查工具链版本与补丁是否匹配。
  • 测试失败或超时
  • 使用--test_output=all与--verbose_failures获取详细日志;必要时降低并行度或启用Sanitizer忽略列表。
  • 缓存命中率低
  • 统一使用Hermetic工具链与固定版本依赖;在CI中启用远程缓存并校验权限。

章节来源 - build_tools/configure/configure.py - build_tools/rocm/rocm_xla.bazelrc - tensorflow.bazelrc

结论

XLA构建系统通过模块化依赖、可组合的.bazelrc片段与统一的CI构建器,实现了跨平台、多后端的一致构建体验。配合Hermetic工具链与远程缓存,可在保证可重复性的同时显著提升构建效率。建议在日常开发中优先使用容器与configure.py生成的配置,并在CI中启用远程缓存与性能分析,持续优化构建稳定性与速度。

附录

  • 快速开始(Linux)
  • 使用ml-build容器,执行configure.py选择后端,再运行bazel build。
  • 快速开始(Windows/macOS)
  • 参考docs/build_from_source.md中的步骤,或在CI配置片段中选择对应平台配置。
  • 自定义构建
  • 在xla_configure.bazelrc中追加copt/linkopt与环境变量;在MODULE.bazel中调整依赖版本与补丁。
  • 交叉编译
  • 使用tensorflow.bazelrc中的cross_compile与RBE配置,按目标平台设置执行与宿主平台。

章节来源 - docs/build_from_source.md - tensorflow.bazelrc - MODULE.bazel