芯片层 开放阅读

中间表示

IR, Intermediate Representation

概念 ID
ir-intermediate-representation
更新时间
2026-05-29
来源数量
待补

中间表示

3 秒看懂

中间表示 (IR) 是深度学习编译器在将模型从框架语言(如 PyTorch、TensorFlow)转换到硬件可执行代码的过程中,所使用的一种或多种结构化中间描述。它把“面向开发者的表达”与“面向底层的优化和代码生成”解耦,使得同一份模型能经优化后高效运行在不同硬件上。

3 分钟产业解释

在深度学习工程化落地中,IR 是整个软件栈的“脊柱”。它让 AI 芯片厂商不再需要为每一种前端框架重写整个编译器,也令框架开发者不必为每一种硬件适配全套优化。典型的流程是:

  • 框架导出图 IR(如 TorchScript IR、TF GraphDef),或由捕获工具(TorchDynamo)将动态图跟踪为中间表示。
  • 进入图级优化(算子融合、内存规划、常量折叠)。
  • 下降到张量级或指令级 IR(如 XLA 的 HLO、TVM 的 TIR、MLIR 的各种方言)。
  • 最终由后端生成目标硬件代码。

目前主流的 IR 体系正在向可扩展、多层级的方向收敛,其中MLIR(多级中间表示)成为产业协同的重点,它允许自定义方言(Dialect),兼顾高层计算图与低层循环优化。其他重要 IR 还包括 ONNX(面向推理的交换格式)、OpenXLA 中的 StableHLO、TorchInductor 使用的中间表示等。

15 分钟专家深入

IR 并非是单一格式,而是一个分层的编译抽象体系。在深度学习中,IR 需要承载:

  1. 计算图拓扑:有向无环图(DAG)及控制流(if、loop),需保留精确依赖关系。
  2. 张量形状与数据类型:支持符号形状推导(如 dynamic shape),否则必须在运行时重新编译。
  3. 算子语义:标准算子库(如 conv2d、matmul)的语义定义,既要精确定义舍入误差行为,又要保持硬件无关性。
  4. 内存与布局:内存步长(strides)、数据布局(NCHW vs NHWC)的抽象,使编译器能自动插入变换。
  5. 高级优化标记:如并行策略、融合边界、精度模式(fp16/bf16/int8)。

专家使用 IR 时常面临“表达力 vs 优化确定性”的权衡:更抽象的 IR 描述更简洁但丢失硬件细节,导致 unpredictable performance;过低的 IR 贴近硬件却损害可移植性。MLIR 通过可嵌套的方言部分缓解了这一矛盾——可以用“linalg”方言描述线性代数操作,用“gpu”方言描述 GPU 特异性,再用“scf”处理循环结构,统一在同一个方言下进行渐进式降级(lowering)。

在 TVM 的 Relay 中,IR 采用函数式 SSA(静态单赋值)形式,支持 let-binding 与递归,使得自动微分和梯度裁剪可以编码进 IR 层。XLA 的 HLO 则严格采用静态形状,计算图展开为 HLO 指令序列,适合于 TPU 等数据流架构的自动布局与分片。

最新的趋势是将 IR 与高性能代码生成器紧耦合:如 PyTorch 2 的 Inductor 将后台 FMHA(融合多头注意力)等模式匹配直接输出到 Triton 或 CUDA kernel,其抽象层称为“Inductor IR”或“Prim IR”,它是一种类张量表达式的 SSA 形式,兼具层级下降能力。

技术原理

多层 IR 体系与降级流程

深度学习编译器通常采用三层 IR 架构,以 TVM 和 MLIR 为典型:

Frontend Model (PyTorch / TF)
   │ (trace or export)
   ▼
High-level Graph IR (Relay / StableHLO / Torch FX Graph)
   │ 图级优化:算子融合、常量折叠、内存规划、形状推导
   ▼
Mid-level Tensor IR (TIR / Linalg+Affine)
   │ 张量化:循环分块、向量化、内存作用域插入、共享内存 promotion
   ▼
Low-level IR / Codegen (LLVM IR, CUDA C, target dialect)
   │ 寄存器分配、指令调度、二进制生成
   ▼
Executable Binary

