
7 月 23 日,2026 夏季 InfiniTensor 训练营 AI 编译器方向第二课《AI 编译器中的前端优化》开讲。
上一课《AI 编译器概述》介绍 AI 发展脉络、AI 四层技术栈,对比传统编译器与 AI 编译器差异,讲解 TVM、MLIR 两大主流框架,以及张量、Stride、计算图、张量推导等基础抽象,为本节图优化打下理论基础。
本节承接上一课 AI 编译器基础概念,完整讲解四类核心等价图变换、子图替换工程实践与 CUDA Graph 底层加速方案,搭建前端图优化完整落地认知。
图层优化基础概念
图替换规则约束
图层优化全部采用语义等价变换,不改变模型输入输出结果。
- 模板:预先定义标准化子图匹配规则;
- 图替换:匹配目标子图后内部重写,替换后的子图需要保持与原子图等价的输入输出语义。
图层优化解决两类冗余
- 结构冗余:无效节点、重复子图、可提前计算常量;优化手段:常量折叠、冗余节点消除、公共表达式消除;
- 读写冗余:算子间频繁显存读写、内存排布不连续;优化手段:算子融合、数据布局转换。

四类核心图层优化手段
常量折叠与常量传播

核心作用
编译期计算固定常量表达式,减少运行时 Kernel 启动与计算开销。
- 常量折叠:输入全部为常量的算子,编译期直接算出结果替换为新常量;
- 常量传播:将算出的常量向后传递,持续简化后续表达式;
- 特殊可折叠算子:Shape、Size 等仅依赖张量静态形状的运算,即便张量数值未知也可提前计算。
实操要点:优化器会多轮反复执行该 Pass,直到计算图结构不再变化。

冗余节点消除 + 公共表达式消除
1.冗余节点消除(对标传统 DCE 死代码消除)
删除无实际作用节点,分为四类场景:
- 节点无实际输入输出作用:单输入 Concat 等;
- 参数无意义:Cast FP32 → FP32、相同 Shape Reshape、无变化 Transpose;
- 中间过渡冗余:连续多步类型转换可合并(需保证数值等价);
- 前后互为逆运算:连续两次 Transpose、来回 Cast 抵消。



2.公共表达式消除
合并完全相同的重复子图,减少重复计算。
判定条件:算子类型、输入、属性、数据类型、Shape 全部一致,无随机副作用才可合并。

算子融合(最常用性能优化手段)

1. 核心收益
合并多个细粒度算子为单个复合 Kernel,消除中间张量 Load / Store 显存读写开销,降低 Kernel 启动次数。
2. 三类融合实现形态
- 权重吸收融合:Conv + BN、MatMul + Add,数学推导合并权重与偏置(仅推理阶段可用,训练 BN 统计量动态不可合并);
- 自定义融合 Kernel:Gelu、Layer Norm 等复合算子单独实现高性能内核;
- 属性内嵌融合:MatMul 内置转置参数、Conv 内置 Padding,消除前置 Transpose / Pad 节点。
注意:并非融合越多越好,过度融合会拉高寄存器压力,降低硬件利用率。
3. 典型案例:Conv + BatchNorm 融合
推理阶段 BN 均值、方差、缩放参数均为常量,通过公式推导将 BN 计算逻辑直接合并进卷积权重与偏置,省去独立 BN 算子读写。


数据布局转换
优化逻辑:
调整张量内存排布,适配硬件访存特性,实现连续向量化读取,不减少计算量但大幅降低访存耗时。
- 主流布局对比 NCHW / NHWC:
- NCHW:通道分散,1×1 卷积访存不连续;
- NHWC:通道为最内层连续维度,在部分 GPU/NPU 卷积计算场景下更利于向量化访问和硬件计算单元利用;

- 异构硬件专属布局:昇腾等硬件架构,拆分通道维度贴合硬件向量宽度;

- 权重优化:常量卷积核离线完成布局转换,无需推理时实时 Transpose;
- 插入规则:仅在布局敏感算子前后插入 Transpose,避免频繁转换增加开销。

子图替换工程实战流程
优化思路
使用硬件 Profiler 采集算子耗时,定位占比极高、访存不连续、运行在低速单元(AI_CPU)的算子作为优化目标。

通用算子为兼容所有输入性能较差;若业务输入存在固定规则,可抽取整段子图,替换为定制 Plugin OP,迁移至高速计算单元执行。
模型优化案例
- 导入原始模型,定位待优化子图输入、输出边界;
- 断开原图张量连接,插入自定义 Plugin OP;
- 删除原冗余子图节点,执行拓扑重排;
- 导出优化后模型,配套后端专用 Kernel 实现;

CUDA Graph 加速机制
原生 Kernel Launch 痛点
逐算子提交 Kernel 存在固定 CPU 调度开销(3 ~ 10 μs / 次),小算子模型累计开销巨大;CPU 提交速度不足会造成 GPU 空泡、利用率低于 70%。
CUDA Graph 核心原理
一次性捕获一整段计算任务拓扑,后续重复推理仅重放图,摊薄重复 Kernel 调度开销。
完整三阶段使用流程
- 定义阶段:手动构建图 / Stream 流捕获自动记录算子依赖;
- 实例化阶段:校验依赖、预分配资源,转为可执行 Graph;
- 执行阶段:调用 Graph Launch 直接重放,无需 CPU 逐个提交算子。



适用场景与局限
- 优势:静态 Decode 阶段、固定输入长度小 Batch 推理提速明显;
- 局限:依赖固定张量 Shape、稳定内存地址,Prefill 动态变长场景工程复杂度更高。

加入训练营
📺完整课程内容,请观看直播或查看课程回放:
InfiniTensor 官网: https://www.infinitensor.com
B站直播: InfiniTensor 官方直播间
视频号直播: InfiniTensor 视频号预约
答疑交流: 训练营官方社群⬇️

关注与交流

