快速开始¶
本文引用的文件 - README.md - docs/developer_guide.md - docs/build_from_source.md - docs/developer_environment.md - docs/contributing.md - build_tools/configure/configure.py - xla/examples/axpy/README.md - xla/examples/axpy/stablehlo_axpy.mlir - requirements_lock_3_12.txt
目录¶
简介¶
本“快速开始”面向三类用户: - ML 框架使用者:通过各自生态(如 PyTorch、TensorFlow、JAX)使用 XLA 编译与加速推理/训练,无需直接克隆或构建 XLA 仓库。 - XLA 贡献者与集成开发者:需要在本地搭建可构建、可测试的开发环境,并能运行示例与测试。 - 硬件后端开发者:需要针对特定后端(CPU/GPU/ROCm/SYCL)进行配置与验证。
本指南覆盖安装、开发环境配置、基础构建步骤、简单示例,以及常见问题与优化建议,帮助你从零开始顺利运行第一个 XLA 程序。
项目结构¶
XLA 采用模块化组织,核心目录与用途概览: - docs:官方文档,包含开发者指南、构建说明、贡献流程等 - build_tools:构建与配置工具链,含 configure 脚本、CI 工具、第三方依赖管理等 - xla:XLA 核心源码与示例,按功能域划分(client、codegen、hlo、pjrt、python 等) - third_party:外部依赖(如 MLIR、StableHLO、CUDA/cuDNN、ROCm、SYCL 等) - tools:CI/工具脚本与交叉编译工具链
graph TB
A["根目录"] --> B["docs 文档"]
A --> C["build_tools 构建工具"]
A --> D["xla 核心代码与示例"]
A --> E["third_party 外部依赖"]
A --> F["tools 工具脚本"]
D --> D1["client 客户端接口"]
D --> D2["codegen 代码生成"]
D --> D3["hlo 高层优化"]
D --> D4["pjrt 运行时接口"]
D --> D5["python Python 绑定"]
章节来源 - file://README.md#L1-L50
核心组件¶
- 构建配置与环境
- 使用配置脚本生成 bazelrc,自动检测并注入编译器、CUDA/cuDNN/NCCL、计算能力等参数
- 支持 CPU/GPU/ROCm/SYCL 后端选择与编译器组合
- 开发者环境
- 推荐使用 ml-build 容器镜像,内置 Clang 与构建工具
- 提供 LSP/clangd 的 compile_commands.json 生成方法
- 示例与最小工作流
- StableHLO axpy 示例展示从 MLIR 到可执行程序的完整流程
- 依赖锁定
- 提供 Python 依赖版本锁定清单,便于复现环境
章节来源 - file://docs/developer_guide.md#L33-L124 - file://docs/build_from_source.md#L8-L184 - file://docs/developer_environment.md#L1-L71 - file://xla/examples/axpy/README.md#L1-L190 - file://requirements_lock_3_12.txt#L1-L116
架构总览¶
下图展示了从配置到构建、再到示例运行的端到端流程:
sequenceDiagram
participant Dev as "开发者"
participant Conf as "配置脚本<br/>configure.py"
participant Bazel as "Bazel 构建系统"
participant XLA as "XLA 目标<br/>//xla/..."
participant Ex as "示例测试<br/>axpy"
Dev->>Conf : 选择后端与编译器
Conf-->>Dev : 生成 xla_configure.bazelrc
Dev->>Bazel : 执行构建命令
Bazel->>XLA : 解析 BUILD 与依赖
XLA-->>Bazel : 产出可执行/库
Dev->>Ex : 运行示例测试
Ex-->>Dev : 输出计算结果与日志
图表来源 - build_tools/configure/configure.py - docs/build_from_source.md - xla/examples/axpy/README.md
详细组件分析¶
组件一:构建配置与编译器选择¶
- 功能要点
- 自动发现并注入 Clang/GCC、lld、CUDA/cuDNN/NCCL、计算能力等
- 生成 bazelrc,包含后端与编译器组合、标签过滤、编译选项等
- 支持 hermetic(隔离)构建,减少宿主环境差异
- 关键流程
- 解析参数(后端、主机编译器、CUDA/ROCm/SYCL 编译器、计算能力等)
- 自动探测工具与版本(如 nvidia-smi 获取计算能力)
- 写入 xla_configure.bazelrc,供 Bazel 读取
flowchart TD
Start(["开始"]) --> Parse["解析命令行参数"]
Parse --> Detect["自动探测工具与版本"]
Detect --> Compose["组装 bazelrc 行"]
Compose --> Write["写入 xla_configure.bazelrc"]
Write --> End(["结束"])
图表来源 - build_tools/configure/configure.py
章节来源 - file://build_tools/configure/configure.py#L16-L625
组件二:开发者环境与 LSP/clangd¶
- LSP 设置
- 通过 Bazel 查询生成 compile_commands.json,供 clangd 解析
- 在编辑器中启用符号跳转、补全、错误提示等功能
- 构建清理与依赖检查
- 层级检查(layering_check)确保 BUILD 文件显式声明所有依赖
- 使用 bant 与 buildozer 去除未使用依赖,提升可维护性
章节来源 - file://docs/developer_environment.md#L1-L71
组件三:示例:StableHLO axpy¶
- 目标
- 展示如何从 MLIR/StableHLO 程序编译并执行到本地设备
- 步骤
- 准备 StableHLO 程序(MLIR 文件)
- 创建 PjRtClient 并解析 MLIR
- 编译为可执行程序
- 准备输入数据并执行,校验输出
- 可运行目标
- 示例测试用例可直接通过 Bazel 运行
sequenceDiagram
participant T as "测试用例"
participant MLIR as "MLIR/StableHLO"
participant PJRT as "PjRtClient"
participant Exec as "可执行程序"
participant CPU as "本地设备"
T->>MLIR : 读取并解析 MLIR
T->>PJRT : 创建客户端
PJRT->>Exec : 编译 StableHLO
T->>CPU : 准备输入并执行
Exec-->>T : 返回结果并断言
图表来源 - xla/examples/axpy/README.md - xla/examples/axpy/stablehlo_axpy.mlir
章节来源 - file://xla/examples/axpy/README.md#L1-L190 - file://xla/examples/axpy/stablehlo_axpy.mlir#L1-L10
依赖关系分析¶
- Python 依赖
- 通过锁定清单固定 numpy、lit、ml-dtypes 等版本,保证可复现
- 构建与运行时
- Bazel 作为构建入口;容器镜像提供一致的编译环境
- CUDA/cuDNN/NCCL 与计算能力由配置脚本注入到 bazelrc
graph LR
Py["Python 依赖<br/>requirements_lock_3_12.txt"] --> Env["开发环境"]
Env --> Bazel["Bazel 构建系统"]
Bazel --> Targets["XLA 目标集合"]
Targets --> Examples["示例与测试"]
图表来源 - requirements_lock_3_12.txt - docs/developer_guide.md
章节来源 - file://requirements_lock_3_12.txt#L1-L116 - file://docs/developer_guide.md#L33-L124
性能考虑¶
- 首次构建耗时较长,因为需要同时构建 XLA、MLIR、StableHLO 等子系统
- 使用容器镜像可显著降低环境差异带来的性能波动
- 对于 GPU 构建,建议在有 GPU 的机器上自动探测计算能力,或在无 GPU 环境下手动指定计算能力
- 通过层叠优化与融合 Pass 提升算子效率,遵循贡献指南中的优化策略
故障排查指南¶
- 无法找到 nvidia-smi 或计算能力探测失败
- 在无 GPU 环境下,需手动传入计算能力参数
- 参考构建文档中的 CUDA 计算能力指定方式
- 编译器版本不匹配
- 确认 Clang/GCC 版本与 bazelrc 注入一致
- 使用 hermetic 构建避免宿主环境干扰
- LSP/clangd 无法识别头文件
- 重新生成 compile_commands.json 并重启编辑器
- 依赖缺失或版本冲突
- 使用锁定清单安装 Python 依赖
- 清理未使用的 BUILD 依赖,减少耦合
章节来源 - file://docs/build_from_source.md#L8-L184 - file://docs/developer_environment.md#L1-L71 - file://docs/contributing.md#L166-L220
结论¶
通过本指南,你可以: - 面向不同用户角色选择合适的入门路径 - 快速完成开发环境搭建与首次构建 - 成功运行最小示例,理解从 StableHLO 到可执行程序的流程 - 掌握常见问题的定位与解决思路
附录¶
A. 不同用户群体的入门路径¶
- ML 框架使用者
- 直接参考各框架文档(PyTorch、TensorFlow、JAX),无需克隆/构建 XLA 仓库
- XLA 贡献者/集成开发者
- 完成 Bazel/Bazelisk 安装与容器准备
- 使用配置脚本生成 bazelrc,执行构建与测试
- 运行示例测试,验证最小工作流
- 硬件后端开发者
- 明确后端(CPU/GPU/ROCm/SYCL)与编译器组合
- 在容器内或本地 hermetic 环境中完成配置与构建
章节来源 - file://README.md#L17-L35 - file://docs/developer_guide.md#L33-L124 - file://docs/build_from_source.md#L8-L184
B. 从零开始的完整设置流程(步骤清单)¶
- 安装与准备
- 安装 Bazel/Bazelisk
- 准备 Docker 环境(推荐使用 ml-build 镜像)
- 克隆与配置
- 克隆仓库并进入目录
- 运行配置脚本选择后端与编译器
- 构建与验证
- 执行 Bazel 构建
- 运行示例测试,核对输出
- 可选:LSP/clangd 与依赖清理
- 生成 compile_commands.json
- 使用 bant/buildozer 清理未使用依赖
章节来源 - file://docs/developer_guide.md#L18-L124 - file://docs/developer_environment.md#L15-L71 - file://xla/examples/axpy/README.md#L149-L190