软件栈
StableHLO
也称为 StableHLO、HLO、MHLO
先用大白话
StableHLO 是一种标准化的中间表示,PyTorch、JAX 等框架把程序输出成这种格式,再由 XLA 编译器转成 TPU 机器码。
技术定义
StableHLO 是基于 MLIR 的可移植、带版本的算子集,在高层张量运算的层面描述机器学习程序,作为框架与 XLA 编译器之间的交接格式。
工程细节
在 TorchTPU 的编译路径中,TorchDynamo 和 AOTAutograd 捕获 FX 图,TorchTPU 把它降级为 StableHLO,XLA 再把它编译成 TPU 可执行文件。在 JAX 路径中,jax.jit 把程序追踪为同一种表示。由于 StableHLO 跨版本稳定,序列化后的程序可以稍后编译,或由不同版本的框架编译。它位于硬件之上、框架之下,因此不包含 MXU tile 尺寸的信息,padding 和布局决策由 XLA 之后再加。
为什么重要
共享的 IR 让 vLLM 和 SGLang 无论模型来自 PyTorch 还是 JAX,都能复用同一套编译器栈。这也意味着绕过 StableHLO 做手工调优的 Pallas kernel 必须以 custom call 的形式显式调用,编译器不会自动发现它们。
如何在 InferenceX 中解读
TPU InferenceX 预览中所有 Qwen3.5 397B 结果都经过 StableHLO 到 XLA 的路径。文章把它与 GPU PyTorch 路径对比,后者的 torch.compile 降级到 Inductor 和 Triton。