news 2026/8/22 0:44:12

Onnxruntime之多个EP类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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:作为中间层,实际计算靠别人

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 16:36:17

lsof 查看写入日志文件的进程是什么

在 CentOS 6 中安装 lsof 非常简单&#xff0c;它属于系统基础工具&#xff0c;可通过官方 YUM 源直接安装&#xff0c;以下是完整的安装步骤&#xff08;适配 CentOS 6 环境&#xff09;&#xff1a; 一、安装 lsof&#xff08;root 用户执行&#xff09; 1. 直接安装&#xf…

作者头像 李华
网站建设 2026/8/22 0:44:11

一张图搞定代购!反向海淘黑科技,看图就能买遍中国好物

还在为不知道商品名称、不会中文搜索而烦恼&#xff1f;想代购中国好物&#xff0c;却因关键词不对屡屡碰壁&#xff1f;现在&#xff0c;我们的反向海淘代购系统带来超强图片搜索功能&#xff0c;彻底解决你的购物难题&#xff01;无需产品名、不用输中文&#xff0c;只需上传…

作者头像 李华
网站建设 2026/7/14 16:36:18

G-Helper:华硕笔记本性能管理的轻量革命

G-Helper&#xff1a;华硕笔记本性能管理的轻量革命 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://gi…

作者头像 李华
网站建设 2026/8/22 0:44:10

计算机网络期末复习——第5章:链路层 Part Two

目录5.4 交换局域网5.4.1 链路层寻址和ARP5.4.2 以太网5.4.3 链路层交换机5.5.4 虚拟局域网VLAN5.4 交换局域网 5.4.1 链路层寻址和ARP MAC地址 每个主机发送的帧中必须携带表示发送主机和接收主机的地址&#xff0c;又叫LAN地址或物理地址 MAC地址是对网络上各接口的唯一标识…

作者头像 李华
网站建设 2026/8/22 0:44:07

MongoDB分片键选择策略:决定数据分布与查询性能的关键因素

一、分片键的核心作用与重要性 MongoDB的分片(Sharding)是水平扩展数据库的关键机制&#xff0c;而分片键(Shard Key) 是整个分片架构的"心脏"。分片键的选择直接决定&#xff1a; 数据分布方式&#xff1a;文档如何分配到各个分片(Shard)查询路由效率&#xff1a;查…

作者头像 李华
网站建设 2026/7/14 16:36:30

5大维度重构求职效率:智能求职工具的实战指南

5大维度重构求职效率&#xff1a;智能求职工具的实战指南 【免费下载链接】boss_batch_push Boss直聘批量投简历&#xff0c;解放双手 项目地址: https://gitcode.com/gh_mirrors/bo/boss_batch_push 如何用自动化技术突破求职平台限制&#xff1f; 在竞争激烈的就业市…

作者头像 李华