onnx之优化器

之前的OpenPPL有个章节讲到过优化器,onnx里面也有个优化器,相关介绍如下

一、优化器的本质

ONNX Core Optimizer 是在图级别工作的,与EP(Execution Provider)无关。

复制代码
ONNX模型(计算图)→ Optimizer(图变换)→ 优化后的计算图 → EP执行

关键点:优化器在EP之前运行,它不关心后续是哪个EP执行。


二、优化器对两类EP的影响

1. 解释型EP(逐个算子调用)

如 CPUExecutionProvider、CUDAExecutionProvider(基础模式)

复制代码
优化后的图 → EP逐个调用算子内核

优化器有效的原因:

  • 虽然EP是逐个算子执行,但图结构已经改变

  • 例如:Conv + BN 被融合成一个节点 → EP只需调用1次而不是2次

  • 算子数量减少,内核调用次数减少

实际效果:

优化 对解释型EP的效果
常量折叠 ✅ 减少计算量
算子融合 ✅ 减少内核调用
死代码消除 ✅ 减少执行节点

2. 编译型EP(如TensorRT、OpenVINO)

如 TensorrtExecutionProvider、OpenVINOExecutionProvider

复制代码
优化后的图 → 编译型EP接收 → 进一步做硬件级优化 → 生成特定引擎

优化器仍然有效:

  • 编译型EP虽然会做自己的优化,但接收的图越干净,编译效果越好

  • 例如:ONNX Optimizer 先融合 Conv+BN,TensorRT 就不需要再处理这个模式

  • 减少编译型EP需要处理的工作量


三、优化器的生效时机

复制代码
时间线:
─────────────────────────────────────────────────────────→

1. 创建Session
   ↓
2. 加载模型
   ↓
3. 【优化器运行】 ← 时刻
   ↓
4. 图变换完成
   ↓
5. EP获取优化后的图
   ↓
6. EP执行(解释型)或编译(编译型)

代码层面

复制代码
sess_options = ort.SessionOptions()
sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL

session = ort.InferenceSession("model.onnx", sess_options)
# ↑ 在这一步,优化器已经运行完毕

四、为什么编译型EP也需要图优化

以 TensorRT 为例:

优化层级 谁做 作用
图级优化 ONNX Optimizer 减少节点数,简化结构
层融合 TensorRT 垂直融合(如Conv+BN+Relu)
内核选择 TensorRT 选择最优CUDA内核
内存规划 TensorRT 显存复用

如果图级优化没做:

  • TensorRT需要处理更复杂的图结构

  • 可能错过某些融合机会

  • 编译时间更长


五、总结

问题 答案
优化器对解释型EP有用吗? 有用,减少节点数,减少内核调用
优化器对编译型EP有用吗? 有用,简化图结构,帮助编译型EP做更好优化
优化器什么时候运行? EP之前,Session创建时
编译型EP会重复优化吗? 会,但接收优化后的图效果更好

解释型EP是逐个算子调用,优化器通过减少算子数量 来加速;编译型EP有自己的优化层,但上游优化让它的工作更高效。两者是互补而非替代关系。

相关推荐
ZzT14 分钟前
AI 是放大器:基础越扎实,放大效果越明显
人工智能·ai编程
喵个咪20 分钟前
GoWind Admin 拆解:AI 能力层——工具循环、pgvector 知识库与机器凭证
人工智能·后端·agent
老金带你玩AI25 分钟前
10秒出4K,MiniMax还开源了!H3 Image上线!
人工智能
mantou13233 分钟前
只用 Cloudflare 全家桶,给游戏站做一个 RAG 搜索和问答
人工智能·llm
AI前端工程狮37 分钟前
服务端已经死了,客户端却报"超时"
人工智能·程序员
阿屿37 分钟前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能
师夷长技以自愈1 小时前
第 2 篇:AI 点菜,程序端菜——第一次学会"工具调用"
人工智能
数据集_深度学习1 小时前
果园红绿苹果目标检测数据集介绍和论文参考
人工智能·目标检测
武子康1 小时前
H3-World 的 11.3 小时训练数据,是怎样对齐成动作监督的?
大数据·人工智能·深度学习
泯泷1 小时前
大模型会吃掉 Harness 吗?Agent 天空上的“两朵乌云”
人工智能·llm·agent