news 2026/9/9 16:07:26

XLA 如何用 Bazel 从源码构建并配置 CUDA 后端?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XLA 如何用 Bazel 从源码构建并配置 CUDA 后端?

XLA 如何用 Bazel 从源码构建并配置 CUDA 后端?

【免费下载链接】tensorflowAn Open Source Machine Learning Framework for Everyone项目地址: https://gitcode.com/GitHub_Trending/te/tensorflow

XLA(Accelerated Linear Algebra)是 TensorFlow 仓库中以独立仓库形式内置的机器学习编译器,源码位于third_party/xla/目录下。如果你的任务是修改编译器本身、调试 XLA 集成,或者需要一个带 CUDA 后端可执行文件(例如hlo_runner_main)的开发环境,就需要从源码构建 XLA 的 GPU 目标。本文基于仓库内的 build_from_source.md 与 developer_guide.md,给出在 Linux 上用 Bazel 构建 XLA 并配置 CUDA 后端(--backend=CUDA)的完整操作路径,包括无 GPU 机器上交叉构建的方法。

开始前先明确适用前提:

  • 文档中所有命令都假定你在 XLA 仓库根目录(独立 checkout 的xla/目录,即本仓库中的third_party/xla/)执行,./configure.pybazel build均以该目录为起点;
  • 构建依赖 Bazel。推荐的安装方式是通过 Bazelisk 自动下载 XLA 要求的 Bazel 版本;Bazelisk 不可用时再手动安装 Bazel。Bazel 版本由仓库根目录的.bazelversion文件声明(third_party/xla/.bazelversion),仓库已启用 bzlmod(见 third_party/xla/.bazelrc 中的common --enable_bzlmod --noenable_workspace);
  • GPU 构建依赖 Docker(推荐路径),且镜像us-docker.pkg.dev/ml-oss-artifacts-published/ml-public-container/ml-build:latest已预装 Clang 18——这正是 XLA 在 CI 中使用的编译器版本。

启动 ml-build 容器并让容器访问 GPU

文档推荐直接用 XLA CI 使用的 ml-build 镜像。启动容器并授予全部 GPU 访问权限:

docker run -itd --rm \ --gpus all \ --name xla_gpu \ -w /xla \ -v $PWD:/xla \ us-docker.pkg.dev/ml-oss-artifacts-published/ml-public-container/ml-build:latest \ bash

这条命令的副作用说明:它创建一个名为xla_gpu的容器并把当前目录挂载为/xla-v $PWD:/xla,请在本机 XLA 仓库根目录执行);--gpus all让容器内可自动探测 CUDA compute capabilities,因此需要宿主机装有 NVIDIA 驱动且 GPU 可用。如果你后续要改用 CPU 配置构建,用的是不带--gpus all的普通容器(文档中容器名为xla)。

配置 CUDA 后端

在容器内运行配置脚本,指定 CUDA 后端:

docker exec xla_gpu ./configure.py --backend=CUDA

./configure.py(实际脚本为 build_tools/configure/configure.py,仓库根目录的入口是它的符号链接)负责把编译器路径、CUDA 版本、compute capabilities 等信息写入仓库中的xla_configure.bazelrc,再由 Bazel 加载(third_party/xla/.bazelrc 最后一行try-import %workspace%/xla_configure.bazelrc)。配置时的关键行为:

  • 带 GPU 的机器上,compute capabilities 通过nvidia-smi --query-gpu=compute_cap自动探测;
  • 不带 GPU 的机器上探测必然失败,此时必须手动传参,文档给出的示例:
docker exec xla_gpu ./configure.py --backend=CUDA \ --cuda_compute_capabilities="9.0"

同时不要在启动容器时使用--gpus all。文档中的"9.0"只是示例值,应按你目标 GPU 的实际 compute capability 替换,不能照抄。

