TorchTPU: PyTorch Backend voor Google TPU's

Functionaliteiten

  • PyTorch ATen-kernel implementatie voor TPU.
  • Compilatiecache voor geoptimaliseerde uitvoering van XLA-berekeningen.
  • Ondersteuning voor gedistribueerde training (Data Parallelism, Tensor Parallelism).
  • Voorbeelden voor diverse modellen (Llama, Qwen, ResNet, DLRM, minGPT, UNet).
  • Integratie met torch.compile() voor uitvoering in grafiekmodus.
  • Hulpprogramma's voor debugging en benchmarking.

Gebruikershandleiding en Interactieve Notebooks

Een gebruikershandleiding is beschikbaar op https://torchtpu.readthedocs.io/. Dit is een statische versie van de interactieve notebooks, die te vinden zijn in de docs-map.

De notebooks maken gebruik van Marimo (vergelijkbaar met Jupyter). Deze kunnen worden uitgevoerd met het commando marimo edit file.py, waarna ze via de browser toegankelijk zijn. Hiervoor is een TPU VM vereist; een v6e GCE-instantie is hiervoor de eenvoudigste optie.

Installatie

Dezelfde instructies zijn beschikbaar in de bovengenoemde gebruikershandleiding. Het beleid voor de ondersteuning van Python-versies van TorchTPU komt overeen met de Release Compatibility Matrix van PyTorch.

Momenteel wordt Python 3.11+ ondersteund. Raadpleeg het Python Version Support Policy voor meer details.

Virtuele omgeving aanmaken

Maak eerst een Python-virtuele omgeving aan:

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

Of met uv:

uv venv .venv
source .venv/bin/activate

Installatie via pip

Installeer de nieuwste publieke release (0.2.0 op PyPI). Gebruikers van uv kunnen uv voor alle pip-commando's plaatsen:

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

Bouwen vanuit broncode

Wheels kunnen worden gebouwd via:

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

Alle OSS Bazel-builds staan standaard op de geoptimaliseerde modus (-c opt) via .bazelrc. Niet-geoptimaliseerde builds (-c fastbuild, -c dbg) kunnen de prestaties verslechteren en worden niet gebruikt voor wheel-builds. Indien u C++-code ontwikkelt of debugt en expliciet een niet-geoptimaliseerde wheel wilt, gebruik dan:

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

De vlag --config=wheelcommon is verplicht; zonder deze vlag mislukt de build. Deze configuratie stelt --//:wheelbuild=True in, wat de gedeelde XLA/MLIR-backend via de torchversion-reset transitie routeert, zodat pywrap dit verwerkt in één enkele libxlabase.so. Zonder deze vlag verzendt elke per-versie common zijn eigen kopie van de backend, waardoor de resulterende wheel bij het importeren van torch afbreekt vanwege dubbele statische registraties.

wheelcommon activeert ook de Remote Build Execution (RBE) remote cache en remote executor. Als u geen RBE-gegevens heeft, voeg dan --config=norbe toe om deze vlaggen te verwijderen:

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

Let op dat de volgorde hier belangrijk is: --config=norbe moet ná --config=wheelcommon komen, omdat de laatste configuratie prioriteit heeft voor de remote-cache en remote-executor vlaggen die ze beide instellen.

Installeer de wheel via:

cd <path_to_repo>
python -m venv .venv; source .venv/bin/activate
# De extra-index-url zorgt voor de CPU-versie van torch in plaats van de standaard CUDA-build.
pip install ../bazel-bin/ci/wheel/*.whl --extra-index-url https://download.pytorch.org/whl/cpu

Let op: Als u installeert zonder --extra-index-url https://download.pytorch.org/whl/cpu, zal de CUDA-versie van torch worden geïnstalleerd. Gebruik de vlag zoals getoond of installeer de CPU-build apart.

Aan de slag

Enkele handige links om te beginnen:

  • PyTorch: Officiële PyTorch-documentatie.
  • Tutorials and examples: Makkelijk te begrijpen PyTorch-code met gebruik van TorchTPU.
  • Public APIs: De TorchTPU-API's die u kunt gebruiken.

Afhankelijkheden

Het project maakt gebruik van Bazel voor afhankelijkheidsbeheer. De belangrijkste Python-afhankelijkheden zijn: (Nog te bepalen/TBD)

Bazel setup

Dit project gebruikt Bazel voor het bouwen en afhankelijkheidsbeheer. Om Bazel te installeren, installeren we in feite Bazelisk, een transparante wrapper die het downloaden en installeren van Bazel zelf afhandelt.

Er zijn verschillende manieren om Bazelisk te installeren:

Als u Go heeft geïnstalleerd:

go install github.com/bazelbuild/bazelisk@latest

Het binary direct downloaden:

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

Raadpleeg de Bazelisk README voor meer installatie-instructies. Voeg, ongeacht de installatiemethode, de locatie toe aan uw PATH.

Verifieer de installatie door bazel info uit te voeren in de root-directory van de repository:

bazel info

Dit zou informatie over de repository moeten printen zonder fouten.

VSCode clangd Setup

Voor C++-codenavigatie wordt aangeraden om VSCode te gebruiken met de clangd-extensie. Door te vertrouwen op een compilatiedatabase die is gegenereerd vanuit de Bazel action graph, kan clangd de editor verrijken met slimme functies, waaronder code-aanvullingen, 'go-to-definitions', etc.

Installeer de VSCode-extensies via de UI of via het volgende commando:

code --install-extension llvm-vs-code-extensions.vscode-clangd
# Verwijder Microsoft C++ extensies om interferentie te voorkomen.
code --uninstall-extension ms-vscode.cpptools

Genereer de initiële compile_commands.json:

tools/setup_clangd.py

De eerste run kan een tijd duren (> 30 minuten) om een volledige build te maken, maar volgende runs zullen incrementeel en snel zijn. Als u onlangs bazel build heeft uitgevoerd, bestaan de gegenereerde bestanden al en kunt u --no-build meegeven om het wachten op zware builds over te slaan (let op: in een nieuwe workspace kan het overslaan van de build ervoor zorgen dat clangd gegenereerde bestanden niet kan vinden). Zie de commentaren in het scriptbestand voor meer opties.

Alternatief kunt u het script aanroepen via nox (argumenten na -- worden doorgegeven):

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

Bijdragen

Bijdragen aan het PyTorch on TPU-project zijn welkom! Raadpleeg CONTRIBUTING.md voor richtlijnen over hoe u kunt bijdragen, inclusief het tekenen van onze Contributor License Agreement (CLA) en de processen voor codereviews.

Licentie

Dit project is gelicentieerd onder de Apache 2.0 License. Zie het LICENSE-bestand voor details.