ONNX Runtime 源码阅读:模型推理过程概览

本文介绍了ONNX Runtime的模型推理过程,从安装到实例生成、初始化、运行的步骤。重点讨论了涉及的关键文件、代码入口、实例生成、初始化和运行阶段的细节,包括模型结构解析、节点执行顺序、硬件选择等。文章适合对深度学习和ONNX模型推理感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

ONNX Runtime是一个用于ONNX(Open Neural Network Exchange)模型推理的引擎。微软联合Facebook等在2017年搞了个深度学习以及机器学习模型的格式标准–ONNX,顺路提供了一个专门用于ONNX模型推理的引擎,onnxruntime。目前ONNX Runtime 还只能跑在HOST端,不过官网也表示,对于移动端的适配工作也在进行中。
一半处于工作需要一半出于兴趣,决定阅读一下onnxruntime的源码。这里算个学习记录吧。

安装

ONNX Runtime 的GitHub仓库地址为 https://github.com/microsoft/onnxruntime 。编译安装过程可以参照GitHub上的说明,这里为了方便,直接选择了PyPi的安装源。执行

pip install onnxruntime

即完成了安装。需要注意的是只支持Python3。

开始

涉及文件

onnxruntime\onnxruntime\python\session.py
onnxruntime\onnxruntime\core\framework\utils.cc
onnxruntime\onnxruntime\python\onnxruntime_pybind_state.cc
onnxruntime\onnxruntime\core\session\inference_session.cc
onnxruntime\onnxruntime\core\session\inference_session.h

代码入口

代码阅读需要先找到一个入口。通过onnxruntime的例子我们知道,在Python使用使用onnxruntime很简单,主要代码就三行:

import onnxruntime
sess = onnxruntime.InferenceSession('YouModelPath.onnx')
output = sess.run([output_nodes], {
   input_nodes: x})

第一行导入onnxruntime模块;第二行创建一个InferenceSession的实例并传给它一个模型地址;第三行调用run方法进行模型推理。因此onnxruntime模块中的InferenceSession就是我们的切入点。

实例生成

ONNX Runtime的代码组织非常良好,我们很容易找到InferenceSession所在文件session.py,整个文件非常简单,就只定义了一个InferenceSession类。通过阅读InferenceSession__init__函数,

    def __init__(self, path_or_bytes, sess_options=None, providers=[]):
        """
        :param path_or_bytes: filename or serialized model in a byte string
        :param sess_options: session options
        :param providers: providers to use for session. If empty, will use
            all available providers.
        """
        self._path_or_bytes = path_or_bytes
        self._sess_options = sess
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值