AI 快讯PyTorch要做AI编译器的“C语言”
行业快讯

PyTorch要做AI编译器的“C语言”

2026-07-28T08:03:51.428Z
PyTorch要做AI编译器的“C语言”

PyTorch提出“参考语言”路线,试图让模型代码、编译器与不同AI芯片共享一套语义契约。这不是新编译器发布,而是对AI开发栈标准入口的争夺。

PyTorch要做AI编译器的“C语言”

PyTorch正在尝试从一个主流训练框架,进一步变成AI编译器和硬件后端共同遵循的“参考语言”。 7月25日,PyTorch编译器团队在最新一期 Compiler DevLog 中提出“PyTorch: A Reference Language”,核心思路是把PyTorch程序的行为定义为一套可供编译器、运行时和AI芯片实现对齐的语义基准。

这篇文章更像一份路线声明,而不是一次带版本号的产品发布。官方没有同时推出一个全新的编译器、模型格式或硬件中间表示,也没有公布新的性能跑分;它真正释放的信号是,PyTorch希望掌握AI开发栈里比框架市场份额更底层的东西——编程语义的定义权

参考语言是用来规定程序“应该如何运行”的语义基准,而不要求所有平台采用相同的底层实现。 类似C语言为不同CPU和编译器提供共同的源代码抽象,PyTorch希望开发者写出的张量计算、自动微分和控制流,可以在不同编译器与GPU、NPU、AI加速器上保持可预测的行为。

PyTorch参考语言位于模型代码、编译器中间层与GPU/NPU硬件后端之间的架构示意图

这不是又造一个IR

“PyTorch参考语言”最容易被误解为一种新的编译器中间表示,但两者解决的问题并不相同。 IR,也就是中间表示,主要负责承载编译过程中的计算图;参考语言则回答更靠前的问题:一段PyTorch程序究竟是什么意思,哪些行为属于稳定契约,后端实现需要在哪些地方保持一致。

PyTorch当前的编译链已经包含多个层次。torch.compile通常通过TorchDynamo捕获Python程序,通过AOTAutograd拆分和生成前向、反向计算,再由TorchInductor完成后端代码生成;torch.export则面向更严格的整图导出与部署场景。相关实现均可在PyTorch主仓库中查看。

现有链路解决了“如何把PyTorch跑快”,参考语言路线则试图解决“不同实现怎样仍然算是PyTorch”。 这两个问题并不等价:一个后端即使能够接收FX图或ATen算子,也可能在数据类型提升、动态形状、原地修改、随机数状态或梯度计算上表现不同。

一套可信的参考语义至少要覆盖以下问题:

  • 张量语义必须一致。 广播规则、维度变化、标量与张量混算、数据类型提升以及边界条件都不能由后端自行猜测。
  • 别名与修改行为必须可描述。 两个张量是否共享存储、原地操作会影响哪些值,是编译器进行重排和融合时最容易踩到的雷区。
  • 自动微分必须属于语言契约。 前向计算相同,并不意味着反向图、梯度累积与高阶梯度自然一致。
  • 动态程序必须有明确边界。 Python控制流、动态形状、运行时条件和图断点,决定了一段代码能否被完整捕获与提前编译。
  • 算子分解必须保持语义。 复杂算子可以被拆成更小的核心算子,但拆分前后的数值、梯度和别名行为不能悄悄变化。

PyTorch为什么现在谈“语言”

AI框架的竞争正在从前端API转向编译器和硬件适配层。 PyTorch早已不只是一个供研究人员调用算子的Python库,训练、推理、模型导出、分布式执行和硬件适配都在围绕其编程模型展开。

过去几年,行业通常用增加“转换器”的办法处理生态割裂:PyTorch模型导出到某种图格式,再转换到芯片厂商的IR,最后映射到特定算子库。每多一层转换,就多一处语义丢失、算子不支持和性能回退的可能。

统一参考语言可以把理想状态下的适配复杂度从前端与后端两两连接的N×M关系,压缩为围绕共同契约的N+M关系。 前端只需正确表达共同语义,后端只需证明自己符合这套语义,而不必为每一种模型框架重新实现一条特殊转换链。