关键机制

  • SSA 形式与 use-def 链:每个中间值只被赋值一次,使数据依赖分析可以快速完成,是死代码消除、公共子表达式消除的基础。
  • Dialect(方言):MLIR 允许在同一模块内混合使用不同抽象层次的 IR,通过合法的“转换”将高层方言降级到低层。例如,tosa.conv2dlinalg.conv_2daffine.for + memref.load/storegpu.launch + nvvm
  • 形状推导与动态形状:支持符号维度的 IR 必须携带 shape 函数,优化过程采用“符号整型”推断维度,部分框架会回退到运行时编译(JIT)以处理 unknown dimensions。
  • 内存规划:在 IR 层通过 buffer 内联、内存复用和复制消除,可大幅降低峰值显存占用,这在大型 MoE 模型中效果显著。
  • 算子融合:图 IR 中通过匹配“生产者-消费者”模式将多个算子合并为一个 kernel,消除中间张量的显存访问。常见融合模式包括 conv-bias-relu、layernorm-后面跟随的注意力等。

并行策略的 IR 表达

分布式训练中的模型并行(张量并行、流水线并行、数据并行)在编译栈中需要 IR 承载。例如,Megatron 风格张量并行需要在 IR 层插入 AllReduce/ReduceScatter 通信操作(非 All-to-All,后者多见于 MoE 的 expert dispatch)。这些通信算子作为 IR 算子,由编译器分配设备并生成相应的集合通信库调用。IR 中的 sharding 注解(如 sharding dialect)可以描述多维分片方案,指导 lower 过程生成 SPMD 代码。

技术演进史

  • 框架内 IR 的萌芽(2015-2017):TensorFlow 提出静态计算图 GraphDef,Caffe 使用 Prototxt,它们可以视为最初步的图 IR。但优化能力有限,且与框架紧耦合。
  • XLA 与 HLO 成型(2017):Google 推出 XLA 编译器,定义 HLO(High-Level Optimizer)IR,专为 TPU 和张量计算设计。它将 TF 图转为 HLO,进行大量代数优化和融合。
  • TVM 引入分层 IR(2018):TVM 提出 Relay(高层函数式 IR)与 TIR(低层张量 IR),首度将 IR 分层的理念普及到深度学习编译领域,使开发者可以自定义硬件后端。
  • ONNX 标准化(2017-2019):ONNX 成为跨框架交换的广义 IR,聚焦推理阶段,定义了统一的算子集和版本管理,让模型一次导出多处运行。
  • MLIR 挑战单层 IR(2019-2021):Google 开源 MLIR,用方言组装 IR 基础设施,影响巨大。它被集成到 TensorFlow、JAX、TF Lite、IREE 等多个项目中。
  • PyTorch 2 的全流程 IR 化(2022-2023):PyTorch 引入 TorchDynamo 捕获 Python 字节码,生成 FX Graph(一种图 IR),再经 Inductor 使用 Wrapper IR 生成 Triton/C++ 内核。同时参与 OpenXLA,推动 StableHLO。
  • 产业趋同:2023-2025 年,StableHLO 成为 OpenXLA 的统一输入 IR,MLIR 成为多方的基础设施,各家硬件厂商都基于 MLIR 构建自己的编译栈。

技术路线对比

维度MLIR+方言XLA/HLO 生态ONNXTVM Relay/TIRTorchInductor IR
设计哲学可组合、多级方言,任意扩展单一级别、严格静态形状,张量计算优化可移植的推理格式,标准化算子函数式高层 + 命令式低层,硬件解耦以 Python 为中心的动态图捕获 + 即时代码生成
优化能力极强,支持跨方言优化,适合全流程强,代数优化、融合、内存分析,面向 TPU/GPU中等,主要靠后端实现,标准受限强,自动调度与张量优化,适用于定制硬件强,擅长 Python 级自动微分与融合,依赖 Triton/CUDA
硬件支持最广泛,自研芯片几乎都基于 MLIR主要 Google TPU 和 NVIDIA GPU(通过 PJRT)各类硬件,但受算子集限制CPU、GPU、专用加速器,需要手动开发后端NVIDIA GPU(Triton/CUDA),扩展到其他需依赖 Triton 支持
灵活性极高,可引入自定义方言,混合层次较低,受 HLO 语义约束,动态形状支持弱中,通过 operators 扩展和自定义域高,可以手写调度原语,接近底层较高,通过 torch.compile 自动捕获,用户可控性较弱
生态成熟度快速增长,已成为事实标准的基础设施稳定,在 Google 内部及外部采用广泛成熟,推理领域存量最大成熟,研究与应用场景广,是很多 AI 芯片的编译起点发展极快,依托 PyTorch 用户基础

注:以上对比为定性描述,基于公开设计属性,未引用具体版本性能数据。

