返回 文章 apply CMS 文章

Google 开源 TorchTPU:为 TPU 提供原生 PyTorch 后端

Google 发布 TorchTPU,让 PyTorch 模型可以直接在 TPU 上高效运行。

PyTorchTPUGoogle开源
成长分 / 100 72 综合收获、行动、留存与影响

Google 开源 TorchTPU:为 TPU 提供原生 PyTorch 后端
为什么值得读了解 Google 如何通过 TorchTPU 桥接 PyTorch 与 TPU,扩展 PyTorch 的硬件生态。

获取在 TPU 上运行 PyTorch 的安装、构建和调试的实用指南。

关键洞察
  1. TorchTPU 实现了 PyTorch ATen 内核的 TPU 版本,使 PyTorch 操作能在 TPU 上执行。
  2. 项目包含编译缓存,用于优化 XLA 计算的执行效率。
  3. 支持数据并行和张量并行等分布式训练模式,并提供 Llama、Qwen、ResNet 等模型的示例。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:7683

TorchTPU 标志

描述

该项目为 Google 的张量处理单元(TPU)提供了一个 PyTorch 后端,使用户能够在 TPU 设备上运行 PyTorch 模型和操作。它包含针对各种 PyTorch 操作的自定义 ATen 内核、用于优化执行的编译缓存,以及分布式训练和模型推理的示例。

特性

  • 面向 TPU 的 PyTorch ATen 内核实现。
  • 用于优化 XLA 计算执行的编译缓存。
  • 支持分布式训练(数据并行、张量并行)。
  • 各种模型的示例(Llama、Qwen、ResNet、DLRM、minGPT、UNet)。
  • 与 torch.compile() 集成以支持图模式执行。
  • 用于调试和基准测试的实用工具。

用户指南与交互式 Notebook

用户指南可在 https://torchtpu.readthedocs.io/ 获取。这是交互式 Notebook 的静态版本。它们位于 docs 文件夹中。

这些 Notebook 是 Marimo(类似于 Jupyter)。可以用 marimo edit file.py 运行它们,然后在浏览器中访问。你需要从 TPU VM 上运行,v6e GCE 实例是最简便的选择。

安装

相同的说明可在上面链接的用户指南中获取。

TorchTPU 的 Python 版本支持策略与 PyTorch 的发布兼容性矩阵 一致。目前支持 Python 3.11+。更多详情请参阅 Python 版本支持策略。

首先创建一个 Python 虚拟环境:

python -m venv .venv
source .venv/bin/activate

或者,使用 uv

uv venv .venv
source .venv/bin/activate

通过 pip 安装

安装最新的公开发行版(PyPI 上的 0.2.0)(对于 uv,在所有 pip 命令前加上 uv):

pip install torch_tpu==0.2.0 --extra-index-url https://download.pytorch.org/whl/cpu

从源码构建

可以通过以下方式构建 wheel:

bazel build --config=wheel_common //ci/wheel:torch_tpu_wheel

所有 OSS Bazel 构建都会通过 .bazelrc 自动默认为优化模式(-c opt)。未优化的构建(-c fastbuild、-c dbg)会降低性能,不用于 wheel 构建。如果你正在开发或调试 C++ 代码并明确想要未优化的 wheel,请传入 --//:allow_unoptimized_wheel=True:

bazel build -c dbg --config=wheel_common //ci/wheel:torch_tpu_wheel \
    --//:allow_unoptimized_wheel=True

需要 --config=wheel_common,没有它构建时就会失败。该配置会设置 --//:wheel_build=True,它通过 torch_version-reset 转换来路由共享的 XLA/MLIR 后端,以便 pywrap 将其合并为单个 libxla_base.so;如果不带该标志构建,每个按版本区分的 common 都会自带一份后端副本,生成的 wheel 会在 import torch 上因重复的静态注册而中止。

wheel_common 还会开启远程构建执行(RBE)远程缓存和远程执行器。如果你没有 RBE 凭据,请追加 --config=no_rbe 以移除这些标志:

bazel build --config=wheel_common //ci/wheel:torch_tpu_wheel --config=no_rbe

这里的顺序很重要:--config=no_rbe 必须放在 --config=wheel_common 之后,因为对于它们都设置的远程缓存和远程执行器标志,后出现的配置会生效。

通过以下方式安装 wheel:

cd <path_to_repo>
python -m venv .venv; source .venv/bin/activate
# The extra-index-url provides the CPU version of torch rather than the default CUDA build.
pip install ../bazel-bin/ci/wheel/*.whl --extra-index-url https://download.pytorch.org/whl/cpu

请注意,不带 --extra-index-url https://download.pytorch.org/whl/cpu 安装会安装 CUDA 版本的 torch;请如上所示传入 --extra-index-url,或单独安装 CPU 构建。

快速开始

一些入门指引:

依赖项

该项目使用 Bazel 进行依赖管理。关键的 Python 依赖项包括:

待定

Bazel 设置

该项目使用 Bazel 进行构建和依赖管理。

要安装 Bazel,我们实际上安装的是 Bazelisk,它是一个透明包装器,负责下载和安装 Bazel 本身。

有几种方式可以安装 Bazelisk。以下是一些常见方式:

  • 如果你安装了 Go:

    go install github.com/bazelbuild/bazelisk@latest
    
  • 直接下载二进制文件:

    wget -O ~/bin/bazel https://github.com/bazelbuild/bazelisk/releases/download/v1.27.0/bazelisk-linux-amd64
    

更多安装说明请参阅 Bazelisk README

无论你如何安装,请将其位置添加到 PATH。

要验证安装,请在仓库根目录运行 bazel info:

bazel info

它应该会打印有关该仓库的信息,且不报错。

VSCode clangd 设置

对于 C++ 代码导航,建议使用 VSCode 搭配 clangd 扩展。依靠从 Bazel 操作图生成的编译数据库,clangd 能够为编辑器提供各种智能功能,包括代码补全、跳转到定义等。

  1. 通过 UI 或以下命令安装 VSCode 扩展:

    code --install-extension llvm-vs-code-extensions.vscode-clangd
    # Uninstall Microsoft C++ extensions to avoid interference.
    code --uninstall-extension ms-vscode.cpptools
    
  2. 生成初始的 compile_commands.json:

    tools/setup_clangd.py
    

首次运行进行完整构建可能需要一段时间(> 30 分钟),但重新运行将是增量的,开销很小。如果你最近运行过 bazel build,生成的文件已经存在,因此你可以传入 --no-build 来跳过等待繁重的构建(请注意,在全新的工作区中,跳过构建可能会导致 clangd 无法解析生成的文件)。更多选项请参阅脚本的文件级注释。

或者,你可以通过 nox 调用该脚本(-- 之后的参数会被转发):

nox -s refresh_compile_commands -- --no-build
nox -s refresh_compile_commands -- //src/torch_tpu/ops/...

贡献

我们欢迎对 PyTorch on TPU 项目的贡献!请参阅我们的 CONTRIBUTING.md 了解如何贡献的指南,包括签署我们的贡献者许可协议(CLA)和代码审查流程。

Star 历史

Star 历史图表

许可证

该项目采用 Apache 2.0 许可证。详情请参阅 LICENSE 文件。