TPU 是什麼,以及 PyTorch 使用者為何長期繞路
Hugging Face 在 2026 年 10 月 20 日發佈的技術文章中,介紹 TorchTPU 這個把 TPU 變成 PyTorch 原生後端的方案,並說明它如何在自家生態系中落地。文章由 Alvaro Moran、Jingya Huang、Simon Pagezy、Jeff Boudier 與 Régis Pierrard 共同撰寫。要理解這件事的意義,得先回到 TPU 與 PyTorch 之間長期的關係。
TPU 全名是 Tensor Processing Unit,中文常譯為張量處理單元。它是 Google 自行設計的 AI 加速器,設計目標相當集中:處理神經網路絕大多數時間都花在其中的矩陣運算。Google 投入這條路線大約十年,自家模型的訓練與推論,包括 Gemini,都跑在 TPU 上。在 Google Cloud 上,使用者可以從單顆晶片一路租用到由數千顆晶片組成的 pod,因此 TPU 最適合大規模訓練與高流量推論這類需要大量算力的場景。
門檻一直不在硬體,而在軟體。TPU 的軟體堆疊是圍繞 TensorFlow 與 JAX 發展起來的,PyTorch 使用者想用就得另外找路。過去最常見的作法是將程式碼移植到 PyTorch/XLA,也就是 torch_xla。這條路可行,卻有明顯的副作用:tensor 採延遲執行,程式碼不會在你以為的時機真正跑完;小幅改動就可能觸發計算圖重新編譯;除錯時很難掌握實際發生什麼事。Hugging Face 曾因此打造 Optimum TPU,讓自家模型能在 TPU 上進行推論與訓練。
TorchTPU 的核心定位與安裝方式
TorchTPU 的定位,是把 TPU 加進 PyTorch 成為新的原生後端,TPU 從此只是另一個裝置。開發者寫的是一般 PyTorch 程式碼,不必改寫成 XLA 風格。它內含針對 TPU 調校的 Pallas kernel,支援分散式訓練,並整合 torch.compile 供需要更高速度時使用。原生支援到位之後,要讓 Hugging Face 模型透過 Transformers 與 Diffusers 在 TPU 上執行,已經不再需要 Optimum TPU 這個中介層。
在 TPU VM 上的安裝只要一行指令:pip install torch-tpu --extra-index-url https://download.pytorch.org/whl/cpu。其中額外索引指向 PyTorch 的 CPU 版本;若不指定,pip 會下載體積大得多的 CUDA 版本,而 TPU 環境並不需要它。
Transformers 與 Diffusers 的原生支援
Transformers v5 的設計圍繞一個想法:成為模型定義的唯一來源,讓同一份定義能跑在任何裝置上,而「任何裝置」現在包含 TPU。要在 TPU 上載入模型,只要在 from_pretrained 時傳入 device_map="tpu",模型就會直接載入 TPU。文件示範以 Qwen/Qwen3.5-9B 為例:載入模型與 tokenizer 後,將輸入張量送到 "tpu",再呼叫 generate,最後解碼輸出。模型預設以 eager 模式執行,也可以改用 torch.compile 取得更好效能,或放進分散式設定中執行。
Diffusers 則把 TPU 視為第一級裝置。若只是原型開發或除錯,eager 模式只需要一行 pipe.to("tpu"),程式碼與流程完全不變,也不需要維護 TPU 專屬分支。進入部署階段時,編譯模式再加一次 compile 呼叫即可,例如對 transformer 使用 backend="tpu"、fullgraph=True、dynamic=False。首次呼叫會進行編譯,之後只要影像尺寸相同,就會重複使用同一張計算圖。文件中以 Stable Diffusion 3.5 medium 示範這個流程。
如果模型大到單顆晶片放不下,可以在 from_pretrained 時傳入 TensorParallelConfig,讓 transformer 在載入過程中就分片到多顆晶片,完整模型因此不必塞進同一個地方。多數熱門 pipeline 已內建支援,尚未支援的也只差一份 tp_plan。Diffusers 的 TPU 指南提供了完整做法。
在 Cloud TPU v6e-4 上的影像與影片生成實測
來源列出在 Cloud TPU v6e-4 上執行的範例,設定為 TP=4,也就是每個模型分散到四顆晶片,精度 bf16,batch size 為 1。MiniMax-H3 這種同時產生影片與音訊的模型,在 1344×768 解析度、5.2 秒長度、49 步的條件下,編譯模式耗時 188 秒,eager 模式為 262 秒。Qwen-Image-2.1 在 1024×1024、40 步的設定下,編譯模式 3.5 秒,eager 模式 8.0 秒;同一模型另有 2048×2048、40 步的範例。這些數字說明編譯模式在重複使用計算圖時,對影像生成延遲有明顯改善。
以 Pallas 撰寫的 TPU Kernel 與 Mixture-of-Experts 加速
Kernels Hub 上已有可直接使用的 TPU kernel。透過 Kernels 函式庫載入後,就能替模型帶來速度提升。TPU kernel 以 Pallas 撰寫,Pallas 是 Google 為 TPU 這類加速器設計的 kernel 撰寫語言,能讓開發者取得低階硬體控制能力;也可以引入 Tokamax 函式庫中的 kernel。文章示範把 Tokamax 的 ragged-dot kernel 接到 Mixture-of-Experts 模型上。Mixture-of-Experts 中文常稱混合專家模型,是一種讓不同輸入只啟用部分參數的架構,藉此在有限算力下放大模型規模。實作時先以 get_kernel 取得 tengomucho/ragged-dot-tpu,再透過 ALL_EXPERTS_FUNCTIONS.register 註冊,最後以 experts_implementation 參數指定給 Qwen/Qwen3-30B-A3B-Instruct-2507。
batch 越大,效果越明顯。在 TPU v6e-8 上以 batch size 64 測試,使用 Hub kernel 與預設實作相比,Qwen3-30B-A3B 的解碼速度提升 21.5 倍,Gemma 4 26B-A4B 則提升 12.8 倍。這類加速來自針對 TPU 硬體特性調整的 kernel,而不是通用設定的結果;也就是說,kernel 的調校品質直接決定了 TPU 在推論階段的實際表現。
測試覆蓋、已知限制與實際意義
Hugging Face 也持續在 TPU 上執行 transformers 的測試套件,以改善支援品質。目前的作法是努力建立 nightly CI,並把結果放上 transformers 的 CI dashboard,與其他加速器的結果並列。這項工作仍在進行中,並非全數通過;在 TPU 上執行的測試裡,96.5% 通過。每一個失敗案例都會被整理成小型重現腳本,並在 TorchTPU 專案回報。到目前為止,已回報 34 個問題,其中 19 個已經修好。在 TPU 上執行的過程也發現了 Transformers 本身的幾個 bug,例如 StaticCache 與 Qwen3 的 tensor-parallel 計畫,這些都已在 upstream 修正。這種安排的目的很直接:如果 TPU 上會出問題,希望在其他人遇到之前先被找出來。
對 PyTorch 使用者來說,TPU 不再是需要繞路的支線任務。安裝 TorchTPU、從 Hub 取一個模型、送到 "tpu",就是完整的起點。這也讓 Hugging Face 生態系中的 Transformers、Diffusers 與 Kernels 能在 TPU 上以原生方式運作。需要留意的是,支援仍在演進,測試尚未全綠,kernel 與分散式設定的調校也需要一些硬體知識;換來的是不必再為了用 TPU 而改寫整個工作流程,對於已經熟悉 PyTorch 的團隊而言,這大幅降低了嘗試 TPU 的前期成本。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。