上下游

  • 上游:深度学习框架(PyTorch、TensorFlow、JAX)、AI 建模者。框架使用 IR 将 Python 代码转化为可优化的形式,需要保证与原有动态语义的兼容性。
  • 中游:编译优化厂商和项目(如 OpenXLA、TVM 社区、MLIR 社区),他们维护 IR 的中间层、优化 pass 管道、方言转换规则。
  • 下游:AI 芯片供应商(NVIDIA、AMD、Intel、华为、Google TPU、Graphcore、Groq、各类 NPU 公司等),他们将自己的编译器后端对接至标准 IR,或开发专有方言来实现最优映射。此外,部署工具链(如 TensorRT、OpenVINO、ONNX Runtime)将 IR 转换为推理 engine。

IR 层实质上定义了生态的接口话语权:拥有良好 IR 标准的一方,上游能吸引更多框架,下游能绑定更多芯片。

关键指标

衡量 IR 及其编译栈质量的主要技术指标(无具体数据,采用定性描述):

  • 端到端延迟:推理时一帧或一批次从输入到输出的时间,对比框架直接运行,编译优化带来的加速比是核心指标。
  • 吞吐量:单位时间处理的最大样本数,常受 IR 中内存融合与流水线编排影响。
  • 编译时间:IR 生成和优化所需时长,尤其对于大型 MoE 或动态形状模型,编译开销可能抵消运行加速。
  • 峰值显存占用:IR 优化后的 runtime memory,内存规划 pass 是其关键。
  • 算子覆盖率:IR 所能表达的原始框架算子比例,未覆盖的算子会回退到框架执行(“graph break”),降低性能。
  • 优化成功率:特定模式(如 attention、layernorm)被识别并替换为高效 fused kernel 的比例。

供需与市场数据

由于深度学习编译器及 IR 多为开源基础设施,独立市场数据稀缺且未形成单独的商业市场。然而,作为 AI 编译技术栈的核心组件,其战略价值在 AI 芯片和训练部署平台竞争中不断升高。

  • 需求端:大模型(LLM、多模态)的参数量从十亿迈向万亿,使得手动优化的 kernel 已经跟不上模型结构演进,对编译器 IR 的自动化优化需求呈爆炸式增长。AI 推理芯片每增加一种,都需要适配,拉动对统一 IR 解决方案的需求。
  • 供应端:主要由开源社区和大型科技公司提供。MLIR、OpenXLA、TVM、ONNX 是主要供给来源,闭源芯片厂商(如苹果、特斯拉自研 NPU)内部也会自研 IR 编译栈。目前尚未出现以 IR 为产品的纯商业化公司,更多被融入整体工具链中。
  • 市场趋势:IR 层正在从“软件基础设施”向“硬件生态护城河”演进,芯片公司倾向于构建基于 MLIR 的闭源方言以锁定开发者,框架方则试图通过统一 IR 来降低硬件依赖。整体未出现独立第三方市场报告的具体规模数据([未检索到公开独立报告])。

代表公司与资本映射

公司/组织关键 IR 项目/产品角色
GoogleXLA(HLO, StableHLO)、MLIR、IREEIR 基础设施的主要贡献者,通过 OpenXLA 推动标准化
MetaPyTorch 2(TorchDynamo, FX, Inductor IR)、Glow前端 IR 捕获与编译,Inductor 后端已将 Triton 作为重要 low-level IR
NVIDIATensorRT(带 ONNX 支持及内部 IR)、CUDA 编译器(NVVM IR)从上层 IR 到 GPU 原生代码的优化与部署
华为MindSpore(MindIR / GHLO,集成 TVM 与 MLIR 技术)面向昇腾 NPU 的编译栈,使用类 MLIR/TVM 多级 IR
IntelOpenVINO IR面向 CPU/GPU/VPU 的跨平台推理 IR
阿里BladeDISC(基于 MLIR 的 AI 编译器)动态形状支持与集群化推理,为 MLIR 方言的产业应用
Groq / Graphcore专用 IR 编译栈自研芯片的全部优化都依赖自定义 IR,是其技术壁垒之一

资本映射方面,以上多为大型科技公司内部项目,并未单独融资。AI 芯片初创公司的估值很大程度上包含其编译栈(含 IR)的技术能力,但 IR 本身不构成独立估值单元。投资者更多关注围绕 IR 形成的生态粘性:掌握 IR 标准的公司对上下游有更强的议价和集成能力。

