TorchTPU
搜索文档
谷歌开源TorchTPU!TPU成PyTorch原生设备,CUDA最深的护城河开始松动
机器之心· 2026-10-24 12:34
文章核心观点 - 谷歌在PyTorch Conference 2026上宣布开源TorchTPU,这是一套让PyTorch原生运行在TPU上的完整软件栈,在Hugging Face Transformers v5中部署TPU只需传入device_map=“tpu”一个参数 [1] - 一个参数变化的背后是谷歌在软件路线上的转向,也是英伟达CUDA生态近十年来遭遇的最正面挑战 [6] - 过去十年选择PyTorch几乎等于选择CUDA,从TorchTPU开源起这道等式不再成立 [42] 背景与战略动因 - PyTorch自2016年诞生起就与CUDA深度绑定,英伟达工程师长期投入确保PyTorch在N卡上跑得最好,华尔街分析师把CUDA视为英伟达抵御对手最坚固的盾牌 [6] - 谷歌TPU十年来主要服务自家TensorFlow和JAX,PyTorch用户想用TPU需经过PyTorch/XLA转接层,付出大量额外工程成本 [6] - TorchTPU由谷歌与PyTorch娘家Meta联合开发,vLLM、SGLang、Hugging Face、Ray、TorchTitan等主流开源项目同步完成接入,23页技术报告同步发布在arXiv上 [7] - 过去一年Anthropic签下最多100万颗TPU的使用协议,Meta被曝与谷歌达成数十亿美元TPU租用合约,硬件已卖得出去,软件成为最后一块短板 [10] 技术架构与实现路径 - 谷歌2020年推出的PyTorch/XLA基于惰性张量,存在需侵入式修改源码划定可编译区域、编译延迟严重、不支持即时执行模式、分布式新原语跟进滞后等问题;TorchAX则把PyTorch算子逐个翻译成JAX执行,本质都是让PyTorch迁就JAX [12] - TorchTPU于2025年年中立项,定下运行时不依赖JAX、即时执行必须扎实、代码从GPU迁到TPU应像把.to(“cuda”)改成.to(“tpu”)一样简单的原则 [12] - 实现上基于PyTorch预留给第三方硬件的PrivateUse1接口,在PyTorch分发器中注册为新的C++后端,开发者拿到的是普通PyTorch张量,没有子类也没有包装器 [12] - 即时执行做成三档:默认Strict模式逐个分发算子并与CPU异步执行;Debug模式同步执行用于排查形状错误和NaN;DeferAndFuse为即时与编译混合模式,先攒算子到取值时自动融合成大块计算交给TPU,速度比Strict模式快50%以上并降低峰值显存占用 [16] - 三种模式共享一套分层编译缓存,同样算子序列编译一次即可反复复用 [16] - 追求极致性能可切换到torch.compile,用TorchDynamo捕获计算图后不走Inductor编译器,而是把算子映射到StableHLO交给XLA生成TPU程序,理由是复用即时模式基础设施、XLA多年检验足够稳定、Inductor成功很大程度建立在难以移植到TPU的Triton之上 [16] - 在TPU上调用torch.compile只需指定backend=“tpu” [16] - 分布式方面在Process Group层实现TPU集合通信,DDP、FSDP2和DTensor开箱即用,还支持rank 0进程多做日志等额外工作的不对称写法,这是只支持SPMD的PyTorch/XLA做不到的 [18] - 按照PyTorch/XLA官方文档说法,TorchTPU公开后将取代PyTorch/XLA [18] 性能表现与测试数据 - 覆盖面:谷歌持续在TPU上测试Hugging Face下载量最高的约5000个模型,截至报告撰写时共4917个、横跨500多个架构族,其中98%能够跑通不崩溃,在657个代表性架构里97%的输出与GPU结果数值一致 [19] - 不做专门优化的性能:仅用PyTorch标准模块写的30B参数MuseGlimmer模型,单颗TPU v7上5120序列长度预填充达每秒2.57万token、MFU为59%;4颗TPU v7上训练MFU为38%;把TorchTitan中为GPU编写的同款实现稍加修改搬过来训练MFU也有36% [21] - 规模:Qwen3 235B MoE模型上64颗TPU v7时PyTorch方案吞吐达谷歌自家JAX方案MaxText的约94%;从1024颗扩展到8192颗即一整个TPU v7 Pod,每个TensorCore吞吐只下降约6%,MFU稳定在27%到29%之间,损失曲线在各规模下几乎重合;官方博客另称Qwen 3 8B训练MFU最高可达52% [22] - 1024颗TPU v7配FSDP时TPS per TensorCore为2236、MFU 28.8%、Step time 29.3秒;8192颗配HSDP时TPS per TensorCore为2104、MFU 27.1%、Step time 31.2秒,总吞吐随芯片数量近乎线性增长 [24][25] - PyTorch在TPU上与亲儿子JAX之间的差距已被压到个位数百分比 [28] - 推理侧据SemiAnalysis InferenceX结果,TPU v7搭配vLLM-TorchTPU在8K输入1K输出场景下每百万token成本降到2.01美分,比9月首次亮相时的3.6美分低约四成 [28] - FLUX训练从开箱即时模式到完整编译优化,单步时间从11.49秒降至2.78秒;Meta的DLRM v2推荐模型在32颗TPU v7x上与谷歌高度优化的JAX基线完全持平;TorchTPU已在部分谷歌云大客户生产环境中承担推理和训练任务 [28] 生态布局与开源完整度 - 推理侧与Inferact合作的vLLM后端、与RadixArk合作的SGLang后端都保留上游原有调度器和API服务器,现有推理栈无需改动;谷歌联合Red Hat、IBM发布llm-d 1.0,在GKE上让GPU与TPU共用同一个推理入口 [30] - 训练侧TorchTitan提供稠密模型、MoE和扩散模型的预训练配方,强化学习框架VeRL合入TPU后端,Ray支持把同一工作流不同阶段分别调度到CPU、GPU或TPU [30] - 端侧前身为TensorFlow Lite的LiteRT正式加入PyTorch生态,TorchTPU、vLLM-TorchTPU、SGLang-TorchTPU和TorchTitan四个核心仓库同步开源 [30] - Meta PyTorch工程总监Jana van Greunen直言Meta不能被单一硬件架构束缚,TorchTPU已支撑其LLM、广告和推荐系统的关键生产场景,而Meta是英伟达的超级大客户 [32] 项目推进节奏 - 2025年年中项目在谷歌内部启动;同年12月路透社首次披露这一代号,称谷歌正与Meta密切合作并在考虑开源部分代码;2026年4月谷歌开发者博客公开技术架构,项目负责人在巴黎PyTorch Conference Europe登台;9月TorchTPU进入私有Beta并在SemiAnalysis推理基准中首次亮相;至今整套栈正式开源 [34] - 从考虑开源部分代码到四个核心仓库全部公开、各大项目上游合入,谷歌给出的答案比外界预期更彻底 [36] 行业竞争格局影响 - TorchTPU抹平的是框架层而非硬件差异本身,只改一行.to(“tpu”)拿不到峰值性能,因为模型形状、分片和算子选择可能本就偏向GPU;TPU的TensorCore本质是单线程处理器,形状要足够宽才能喂饱矩阵单元,与GPU靠并行跑大量小内核的思路截然不同 [38] - 细节差异需迁移者留意:TorchTPU默认采用BF16乘法加FP32累加,而PyTorch在CUDA上默认是完整FP32;默认集合通信编译方式会带来30%到40%的端到端损失,需额外标注优化;每颗TPU只能被一个进程访问,强化学习中训练与推理共置的做法暂时无法开箱支持,能跑和跑得好之间仍隔着调优工作量 [38] - 精度对比上,CUDA默认highest纯FP32、使用Tensor Cores TF32加速原语,TPU默认medium、使用Systolic MXU bfloat16;TPU在high/highest精度下需多趟算法分解,high约3倍MXU计算成本、highest约6倍计算开销 [39] - 这并非谷歌一家动作,AWS在PyTorch Conference 2026上讲述Trainium走向原生PyTorch的历程,其Neuron SDK已于今年停止支持用PyTorch/XLA做训练,转向原生TorchNeuron [39] - PyTorch正在变成一层事实上的硬件抽象层,PrivateUse1成为各家芯片接入的标准插槽,当所有硬件都能以原生方式跑同一份PyTorch代码,竞争焦点将从生态能不能用转向每美元能换来多少吞吐 [41] - 报告大部分性能数据由谷歌自己测得,还需社区在更多模型和场景中独立验证;TPU能否以足够产能和价格触达普通开发者同样决定开源的最终影响;谷歌表示未来6到12个月重点是生产环境加固、动态形状支持以及面向下一代TPU的FP8、FP4量化 [41]