换掉 PyTorch/XLA 的那一层
在 TPU 上跑 PyTorch,过去要么改用 JAX,要么走 2020 年推出的 PyTorch/XLA。后者基于惰性张量,需要在源码里手动划出可编译区域,编译延迟高、不支持 PyTorch 原生的 eager 模式,小改动还可能触发整图重编译。PyTorch 官方博客介绍的 TorchTPU 是 Google 2025 年年中启动、与 Meta PyTorch 团队合作的项目,目标是把 TPU 做成 PyTorch 的一个普通设备:eager 执行优先,现有代码把 .to("cuda") 换成 .to("tpu") 就能先跑起来;要提速再用基于 TorchDynamo 的 torch.compile;DDP、FSDP、DTensor 等分布式写法通过最底层的进程组接口接上 TPU 的集合通信。
按官方截至发文时的进度:支持约 450 个 ATen 算子,覆盖主流架构所需核心算子的前向和反向;下载量最高的 5000 个 Hugging Face 模型可开箱运行;vLLM、SGLang 多机推理和 TorchTitan 训练已经验证;部分最大的 Google Cloud 客户已在生产中用它做训练和推理。
Hugging Face 这一侧
Hugging Face 10 月 20 日跟进:Transformers v5、Diffusers 和 Kernels 原生支持 TPU,加载模型时传 device_map="tpu" 即可,此前专门做的 Optimum TPU 不再需要。Kernels Hub 上的 Pallas 内核可以直接插进模型,例如 Tokamax 的 ragged-dot 内核用在混合专家模型上,在 TPU v6e-8、批大小 64 时,Qwen3-30B-A3B 的解码速度提升 21.5 倍,Gemma 4 26B-A4B 提升 12.8 倍;这组数字只覆盖这两个模型和这一配置。
Hugging Face 也公布了还没做完的部分:在 TPU 上实际运行的 Transformers 测试通过率为 96.5%,每个失败都会整理成复现脚本,目前已向 TorchTPU 报告 34 个问题、修复 19 个,顺带修掉了 Transformers 自身 StaticCache 和 Qwen3 张量并行方案的几个缺陷。
迁移前要知道的限制
TPU 的矩阵单元原生使用 BF16,TorchTPU 默认用 BF16 乘法加 FP32 累加;需要更高精度可以切到 3 遍或 6 遍算法,代价约为 3 倍和 6 倍算力。每块 TPU 只能被一个用户态进程访问,所以分布式按「每设备一个进程」组织,强化学习里常见的训练与推理同机共置暂时做不了。官方也提醒,改一行代码只保证「能跑」,形状、切分方式偏向 GPU 设计的模型要拿到 TPU 的峰值性能还得调。
这与同一天 AWS 为 Trainium 开源的 TorchNeuron 是同一个方向:云厂商都在把自家芯片包装成 PyTorch 原生设备,降低用户离开 CUDA 的成本。
via: PyTorch Blog:Introducing TorchTPU、Hugging Face:Hugging Face ❤️ TorchTPU: TPUs, Natively