模型部署 —— onnx和onnxruntime

文章内容:介绍onnx相关基础知识和onnxruntime重要特性。

ONNX 介绍

ONNX(Open Neural Network Exchange)是一套开放的神经网络模型表示标准,旨在解决AI框架生态碎片化问题。主流深度学习框架(如PyTorch、TensorFlow)均可将训练完成的模型导出为ONNX格式,实现跨框架、跨平台的模型互操作。其核心价值在于标准化:通过定义统一的计算图结构和算子语义,使模型可脱离训练框架,在多种推理环境(云端服务器、移动端设备、边缘计算终端)中无缝部署。学习ONNX的必要性在于打破技术壁垒------当开发者需要将PyTorch模型部署到TensorFlow生态,或为工业设备集成跨平台AI能力时,ONNX能显著降低模型转换成本,避免重复开发。当前90%的主流推理引擎(如TensorRT、OpenVINO)均已原生支持ONNX,掌握其使用已成为AI工程化落地的关键技能。

关于onnx的使用,网上有很多文章,这里不再赘述。这里主要整理onnx proto的结构:

proto对象 内容 实例化关系
ModelProto Model info. model
GraphProto graph=(initializer=listTensorProto, node=listNodeProto, input=listValueInfoProto, output=listValueInfoProto, value_info=listValueInfoProto) 1. 通过Node的input/output名称连接成DAG有向图 2. input/output中包含模型输入输出的数据结构 3. initializer中包含全部node input/output的tensor数据(如权重) 4. value_info中包含全部 tensor 的数据结构 model.graph
NodeProto node=(listinput_name=str, listoutput_name=str, name=str, op_type=str, listattribute=AttributeProto) input_name output_name只是str,具体定义在graph的initializer和value_info中 graph.node
ValueInfoProto 包含shape、elem_type等,描述数据结构 graph.value_infograph.inputgraph.output
TensorProto tensor=(dims=, data_type, name=str, raw_data=bytes) graph.initializer
AttributeProto 通常包含字段 name、type 和其他包含int类型的数据 node.attribute

ONNXRuntime介绍

ONNX Runtime是针对ONNX模型优化的跨平台推理引擎,专为生产环境设计。其通过图优化、内核加速、硬件适配等技术,在CPU/GPU/专用AI芯片(如NPU)上均可实现低延迟、高吞吐的模型推理。典型应用场景包括:云端服务的实时推理(如自然语言处理API)、端侧设备的资源受限推理(如手机端图像分割),以及需要混合硬件调度的复杂场景(如多GPU服务器并行处理)。该引擎支持动态/静态图优化、量化加速、自定义算子扩展等特性,并与ONNX生态深度绑定。学习必要性体现在两方面:其一,在相同硬件条件下,ONNX Runtime相比原生框架推理速度平均提升1.5-4倍;其二,其提供Python/C++/C#等多语言API,可快速对接现有工程系统。对于需要兼顾性能与部署效率的AI应用,ONNX Runtime已成为工业级落地的首选方案。

软件架构:

  • 分层架构:

    • 前端接口C/C++ Python......
    • IR,图解析器 + 动态shape推理引擎
    • 执行抽象层,Execution Provider定义,支持异构计算拓展
    • 后端实现层,EP插件,实现GPU、CPU......,支持单图多Backend
  • 重要模块:

    • InferenceSession:资源配置和管理
    • Graph Transformer:图优化器
    • Arena-based内存池 +跨EP内存共享
    • 多线程、异步调度线程池
  • 支持拓展:

    • 自定义算子、自定义EP、自定义图优化

使用帮助可以参考 www.shaogui.life/posts/31143...

相关推荐
代码方舟5 小时前
零信任架构实战:基于天远人企关联构建自动化供应链金融网关
运维·人工智能·架构·自动化
天远API6 小时前
零信任架构实战:基于天远人企关联构建自动化图谱网关
网络·人工智能·架构·自动化
szxinmai主板定制专家7 小时前
RK3588+FPGA异构架构|高速数据采集+边缘AI落地应用全解析
人工智能·嵌入式硬件·fpga开发·架构·zynq
李福春8 小时前
降SpringAI阿里第1掌-亢龙有悔-识势选型
人工智能·架构·腾讯云架构师同盟
李游Leo8 小时前
HarmonyOS 7 + ArkUI + RelationalStore 学习笔记:本地数据分层存储与状态持久化架构实践【鸿蒙心迹】
笔记·学习·架构·harmonyos
绿蕉8 小时前
从“叠积木补安全“到“设计即安全“:EE 架构里的安全左移革命
安全·架构
voipmaker9 小时前
AI 赋能安防系统演进:从硬件单品到场景化融合调度架构
人工智能·ai·架构
数据工匠老o10 小时前
"能用应用层解决的不用存储过程",十年数据库经验总结
数据库·架构
弈栈录10 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
硅基手札11 小时前
【risc-v专栏 06b】内存架构深挖:PMA / ePMP / Cache / CMO / MMU 细节 / RVWMO 形式化
架构·risc-v