onnx之优化器

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

一、优化器的本质

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

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

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


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

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

CPUExecutionProviderCUDAExecutionProvider(基础模式)

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

优化器有效的原因

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

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

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

实际效果

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

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

TensorrtExecutionProviderOpenVINOExecutionProvider

复制代码
优化后的图 → 编译型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有自己的优化层,但上游优化让它的工作更高效。两者是互补而非替代关系。

相关推荐
AI服务老曹2 小时前
源码交付与低代码重构:企业级 AI 视频管理平台的二次开发实战
人工智能·低代码·重构
L-影2 小时前
下篇:一棵树能长成多少种样子?——AI中决策树的类型与作用,以及它凭什么活了六十年还没过气
人工智能·算法·决策树·ai
jovi_AI电报2 小时前
你还把 ChatGPT 当白月光,别人已经让它出来上班了
人工智能
蓝天守卫者联盟12 小时前
玩具喷涂废气治理厂家:行业现状、技术路径与选型指南
大数据·运维·人工智能·python
智慧化智能化数字化方案2 小时前
架构进阶——解读企业数字化转型L1-L5数据架构设计方法论及案例【附全文阅读】
人工智能·企业数字化转型·l1-l5数据架构设计方法论
无代码专家2 小时前
通过轻流 AI OA 系统实现行政成本优化——生产管理落地方案
运维·人工智能·云计算
F1FJJ2 小时前
AI 编程实战对比:Claude Code vs Trae
图像处理·人工智能·ai作画·golang·visual studio code
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-03-30
大数据·数据库·人工智能·经验分享·搜索引擎
larance2 小时前
[菜鸟教程] 机器学习教程第一课
人工智能·机器学习