当前位置: 首页 > news >正文

Onnxruntime之多个EP类型

ONNX Runtime中不同类型的Execution Provider,主要分成三大类,每类的实现机制和典型代表如下:

📊 三大类Execution Provider对比

类别核心机制Kernel注册执行方式典型代表特点
编译型EP整个子图编译成二进制只注册D2H/H2D + 可能注册FuncCall执行预编译的二进制NPU、TensorRT、OpenVINO、QNN第一次慢(编译),后续极快;完全接管子图
解释型EP每个算子独立执行为每个支持的算子注册Kernel逐算子调用KernelCPUCUDA、ROCm、DirectML灵活,支持动态图;无编译开销
委托型EP节点分配后调用其他EP的内核只注册少量管理类Kernel通过KernelLookup调用其他EP某些"代理"EP、部分实验性EP作为图分区器,实际计算靠别人

🏗️ 各类型EP的架构图解

1. 编译型EP(NPU)

2. 解释型EP(CUDA/CPU)

3. 委托型EP(代理模式)

🔍 主要EP的具体分类

1. 编译型EP(与你当前场景最相关)

EP名称目标硬件编译产物特点
NPUNPUNBG文件你正在用的,调用vsi_nn_GenerateNBG()
TensorRTNVIDIA GPUTensorRT引擎支持TRT 10.9,可加载V3插件
OpenVINOIntel CPU/GPU/NPU编译后的网络支持CPU_FP32/GPU_FP16/MYRIAD_FP16
QNNQualcomm HTP/NPUQNN上下文二进制支持HTP后端,可生成context binary
NeuronMediaTek NPU编译后的NPU网络需要设置NEURON_FLAG_USE_FP16

2. 解释型EP(每个算子独立Kernel)

EP名称目标硬件Kernel注册量特点
CPU所有CPU极多通用回退EP,支持MLAS优化
CUDANVIDIA GPU支持MatMulNBits 8-bit量化
ROCmAMD GPUAMD GPU支持
DirectMLWindows GPUDirectX 12加速
XNNPACKARM CPU中等移动端CPU优化

3. 混合型/特殊EP

EP名称类型行为特点
CoreML编译+委托Apple Neural Engine + CPU回退
NNAPI委托Android神经网络API(已标记弃用)
TVM编译已被移除代码库

💡 为什么会有这些区别?

1.硬件特性决定

  • GPU(CUDA/TensorRT):通用并行计算,既可以逐算子执行,也可以整体优化

  • NPU(Neuron/QNN):专用硬件,需要整体编译才能发挥最大效率

  • CPU:最灵活,可以逐指令执行

2.优化目标不同

# 解释型EP适合: - 动态形状模型 - 调试和开发 - 算子级优化 # 编译型EP适合: - 生产部署 - 固定形状 - 极致性能 - 低功耗场景(NPU)

3.NPU为何是编译型

NPU类硬件的标准工作模式:一次编译,多次执行

🔧 如何判断一个EP属于哪类?

方法1:看KernelRegistry

// 在你的Provider中 GetKernelRegistry() { // 如果只返回 D2H/H2D Kernel → 极可能是编译型EP // 如果返回几十个算子Kernel → 解释型EP }

方法2:看GetCapability返回值

GetCapability() { // 如果返回包含整个图的SubGraph → 编译型EP // 如果返回多个小SubGraph → 解释型/委托型 // 如果返回空 → 可能只是代理 }

GetCapability()返回的是一个std::vector<std::unique_ptr<ComputeCapability>>。要让“整个图归你管”,核心就是返回一个ComputeCapability,其中包含一个描述整个计算图的IndexedSubGraph

🧩ComputeCapability的核心组成

每个ComputeCapability对象主要包含以下几个关键部分,用于告诉 ONNX Runtime 你的 Provider 能处理哪些节点,以及如何处理 :

组成部分类型描述
sub_graphstd::unique_ptr<IndexedSubGraph>核心部分。这是一个指向IndexedSubGraph对象的指针,它通过节点索引列表,精确地圈定你的 Provider 想要执行的子图范围。
compile_callbackstd::function(可选)一个回调函数。如果你的 EP 需要在图分区后进行自定义编译(就像你之前看到的 Vivante NPU 那样),可以在这里指定。
unique_id整数 (可选)一个可选的唯一标识符,用于区分同一个 EP 返回的多个ComputeCapability
nodes_to_optimize(不常用)用于更复杂的 EP 内部图优化场景。

方法3:看执行日志

# 编译型EP日志 [Info] Compiling model to binary... [Info] Cache miss, generating engine... # 解释型EP日志 [Info] Assigning MatMul kernel to CUDA EP [Info] Assigning Add kernel to CUDA EP

📌 总结

从NPU场景出发,可以看到:

  1. 编译型EP(如TensorRT、QNN):适合专用硬件,第一次编译慢,后续极快,只注册少量管理类Kernel

  2. 解释型EP(如CUDA、CPU):适合通用硬件,灵活但可能不是最优性能,注册大量算子Kernel

  3. 委托型EP:作为中间层,实际计算靠别人

http://www.jsqmd.com/news/475512/

相关文章:

  • 光学超结构
  • opencv 多项式插值亚像素边缘点
  • 关于智榜样学习过程中1day漏洞的学习心得
  • 给 OpenClaw 装上私有搜索:SearXNG + MCP 替代 Brave API
  • 大专商务数据分析与应用专业考哪些证书比较好找工作?
  • 看不懂,第一次发布
  • OOMKilled、CrashLoopBackOff、ImagePullBackOff 原因
  • 计算机毕业设计springboot基于java的音乐网站设计与实现 基于SpringBoot的在线音乐流媒体播放平台开发 高校校园音乐分享与歌单管理系统的设计与实现
  • 人工智能求职指南(职业规划)
  • JeechBoot前端设置表格内自定义元素
  • 无线模块ESD整改与抗干扰设计:提升连接可靠性的关键
  • 赶考状元AI学伴适合高三复习用吗?——AI与真人辅导的黄金组合深度解析
  • 用 uni-app x 重构我们的 App:一套代码跑通 iOS、Android、鸿蒙!人力成本直降 60%
  • iwebsec通关笔记-xxe篇
  • AI用在食品安全上,更能体现技术价值
  • 数据赋能!让城市治理有了 “数字大脑”
  • OpenClawCn保姆级教程-Deepseek(Linux- Ubantu)
  • 2026年B2B企业做GEO前必须想清楚的10个问题(AI搜索时代企业必读)
  • 2026年存储市场核心数据与趋势分析
  • Redis面试题 02
  • 省下一周整理时间!百考通AI智能聚类文献,告别碎片化罗列
  • Skills+CoT双核心技术:大模型从“会生成”到“会思考”的关键密码
  • CTF开源情报获取方法(以探姬去哪了?_1为例)
  • [Java]RuoYi帝可得-3工单管理
  • 高并发定时任务调度系统
  • 家用除螨仪真的有效果吗?除螨仪哪家好排名第一的?良心推荐央视公认十大除螨仪品牌,抄作业篇!
  • 学习网络安全第四天
  • 如何快速识别B站评论区用户背景:智能成分检测工具全解析
  • Android16 第三方应用里面启动service不断循环读写被系统冻结
  • 删除pdf扫描件里的空白页