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

相关推荐
李昊哲小课30 分钟前
大模型应用开发课程 —— 项目 09~12 完整教程
大数据·人工智能·大模型
xierui12312332 分钟前
AI Agent 隐私架构:本地化重点为什么是登录态与执行权限
java·人工智能·网络安全·架构
u01030552732 分钟前
昇腾AI赋能安卓智能助手
人工智能·笔记
回眸&啤酒鸭33 分钟前
【回眸】Grok 4.6 核心能力落地与实战应用指南
大数据·人工智能
冬奇Lab39 分钟前
Code Agent 解剖(07):外部工具怎么接进来?MCP 集成是怎么做的?
人工智能
日月新著41 分钟前
微软2万人调查:天天用AI的你,为什么还是原地踏步?
人工智能·microsoft
cfm_291442 分钟前
Spring AI Tool 调用架构全解
java·人工智能·spring
东离与糖宝44 分钟前
告别人工瞎筛!4步搭建AI简历初筛系统,精准避坑零误差
人工智能
冬奇Lab1 小时前
开源项目第194期:deepseek-harness — DeepSeek 出品的 AI Agent 开发框架,万物皆插件
人工智能·开源·deepseek
qiyongwork1 小时前
大模型自动化测试生成:SmartSE的实践与启示
人工智能·项目管理·需求管理