这个判断也解释了PyTorch为何要强调“参考”,而不是直接宣布一种排他的标准。AI芯片的执行模型差异很大:GPU擅长大规模并行,部分NPU偏好静态图和固定形状,边缘设备又受内存与功耗限制。统一底层实现不现实,统一上层行为却有机会成为最大公约数。

它与ONNX、StableHLO和Triton不是同一层

PyTorch参考语言不会自动取代ONNX、StableHLO或Triton,因为这些项目处于编译栈的不同位置。 真正可能发生的变化,是PyTorch从这些技术的“输入来源之一”,变成越来越多工具默认对齐的源语言语义。

| 项目或路线 | 核心定位 | 主要使用者 | 擅长解决的问题 | 主要局限 | |---|---|---|---|---| | PyTorch参考语言 | 源程序语义基准 | 模型开发者、编译器与芯片后端 | 规定PyTorch程序、自动微分、修改与动态行为应该如何解释 | 仍需明确稳定子集、版本规则和一致性测试 | | ONNX | 模型交换格式与算子规范 | 框架、推理引擎、部署平台 | 跨框架传输计算图和参数 | 难以完整表达Python动态行为及所有框架语义 | | StableHLO | 稳定的高层算子IR | 编译器和机器学习系统 | 在编译链之间提供可序列化、可版本化的高层表示 | 更接近编译器IR,不是开发者直接使用的完整语言 | | Triton | GPU内核编程语言与编译器 | 内核开发者、编译器后端 | 编写高性能矩阵、归约和融合内核 | 关注内核实现,不负责定义完整模型程序的语义 | | TorchInductor | PyTorch默认编译后端之一 | PyTorch编译器与用户 | 将捕获后的图生成面向CPU、GPU等目标的代码 | 是具体实现,不等同于跨后端参考规范 |

ONNX更像装模型的标准集装箱,StableHLO更像编译器之间交接货物的清单,Triton则接近为GPU工人编写的操作手册。 PyTorch参考语言想做的是规定货物本身的名称、尺寸和处理规则,因此它与这些项目既有竞争,也有互补关系。

ONNX不会因此失去跨框架交换的价值,StableHLO也仍然适合稳定地连接编译器组件。真正承压的是那些只完成“PyTorch算子到自有算子一一翻译”、却没有系统处理动态形状、别名和自动微分语义的后端。

真正难点不是算子数量,而是Python行为

PyTorch成为主流框架的重要原因,恰恰也是它成为参考语言的最大障碍:它允许开发者以接近普通Python的方式编写模型。 Python对象、列表修改、数据相关控制流、异常、第三方库和运行时副作用,都可能出现在模型代码周围,而硬件编译器通常希望看到静态、纯函数化且形状明确的计算图。

TorchDynamo的思路是在Python字节码层面观察程序并捕获可编译区域,同时通过guards记录形状、类型和对象状态等假设。当假设不再成立时,系统需要重新编译或回退;当部分行为无法捕获时,程序还可能出现graph break。这个方案保留了PyTorch的灵活性,却也说明“兼容PyTorch”远比支持一张静态算子表复杂。

参考语言最终大概率不会等于“整个Python加全部PyTorch行为”。 更可行的路线,是把可编译、可导出、可验证的PyTorch子集定义清楚,再通过算子分解和功能化转换,把复杂程序逐步归约到较小的核心语义集合。

功能化转换是将原地修改和别名相关操作改写为更适合编译器分析的纯函数形式。AOTAutograd则提前获得前向与反向图,让编译器能够跨越自动微分边界进行优化。两者都表明,统一抽象并不意味着把用户代码原封不动交给芯片,而是要在不改变可观察行为的前提下规范化程序。

对开发者有什么实际价值

参考语言短期内不会让现有PyTorch代码凭空提速,但它可能降低模型跨设备迁移时的不可预测性。 官方此次没有给出延迟、吞吐量或显存占用的对比数字,因此不能把这项路线声明解读成一次性能升级。

对于模型开发者,最直接的潜在收益是“能否编译”和“编译后是否一致”变得更容易判断。现在同一个模型可能在GPU后端完整编译,在另一款加速器上因动态形状失败,又在第三个后端上因为某个原地操作产生结果偏差;如果各方共享一致性测试,这类问题至少可以更早暴露。