脚本还支持若干可选参数(详见 configure.py 的参数定义):--cuda_version/--cudnn_version设置后由 Bazel 下载对应版本;--local_cuda_path/--local_cudnn_path/--local_nccl_path指向本机目录;--cuda_compiler可选nvcc(默认)或clang--nccl开启后不加nonccl配置,否则生成的 bazelrc 默认包含build --config nonccl,即不含 NCCL。

执行 Bazel 构建

配置完成后构建全部 XLA 目标:

docker exec xla_gpu bazel build \ --spawn_strategy=sandboxed \ --test_output=all \ //xla/...

--spawn_strategy=sandboxed指定 Bazel 的动作执行沙箱策略;--test_output=all使测试输出完整打印。文档明确提示:首次构建耗时很长,因为要构建整条技术栈,包括 XLA、MLIR 和 StableHLO——构建期间没有输出不代表卡死,耐心等待即可。

构建以 Bazel 的成功结论收尾即为完成:所有//xla/...目标编译、链接通过,输出 Bazel 的 "Build completed successfully"。注意这条命令构建的是全部目标,不是某个单独的二进制;如果你的最终目的是某个具体产物(如hlo_runner_main),可直接只构建该目标(见下文 JAX 容器路径中的示例)。

可选路径:不用 Docker 直接构建 CUDA

文档说明,得益于 hermetic CUDA rules,可以在不装 Docker 的情况下直接在本机构建 XLA 的 GPU 目标——即使这台机器没有 GPU、没有 NVIDIA 驱动:

./configure.py --backend=CUDA bazel build \ --spawn_strategy=sandboxed \ --test_output=all \ //xla/...

无 GPU 时同样要手动指定 compute capabilities:

./configure.py --backend=CUDA --cuda_compute_capabilities="9.0"

文档同时说明:不走 Docker 构建 XLA 目标需要本机安装 Clang(CI 使用 Clang 18,更早版本"should also work",原文未承诺全部旧版本兼容)。另外在 Linux 上 CUDA 后端属于 hermetic 构建,编译器默认走rules_ml_toolchain提供的 hermetic Clang 18,./configure.py会在找不到本地 Clang 时按 hermetic 工具链处理(见 configure.py 中is_hermetic_build与 hermetic 版本逻辑)。

可选路径:在 JAX CI 容器内构建 XLA 的 CUDA 目标

如果你的目标是让 XLA 目标的构建配置与 JAX/XLA 发行版保持一致(例如用 XLA 工具复现 JAX 中产生的 workload),build_from_source.md 给出了基于 JAX CI/Release 容器的完整流程:

  1. 克隆 JAX 仓库并进入jax目录,运行./ci/utilities/run_docker_container.sh启动名为jax的容器(该脚本属于 JAX 仓库,不在本仓库内);
  2. 容器内构建jax-cuda-plugin目标:docker exec jax ./ci/build_artifacts.sh jax-cuda-plugin,此步骤会生成带 CUDA/cuDNN 支持所需的构建配置(.jax_configure.bazelrc);
  3. 进入容器交互 shell:docker exec -ti jax /bin/bash(此时位于容器内/jax目录);
  4. 构建 XLA 目标,文档给出的示例目标:
/usr/local/bin/bazel build \ --config=cuda_libraries_from_stubs \ --verbose_failures=true \ @xla//xla/tools/multihost_hlo_runner:hlo_runner_main

需要覆盖 hermetic 环境变量时追加,例如--repo_env=HERMETIC_CUDA_COMPUTE_CAPABILITIES="sm_90"

  1. 产物拷回宿主机:cp bazel-bin/external/xla/xla/tools/multihost_hlo_runner/hlo_runner_main ./dist/,然后exit退出容器。

这条路径的产物是hlo_runner_main可执行文件,可用于运行 HLO workload。

验证与已知限制

文档没有给出独立的构建后检查命令,验证方式就是 Bazel 构建本身://xla/...(或你指定的目标)全部编译链接成功,且带--test_output=all时相关测试输出打印完整。构建失败时优先看 Bazel 报告的最后一条 action 错误;--verbose_failures=true(JAX 容器路径中已带上)会给出更详细的失败信息。

