第2章 · 图优化引擎


第2章 · 图优化引擎

章节摘要:Graph Processing Engine 在 Session 创建时对 ONNX 图做常量折叠、算子融合、布局变换与分区,是「同模型不同延迟」的第一杠杆。

本章要解决的问题

模型导出成功后,Session 创建阶段会先过一遍图优化流水线。这里决定四件事:哪些常量计算被提前算掉(常量折叠)、哪些相邻算子被合并成单个 kernel(算子融合)、张量按什么内存布局存放(布局改写)、整张图被切成几块交给谁执行(图分区)。四个决定共同影响最终延迟,但调试时最容易被忽略——因为图优化是"创建期行为",Profile 里只看到 run 阶段的结果,看不到优化本身。

典型现象:同一个模型,graph_optimization_level 从 ORT_ENABLE_BASIC 换到 ORT_ENABLE_ALL,首帧延迟差几倍;明明只有 GPU,Profile 里却出现大量 Memcpy——这通常是分区把图切碎了,边界拷贝吃掉了 GPU 的收益。本章三节分别讲清加载与折叠、融合与布局、分区与委派。

上手前先明确

  1. 区分 BASIC / EXTENDED / ALL 优化级别
  2. 说明 Conv-BN-Relu 融合的收益与风险
  3. 解释图分区如何服务多 EP 协同

优化流水线总览

阶段 输入 输出 典型收益
图加载 .onnx 文件 验证后的 Graph 结构合法、shape 明确
常量折叠 Graph 无常量子图的 Graph 首帧更快、节点数减少
算子融合 Graph 融合后 Graph kernel launch 减少
布局改写 Graph 偏好布局的 Graph 对齐 EP 的 NCHW/NHWC
图分区 Graph + EP 能力 若干子图 决定拷贝边界

子章节

节 主题 核心问题 关键产出
2.1 图加载与常量折叠 加载期做什么、首帧为什么慢 优化级别对比实验
2.2 算子融合与布局改写 融合收益机制与失败原因 融合前后 Profile 对比
2.3 图分区与子图委派 边界拷贝如何吃掉收益 分区配置与边界审计

2.1 图加载与常量折叠

2.2 算子融合与布局改写

2.3 图分区与子图委派

调试工具与技巧

图优化阶段的可见性来自日志与环境变量。用 ORT_LOG_LEVEL=VERBOSE 能看到每个 pass 的决策;用 sess_options.optimized_model_filepath 导出优化后的图,再用可视化工具对比优化前后结构。Section 2.1 会给出对比 BASIC 与 EXTENDED 创建耗时的标准做法。

前置与后续

  • 前置:第1章的 Session 创建流程
  • 后续:第3章 EP 按分区结果接管子图;第4章内存规划依赖 shape 与分区结果
  • 贯穿线索:图优化做得好,EP 才能发挥;做得激进,可能破坏 INT8 QDQ 语义或拖慢首帧
作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U