GoogleがTPUネイティブPyTorchバックエンド「TorchTPU」をオープンソース化
Google open-sources TorchTPU, a native PyTorch back end for TPUs (github.com)
要約
Googleは、TPU(Tensor Processing Unit)上でPyTorchモデルを実行するためのネイティブバックエンドであるTorchTPUをオープンソースで公開しました。これにより、ユーザーはPyTorchの演算をTPUデバイスで直接実行できるようになります。このプロジェクトは、TPU向けのカスタムATenカーネル、XLA計算の最適化、分散学習やモデル推論の例を提供します。
全文翻訳
説明
このプロジェクトは、GoogleのTensor Processing Units(TPU)向けのPyTorchバックエンドを提供し、ユーザーがTPUデバイス上でPyTorchモデルや操作を実行できるようにします。これには、さまざまなPyTorch操作のためのカスタムATenカーネル、実行を最適化するためのコンパイルキャッシュ、分散トレーニングとモデル推論の例が含まれています。
特長
- TPU向けのPyTorch ATenカーネル実装。
- XLA計算の最適化された実行のためのコンパイルキャッシュ。
- 分散トレーニング(データ並列、テンソル並列)のサポート。
- さまざまなモデル(Llama、Qwen、ResNet、DLRM、minGPT、UNet)の例。
- グラフモード実行のための
torch.compile()との統合。 - デバッグとベンチマークのためのユーティリティ。
ユーザーガイドとインタラクティブノートブック
ユーザーガイドはhttps://torchtpu.readthedocs.io/で入手できます。これはインタラクティブノートブックの静的バージョンです。ノートブックはdocsフォルダにあります。
ノートブックは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
ソースからビルド
ホイールは以下のようにビルドできます:
bazel build --config=wheel_common //ci/wheel:torch_tpu_wheel
すべてのOSS Bazelビルドは、.bazelrcを介してデフォルトで最適化モード(-c opt)になります。非最適化ビルド(-c fastbuild、-c dbg)はパフォーマンスを低下させる可能性があり、ホイールビルドには使用されません。C++コードの開発またはデバッグを行っており、明示的に非最適化ホイールが必要な場合は、--//: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を設定し、共有XLA/MLIRバックエンドをtorch_version-
リセット遷移にルーティングして、pywrapがそれを単一のlibxla_base.soにファクタリングします。このフラグなしでビルドすると、バージョンごとの共通バックエンドが独自のコピーをシップし、結果のホイールは重複した静的登録により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の後である必要があります。なぜなら、後者の設定がリモートキャッシュとリモートエグゼキュータフラグの両方で優先されるからです。
ホイールは以下のようにインストールします:
cd <path_to_repo>
python -m venv .venv; source .venv/bin/activate
# --extra-index-urlは、デフォルトのCUDAビルドではなくCPUバージョンのtorchを提供します。
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依存関係は次のとおりです。
TBD
Bazelセットアップ
このプロジェクトは、ビルドと依存関係管理にBazelを使用しています。
Bazelをインストールするには、実際にはBazel自体のダウンロードとインストールを処理する透過的なラッパーであるBazeliskをインストールします。
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
インストール方法にかかわらず、その場所をPATHに追加してください。
インストールを確認するには、リポジトリのルートディレクトリでbazel infoを実行します:
bazel info
エラーなしでリポジトリに関する情報が表示されるはずです。
VSCode clangdセットアップ
C++コードナビゲーションのために、VSCodeとclangd拡張機能を使用することが推奨されます。Bazelアクショングラフから生成されたコンパイルデータベースに依存することで、clangdはコード補完、定義への移動などのさまざまなスマート機能でエディタを強化できます。
-
UIまたは次のコマンドを使用してVSCode拡張機能をインストールします:
code --install-extension llvm-vs-code-extensions.vscode-clangd # 干渉を避けるためにMicrosoft C++拡張機能をアンインストールします。 code --uninstall-extension ms-vscode.cpptools -
初期
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)への署名やコードレビュープロセスが含まれます。
スター履歴
ライセンス
このプロジェクトはApache 2.0ライセンスの下でライセンスされています。詳細については、LICENSEファイルを参照してください。