The Hugging Face mascot and a smiling PyTorch logo cheering over a glowing chip, on a manga-style background.
torch_xla, 또는 JAX를 배워야 하는 상황에 처했을 수 있습니다. 네이티브 PyTorch 백엔드인 TorchTPU 덕분에, 이제 TPU는 그저 또 하나의 장치일 뿐입니다. 이는 Hugging Face 생태계에서 TPU의 네이티브 지원을 가능하게 합니다. Transformers, Diffusers 및 Kernels가 TPU에서 네이티브로 실행됩니다. 허브(Hub)에서 모델을 선택하고, 이를 "tpu"로 보내기만 하면 끝입니다.
TPU는 Tensor Processing Unit의 약자입니다. TPU는 Google 자체의 AI 가속기입니다. 이들은 하나의 작업, 즉 신경망이 가장 많은 시간을 보내는 행렬 연산을 위해 구축된 칩입니다. Google은 약 10년 동안 이를 설계해 왔으며, Gemini를 포함한 자체 모델을 학습시키고 서비스하는 데 사용합니다.
TPU는 Google Cloud에서 단일 칩부터 수천 개의 칩으로 구성된 파드(pod)까지 이용할 수 있습니다. 대규모 학습이나 서비스에 많은 컴퓨팅 능력이 필요할 때 특히 빛을 발합니다.
항상 걸림돌은 소프트웨어였습니다. TPU 스택은 TensorFlow와 JAX를 중심으로 성장했으며, PyTorch 사용자는 진입하기 위해 더 많은 노력을 기울여야 했습니다.
지금까지 PyTorch를 TPU에서 실행한다는 것은 PyTorch/XLA (torch_xla)를 거쳐야 함을 의미했습니다. 작동은 했지만, 단점들이 있었습니다. 텐서(Tensors)가 게으르게 동작했기 때문에 (사용자가 아니라 텐서 자체가), 코드가 항상 의도한 대로 실행되지는 않았습니다. 사소한 변경만으로 그래프 재컴파일이 트리거될 수 있었고, 디버깅하기가 어려웠습니다.
사용하기 쉽게 만들기 위해, 저희는 Optimum TPU를 구축했습니다. 이는 Hugging Face 모델에 TPU에서의 추론 및 학습 지원을 제공했습니다. 이제 TorchTPU가 네이티브 지원을 가져옴으로써, Transformers와 Diffusers를 사용한 Hugging Face 모델 실행 시 더 이상 Optimum TPU가 필요하지 않습니다.
TorchTPU는 PyTorch에 새로운 백엔드로서 TPU를 추가합니다. 사용자는 일반적인 PyTorch 코드를 작성하기만 하면 됩니다. 이에는 TPU에 최적화된 Pallas 커널(kernels)과 분산 학습 지원, 그리고 더 빠른 속도를 원할 때 사용할 수 있는 torch.compile 통합 기능이 포함되어 있습니다.
TPU VM에 설치하는 것은 단 하나의 명령어로 충분합니다:
pip install torch-tpu --extra-index-url https://download.pytorch.org/whl/cpu
추가 인덱스(extra index)는 torch의 CPU 빌드를 제공합니다. 이것이 없으면, pip은 훨씬 더 큰 CUDA 빌드를 가져오게 되는데, 이는 TPU에서는 필요하지 않습니다.
Transformers v5는 하나의 아이디어를 중심으로 구축되었습니다. 바로 모델 정의의 원천(source of truth)가 되어 어디서든 실행될 수 있도록 하는 것입니다. 이 '어디서나'에는 이제 TPU도 포함됩니다. TPU에서 모델을 로드하려면 device_map="tpu"를 전달하기만 하면 됩니다.
. 그것뿐입니다.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "Qwen/Qwen3.5-9B"
model = AutoModelForCausalLM.from_pretrained(
...
기본적으로 모델은 eager 모드에서 실행됩니다. 더 나은 성능을 위해 torch.compile를 사용하거나, 분산 설정(distributed setup)으로 실행할 수도 있습니다.
TPU는 이제 Diffusers의 첫 번째 등급 장치(first-class device)가 되었습니다. 프로토타이핑이나 디버깅을 위해서는 eager 모드에서 단지 pipe.to("tpu")만 필요합니다. 배포(deployment)를 위해서는 컴파일된 모드에서 하나의 compile 호출만 추가됩니다. 파이프라인과 코드는 그대로 유지되며, 관리해야 할 TPU 포크가 없습니다.
import torch
from diffusers import StableDiffusion3Pipeline
pipe = StableDiffusion3Pipeline.from_pretrained(
...
첫 번째 호출에서 컴파일이 이루어지며, 이후 동일한 이미지 크기로 발생하는 모든 호출은 그래프를 재사용합니다.
하나의 칩에 너무 큰 모델? from_pretrained에 TensorParallelConfig를 전달하면 로드하는 과정에서 트랜스포머가 여러 칩에 걸쳐 분할(sharded)되므로, 전체 모델이 한 곳에 들어갈 필요가 없습니다. 많은 인기 있는 파이프라인들이 이를 기본적으로 지원하며, 그렇지 않은 경우도 단지 tp_plan만 거리가 남았습니다. Diffusers TPU 가이드에 전체 레시피가 있습니다.
Cloud TPU v6e-4에서 실행된 몇 가지 예시는 다음과 같습니다:
*TP=4 (각 모델이 네 개의 칩에 걸쳐 분할) · bf16 · 배치 1
| MiniMax-H3 (video + audio) | Qwen-Image-2.1 |
|---|
| |
| |
| --- | --- |
| "고대 그리스 삼단노선(trireme)의 선수에 서 있는, 사진 속 복슬복슬한 플러시 Hugging Face 마스코트. 장밋빛 볼과 두 개의 작은 열린 손을 가진 둥근 노란 얼굴이 보인다 […] 파도 부서지는 소리, 나무가 삐걱거리는 소리, 돛대에 바람이 스치는 소리, 멀리 들리는 갈매기 소리, 그리고 낮고 서사적인 오케스트라의 고조되는 분위기." · 1344×768, 5.2 s, 49 steps · 188 s compiled, 262 s eager | |
| "촛불 옆에서 책을 읽는 마법사 모자를 쓴 카피바라, 유화 스타일" · 1024×1024, 40 steps · 3.5 s compiled, 8.0 s eager | |
| "'QWEN IMAGE 2.1'이라고 쓰인 네온 간판, 비 오는 밤, 젖은 포장도로에 비친 반사광" · 2048×2048, 40 steps | |
The Kernels Hub에는 바로 사용할 수 있는 TPU 커널이 있습니다. Kernels 라이브러리를 사용하여 하나를 로드하고 모델의 속도를 높여보세요.
TPU 커널은 Pallas로 작성되었으며, 이를 통해 하드웨어에 대한 낮은 수준의 제어(low-level control)가 가능합니다. 또한 Tokamax 라이브러리에서 커널을 가져올 수도 있습니다. 여기는 Tokamax에서 온 ragged-dot 커널이 Mixture-of-Experts 모델에 연결된 예시입니다:
from kernels import get_kernel
from transformers import AutoModelForCausalLM
from transformers.integrations.moe import ALL_EXPERTS_FUNCTIONS
...
The 배치 크기(batch size)가 클수록 이득이 큽니다. 배치 크기 64에서 Qwen3-30B-A3B의 디코딩 속도는 21.5배 빠르고, Gemma 4 26B-A4B에서는 12.8배 빠릅니다.
Decode throughput with the Hub ragged-dot kernel versus the default grouped_mm, for Qwen3-30B-A3B and Gemma 4 26B-A4B
TPU v6e-8에서의 디코드 처리량(Decode throughput): Hub 커널 대 기본 구현.
저희는 라이브러리 테스트 스위트(test suite)를 실행하여 transformers의 TPU 지원을 지속적으로 개선하고 있습니다. 현재 TPU에 대한 야간 CI(nightly CI)를 추가하고 그 결과를 (transformers dashboard)[https://huggingface.co/spaces/transformers-community/transformers-ci-dashboard]에서 확인할 수 있도록 작업 중입니다.
Transformers CI dashboard with TPU test results next to other accelerators
다른 가속기 옆에 TPU 결과가 표시된 Transformers CI 대시보드. 작업 진행 중!
아직 모든 것이 녹색은 아니지만, 저희는 괜찮습니다. TPU에서 실행되는 테스트 중 96.5%가 통과합니다. 발견하는 모든 실패 사례는 작은 재현 스크립트와 TorchTPU 리포지토리의 이슈로 남게 됩니다. 현재까지 저희는 34개의 이슈를 보고했으며, 그중 19개는 이미 수정되었습니다. TPU에서 실행하면서 Transformers 자체에서도 StaticCache나 Qwen3 텐서 병렬 계획과 같은 몇 가지 버그가 발견되었습니다. 저희가 이를 상위(upstream) 레벨에서 수정했습니다.
TPU에서 문제가 발생하면, 여러분이 발견하기 전에 저희가 먼저 찾고 싶습니다.
이제 TPU는 PyTorch 사용자들에게 더 이상 부차적인 과제가 아닙니다. TorchTPU를 설치하고 Hub에서 모델을 가져와 `