已知限制,均来自源文档:

  • 无 GPU 机器:可以构建 CUDA 目标,但启动容器时不能带--gpus all,且./configure.py阶段必须手动传--cuda_compute_capabilities
  • Windows 不支持直接构建 CUDA:文档明确 XLA 在 Windows 上原生构建是 CPU-only 的,需要 CUDA 支持必须使用 WSL2;
  • 首次构建耗时:整栈(XLA、MLIR、StableHLO)从零构建,时间显著,这是预期行为而非故障;
  • 仓库内的 third_party/xla/README.md 提醒:如果你只是用 XLA 编译 PyTorch / TensorFlow / JAX 项目,不需要克隆并构建此仓库,构建文档面向 XLA 贡献者和集成调试者。

需要继续深入了解构建产物用途(如 multihost hlo runner)时,可参考 tools_multihost_hlo_runner.md;构建环境的完整准备(克隆代码、Bazelisk 安装、Docker 配置)见 developer_guide.md。

【免费下载链接】tensorflowAn Open Source Machine Learning Framework for Everyone项目地址: https://gitcode.com/GitHub_Trending/te/tensorflow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 16:07:12

数据结构图全解析:存储、遍历与最短路径算法实践

1. 图的存储结构选型:邻接矩阵与邻接表的深度抉择 写数据结构图这篇续作之前,先聊个有意思的现象。上篇我们讨论了图的基本概念、术语和抽象数据类型,这次一上来就得面对一个绕不开的问题:图到底怎么存在内存里?很多初…

作者头像 李华
网站建设 2026/9/9 16:05:53

Eclipse 新手入门指南:从安装配置到常见报错排查

简介:这是一份面向Eclipse初学者的2024最新版基本使用讲解资料包,旨在帮助零基础或刚接触Java开发的新手快速熟悉Eclipse的下载安装、界面布局、工程创建、代码编写与调试运行等核心操作,解决环境配置繁琐、功能入口不清晰等常见问题。资源整…

作者头像 李华
网站建设 2026/9/9 16:03:29

被动式太阳能遮阳建模全攻略:从太阳几何到建筑节能优化

“今年MCM美赛的问题E落在了被动式太阳能遮阳上。说实话,看到这个题我第一反应是开心——这题比‘预测类’题目好写得多,因为它有明确的物理内核,又有足够大的建模空间。被动式太阳能遮阳的本质,是‘用几何设计代替能源消耗’&…

作者头像 李华
网站建设 2026/9/9 16:03:15

京东云与摩尔线程达成深度合作,拟建十万卡国产智算集群

9月9日,在2026京东全球科技探索者大会上,京东云宣布拟建设十万卡全功能GPU集群,打造超大规模国产智算基础设施。该集群以摩尔线程全功能GPU为算力底座,聚焦大模型训练、推理及具身智能等关键领域,向全行业开放算力&…

作者头像 李华
网站建设 2026/9/9 16:01:12

Qt控件实战指南:从布局调优到串口绘图与打包部署

简介:Qt控件大全是一套面向Qt开发者的控件集合资源,集中收录了多种Qt4环境下可直接借鉴的界面组件,无论是刚接触Qt的初学者,还是需要拓展自定义控件的进阶开发者,都能从中获得参考。压缩包共60个文件,以cpp…

作者头像 李华
网站建设 2026/9/9 15:59:17

IT监控运维管理平台建设方案:构建智能化、主动式IT监控运维平台,变被动为主动,提前预防和智能处理故障

该方案针对传统被动式IT运维响应慢、效率低等痛点,提出构建统一、智能的主动监控运维平台。通过精细化分层监控、智能化故障预警与自动修复,以及自动化运维任务,实现从“人工救火”到“主动巡防”的模式转变,从而全面提升运维效率…

作者头像 李华