对于芯片厂商,参考语言提供了一个比追逐全部Python行为更现实的适配目标。厂商可以围绕稳定的核心算子、类型系统、形状约束和自动微分规则构建后端,再通过硬件专用内核争夺性能,而不是各自维护一套含义略有差异的“类PyTorch”接口。

对于编译器开发者,统一语义可以减少前端修补代码。编译优化最怕未定义或依赖具体实现的行为,因为算子融合、内存复用和执行顺序调整都可能改变结果;参考语言越明确,优化器可以安全移动的边界就越清楚。

PyTorch也在争夺事实标准

把PyTorch定义为参考语言,本质上也是一场生态权力的上移。 当一种框架只提供API时,芯片厂商仍可把它转换到自己的标准;当这种框架开始定义语言语义、导出契约和一致性测试时,其他编译器与硬件就要围绕它安排路线图。

这种策略并非没有依据。大量研究代码、开源模型和训练基础设施已经使用PyTorch编程模型,开发者不会仅仅为了部署而主动学习另一套完整语言。相比重新发明一种AI编程语言,把既有用户习惯整理成参考规范,落地阻力明显更小。

事实标准的风险在于,生态统一可能演变成对单一项目治理节奏的依赖。 如果核心语义频繁变化,后端厂商仍会疲于追赶;如果参考子集过于保守,它又只能覆盖简单推理图,无法代表真实的训练与智能体工作负载。

PyTorch还需要回答版本兼容问题。模型在今年导出的语义能否由两年后的运行时正确解释,新算子的加入是否破坏旧后端,数值误差允许多大,不同随机数实现如何比较,这些问题比提出“统一抽象”更难,也决定了参考语言能否成为真正的跨厂商契约。

判断它是否落地,要看三个信号

PyTorch参考语言目前更值得被视为方向,而不是已经完成的行业标准。 接下来至少有三个可验证信号,能够判断这件事是否从理念走向工程现实。

  1. 是否出现可版本化的规范。 一套参考语言不能只依赖当前PyTorch实现,它需要明确哪些行为稳定、哪些属于实验能力,以及版本之间如何兼容。
  2. 是否建立跨后端一致性测试。 真正的标准必须允许GPU、NPU和独立编译器运行同一批测试,并对数值、形状、梯度、别名与错误行为给出可比较结果。
  3. 是否有独立实现通过验证。 只有当不依赖PyTorch默认执行路径的后端也能实现相同语义,“参考语言”才不只是官方实现的另一种说法。

OpenAI Hub观点:统一入口比统一后端更现实

PyTorch这次最有价值的判断,是承认AI计算不可能统一到一种硬件,却可能统一到一种开发者可理解的编程抽象。 GPU、NPU和各类专用加速器仍会使用不同内核、内存布局与编译策略,但模型作者没有必要为每块芯片重写一遍业务逻辑。

这条路线短期不会消灭格式转换、算子缺失或性能调优,也不会让ONNX、StableHLO和Triton失去价值。它更像是在现有技术栈上增加一条“语义主线”:上层代码以PyTorch表达意图,中间层自由选择IR与优化方式,底层硬件则通过一致性测试证明自己没有改变程序含义。

如果这套语义契约最终获得主要硬件厂商支持,PyTorch的角色将从最流行的AI框架,进一步变成AI编译器时代的默认源语言。 这不一定意味着它会成为严格意义上的“AI领域C语言”,但它正在争夺与C语言相似的位置:开发者写一次,各家编译器负责理解,各类硬件负责把它跑好。

参考来源

  • PyTorch Compiler DevLog:《PyTorch: A Reference Language》,2026年7月25日发布;本文所述事件的主要来源,因链接域名限制不附原页面链接。
  • PyTorch主仓库:PyTorch框架、编译器组件及相关设计实现。
  • TorchDynamo源码:PyTorch程序捕获、guards与编译入口实现。
  • TorchInductor源码:PyTorch面向CPU、GPU等目标的编译后端实现。
  • AOTAutograd相关源码:前向与反向计算图提前捕获和转换机制。
  • ONNX项目:开放神经网络交换格式及算子规范。
  • StableHLO项目:面向机器学习编译器的稳定高层操作集。
  • Triton项目:面向GPU高性能内核的编程语言与编译器。

相关推荐

查看全部