Hugging Face TorchTPU ネイティブ統合

PyTorchにおけるネイティブTPUサポート

TorchTPUは、GoogleのTensor Processing Unit (TPU) に対するネイティブなPyTorchサポートを実現し、torch_xlaやJAXのような複雑な回避策を不要にします。TPUを標準的なデバイスバックエンドとして統合することで、開発者は使い慣れたPyTorchの構文を使用して、Hugging FaceのTransformersやDiffusersモデルをTPUハードウェア上で直接実行できるようになりました。デバイスを"tpu"に設定するだけで、モデルはEagerモードで実行可能となり、パフォーマンス向上のためにtorch.compileもサポートされています。

レガシーワークフローからの脱却

従来、PyTorchをTPU上で実行するにはtorch_xlaが必要でしたが、これには遅延テンソル評価、複雑なデバッグ、頻繁なグラフ再コンパイルといった課題がありました。TorchTPUの導入により、以前のOptimum TPUライブラリが不要となり、よりシームレスな体験が提供されます。インストールは以下のコマンド1つで完了します。

pip install torch-tpu --extra-index-url https://download.pytorch.org/whl/cpu

このアプローチでは、不要なCUDA依存関係を避けるためにtorchのCPUビルドを使用し、TPUハードウェア向けに環境を最適化します。

TransformersおよびDiffusersとの統合

Transformers v5では、TPUがファーストクラスの市民として扱われるようになりました。ユーザーはfrom_pretrainedにdevice_map="tpu"を渡すことで、モデルを直接TPUハードウェアにロードできます。Diffusersの場合、パイプラインは標準の.to("tpu")メソッドを通じてTPUをサポートします。

単一チップのメモリ容量を超える大規模モデルの場合、ユーザーはTensorParallelConfigを渡すことでテンソル並列処理を実装できます。これにより、ロードプロセス中にモデルが複数のチップに分割(シャード)され、TPUポッド上で大規模なアーキテクチャを実行可能になります。

高性能カーネル

Hugging Face Kernels Hubから提供される特殊なカーネルを利用することで、TPUのパフォーマンスをさらに最適化できます。これらのカーネルはPallasで記述されており、低レベルのハードウェア制御を提供します。例えば、Mixture-of-Experts (MoE) モデルに対してTokamaxのragged-dotカーネルを使用すると、スループットが大幅に向上することが実証されています。バッチサイズ64において、Qwen3-30B-A3BやGemma 4 26B-A4Bのようなモデルのデコード速度は、デフォルトの実装と比較してそれぞれ21.5倍、12.8倍のパフォーマンス向上を記録しました。

継続的なテストと信頼性

安定性を確保するため、Hugging FaceはTPUサポートを継続的インテグレーション (CI) パイプラインに統合しています。現在、テスト対象のライブラリスイートの96.5%がTPUハードウェア上でパスしています。チームは積極的に障害を追跡し、TorchTPUリポジトリに問題を報告するとともに、Transformersライブラリへの修正をアップストリームすることで、全体的な互換性を向上させています。この継続的な取り組みにより、TPUへのデプロイを従来のGPUベースのワークフローと同等に信頼できるものにすることを目指しています。

Sources