投资逻辑

  1. 生态锁定效应:IR 类似于操作系统的 API,一旦框架和模型大量基于某种 IR 生态(如 OpenXLA 的 StableHLO),切换成本高,从而形成持久的竞争力。投资掌握主导 IR 生态的龙头公司(如 Google、Meta)或其深度合作方具有长期价值。
  2. 硬件适配成本壁垒:AI 芯片创业公司如果能够高效地将 MLIR 方言转换为自有硬件代码,可以显著降低客户迁移成本。因此,编译栈 IR 技术是 AI 芯片初创公司的核心护城河之一。
  3. 工具链标准化红利:ONNX、MLIR 等开放标准的普及,降低了推理环节的硬件锁定,受益的是能提供最优性能的实现厂牌,而非 IR 持有者本身。投资逻辑转向“执行效率的领先者”,而非“格式的定义者”。
  4. 风险点:若大模型训练逐渐收敛于少数大型基础模型,定制优化 kernel 可能再度占据主导,削弱通用 IR 的优化价值;另外,若 PyTorch 完全锁定在 Inductor/Triton 路径下,可能削弱其他 IR 生态的份额。

注:以上基于产业逻辑推演,未提供具体投资建议与数字。

常见误读纠偏

  • “IR 就是 ONNX 的一种”:ONNX 只是众多 IR 中的一种,专为推理可移植设计。深度学习编译器内部往往有多层 IR,ONNX 更像是标准化的交换 IR,而非优化执行的完整 IR。
  • “同一个 IR 优化就能保证在所有硬件上性能一致”:IR 只是抽象的中间表示,真正高效执行需要后端的精细调度和代码生成,硬件特性(如 Tensor Core 尺寸、内存带宽)会极大影响最终性能,IR 层无法消除这种差异。
  • “动态图不需要 IR”:PyTorch eager 模式在执行时不显式构建全局图 IR,但 torch.compile 正是使用 TorchDynamo 捕获字节码并生成 FX IR;JAX 也是将所有计算带成 HLO IR。可以说,现阶段几乎所有高性能执行都会经过某种形式的 IR。
  • “采用 MLIR 就解决一切适配问题”:MLIR 提供的是框架,具体的方言、转换和优化仍然需要大量人力开发,构建高质量的编译流程需要深厚的编译器经验,并非简单地换成 MLIR 即可。

学习路径

  1. 基础铺垫:了解编译器基本概念(词法分析、语法分析、优化、代码生成),推荐《编译原理》(龙书) 前几章,或观看 LLVM 相关教程。
  2. 入门实践:通过 TVM 官方教程学习 Relay 和 TIR,用 AutoTVM 跑通一个模型优化,直观感受图 IR 到张量 IR 的 lowering。
  3. 深入 MLIR:阅读 MLIR 文档(mlir.llvm.org)下的 “Toy Tutorial”,从头构建一个方言,理解 dialect conversion。再到深度学习领域的方言(Torch-MLIR、TF-MLIR)。
  4. XLA 与 HLO:研究 XLA 操作语义(StableHLO spec),通过 JAX 示例观察 jax.jit 生成的 HLO,使用 xla.call_module 等工具。
  5. 产业前沿:关注 PyTorch 2 的 torch.compileInductor 如何生成 Triton 代码,研究 OpenAI Triton 自身的 IR。

一句话总结

中间表示 (IR) 是深度学习从模型代码到硬件指令的解耦枢纽,既抽象了计算图语义,又为多层编译优化提供了落地载体,其演进直接定义着 AI 软件栈的灵活性和效率边界。

延伸阅读与来源

  • MLIR 官方文档: https://mlir.llvm.org/
  • TVM 开源项目与论文: “TVM: An Automated End-to-End Optimizing Compiler for Deep Learning” (OSDI 2018), https://tvm.apache.org/
  • XLA 架构: “XLA: Optimizing Compiler for Machine Learning” (2017), OpenXLA 项目: https://github.com/openxla
  • ONNX 规范: https://onnx.ai/onnx/
  • PyTorch 2 技术博客: “Introducing PyTorch 2.0” (pytorch.org/blog)
  • 阿里 BladeDISC 介绍: “BladeDISC: A Dynamically Shaped AI Compiler Based on MLIR” (相关论文及开源社区)
  • 注:以上内容基于公开开源社区与产业共识,无具体量化数据,所有技术特性源自官方文档说明。部分行业趋势分析为定性演绎,未依赖特定检索数据。
source: 公开披露与公开资料整理 本页仅用于产业链学习、信息检索和研究辅助;不构成投资建议,不预测涨跌,不提供买卖、仓位或目标价建议。
完整概念页 复盘 13 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型