跳到主要内容
昇腾AI芯片与算子开发

2.7 CANN 图引擎:GE 与编译链路

深入 CANN 的图编译链路:GE 图引擎如何把计算图解析、优化、调度到昇腾设备,理解算子融合、AKG 自动算子生成与 ATC 离线转换的原理

GE 图引擎 AKG ATC 图优化 编译

前面几篇讲的是「怎么写程序」,这一篇讲「程序进去之后发生了什么」。昇腾把「模型 → 芯片指令」之间的过程分成图编译和算子执行两段,而负责图编译的核心是 GE(Graph Engine,图引擎)。理解它,你才能看懂为什么一个模型在昇腾上「跑得快」,也才能读懂性能分析报告里的融合算子。

📑 目录


1. 为什么需要「图」

先问一个问题:为什么不直接把 PyTorch/MindSpore 的代码逐行翻译成芯片指令?

因为逐行执行意味着每个算子独立启动、独立搬运数据,芯片的利用率极低。真正的性能来源在于整体看问题:

  • 把 a + b、a * 2、sigmoid(a) 合并成一次执行,省掉中间搬运;
  • 把数据布局在编译期就调整好,而不是运行期反复转置;
  • 提前规划每块内存的复用,而不是每个算子各自申请。

这些优化只有把模型看成一张计算图(graph)才做得到。所以训练框架(MindSpore 的 Graph 模式、torch.compile、Triton)都会先把模型「建图」,交给图引擎去优化。昇腾侧的这张图优化与调度枢纽,就是 GE。

2. GE 图引擎的定位

GE(Graph Engine)是 CANN 中负责图的解析、优化、调度与执行的引擎,处在「框架」和「硬件执行」之间:

框架层(MindSpore / PyTorch / MindIE)
        │  模型 → 计算图(MindIR / ONNX 等)
        ▼
GE 图引擎 ──► 图优化(融合/布局/内存)
        │     调度(算子分派到对应执行单元)
        ▼
运行时执行:AICore / Vector / 矩阵单元 / CPU(AICPU)

可以把它类比成编译器的中间表示(IR)+ 优化器(Pass):框架产出图,GE 负责把图「优化 + 编排」成昇腾能高效执行的任务序列。

说明:CANN 版本演进较快,GE 在不同版本里可能叫「图引擎」「图编译」或并入运行时层,职责定位一致,具体组件名以你使用的 CANN 版本文档为准。

3. 图编译链路全景

一条完整的链路大致是:

  1. 建图:框架把模型正向过程翻译成计算图(每个算子是一个节点,张量是边)。
  2. 图解析:GE 读取并校验图结构,把算子映射到昇腾的算子库(aclnn / 昇腾算子)。
  3. 图优化(Pass 流水线):按固定顺序跑一批优化,见下一节。
  4. 调度与资源分配:决定算子跑在哪个执行单元(矩阵/矢量/标量/CPU),规划内存与队列。
  5. 任务下发:生成可执行任务,交给运行时在芯片上执行。

对开发者可见的窗口是第 3 步:很多「编译报错」「性能差异」都源于这里。

4. 图优化:融合、布局与内存

图优化是 GE 的核心价值,典型手段有:

优化手段作用
算子融合(Fusion)把相邻的多个算子合并成一个(如 Conv+BN+ReLU、连续的 Elementwise),减少搬运与启动开销
常量折叠(Constant Folding)编译期就算完不变的子图,运行期直接拿结果
布局转换(Layout Transform)在编译期把张量布局(NHWC/NCHW/ND)统一,避免运行期反复转换
内存规划(Memory Planning)全图视角分配与复用内存,减少峰值占用

以 Conv+BN+ReLU 融合为例:不融合时要先算卷积、把中间结果写回内存、再读出来算 BN 和 ReLU;融合后一次算完,中间结果留在片上。这就是推理性能报告里常见到「融合算子」的原因。

洞察:你在 msprof(3.5)或 MindIE 日志里看到的「一个大算子」,往往就是融合后的结果——性能分析前先想清楚「图上看到的」和「实际执行的」不一样。

5. AKG:自动算子生成与融合

AKG(Auto Kernel Generator) 是昇腾的自动算子生成与融合框架,解决「融合之后的算子,怎么生成高性能代码」的问题:

  • 自动融合:把适合融合的算子组合自动合并(尤其是 Elementwise 链式算子)。
  • 自动生成:为融合后的算子自动生成向量/矩阵指令代码,而不是依赖人工手写每个算子。
  • 自动调优(Auto-tuning):在 Tiling、Buffer 大小等参数空间里搜索最优配置。

AKG 以开源项目维护(MindSpore 社区),其思路对标 NVIDIA 的 XLA/Triton——用「自动生成 + 搜索」替代「人工优化」。你不需要直接调 AKG,但它的存在解释了一个现象:昇腾上很多算子的高性能版本是「编出来的」,不是「手写出来的」。

说明:算子融合的落地形态随 CANN 版本变化(部分融合能力并入图引擎或编译器),AKG 的具体应用范围以官方文档为准。

6. ATC:离线转换与在线编译

图编译有两条路径:

路径触发时机产物典型场景
在线编译框架运行/训练时每次运行生成训练、动态调试
离线转换(ATC)部署前一次性转换OM 离线模型推理部署(见第 5 章)

ATC(Ascend Tensor Compiler) 就是离线转换工具:把训练好的模型(ONNX / MindIR / 其他格式)转成 OM(Offline Model)。转换过程中同样经过 GE 的图优化与算子融合——所以 OM 模型里存的不是「原始算子」,而是「优化后的执行计划」。

这解释了 6.1 的直觉:同一个模型,转换参数不同(是否开融合、目标芯片、量化),OM 的性能差异巨大。

7. 对 AI Infra 工程师的意义

GE 看似离业务远,实际处处相关:

  1. 读懂性能报告:看到「融合算子」「算子耗时占比」时,知道这背后是图优化的结果。
  2. 推理调优:用 ATC 转换时选择正确的优化开关与算子配置,是推理性能差异的最大来源之一。
  3. 定位编译期问题:报错若发生在「编译/转换」阶段,去查图结构与算子支持矩阵;发生在「运行」阶段,才去查设备与内存。
  4. 理解静态图的收益:MindSpore 推荐 Graph 模式、推理走离线模型,本质都是「把优化工作放到编译期」。

总结

  • GE 图引擎是 CANN 里负责图解析、优化、调度、执行的枢纽,类比编译器 IR + Pass。
  • 图优化的核心手段是算子融合、常量折叠、布局转换、内存规划——融合是性能差距的主因之一。
  • AKG 用自动生成 + 自动调优解决融合算子的高性能实现问题,思路对标 XLA/Triton。
  • ATC 离线转换产出 OM 模型,转换时经过 GE 优化,所以OM 里是优化后的执行计划。
  • 对工程师:读懂性能报告、会用 ATC 调优、能分清「编译期 vs 运行期」报错,就掌握了昇腾性能的入口。

延伸阅读