没有合适的资源?快使用搜索试试~ 我知道了~
使用ONNX Runtime推理模型.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 104 浏览量
2024-04-15
10:05:22
上传
评论
收藏 4.61MB PDF 举报
温馨提示
试读
16页
使用ONNX Runtime推理模型.pdf
资源推荐
资源详情
资源评论
使用ONNX Runtime推理模型
作者:李玉冰
指导老师:杨威
1 简介
官方网站:https://onnxruntime.ai/
ONNX Runtime (ORT)是机器学习模型的加速器,具有多平台支持和灵活的接口,可与特定于硬
件的库集成。ONNX Runtime 可与来自 PyTorch、Tensorflow/Keras、TFLite、scikit-learn 和其他框架
的模型一起使用。ONNX Runtime是针对ONNX模型的以性能为中心的引擎,可在多个平台和硬件
(Windows,Linux和Mac以及CPU和GPU上)高效地进行推理。ONNX运行时已被证明大大增加了多种
型号的性能。
ONNX 运行时推理为 Office、Azure、Bing 以及数十个社区项目的关键 Microsoft 产品和服务中的
机器学习模型提供支持。ONNX运行时推理的示例用例包括:
提高各种 ML 模型的推理性能;
在不同的硬件和操作系统上运行;
在 Python 中训练但部署到 C#/C++/Java 应用程序中;
使用在不同框架中创建的模型训练和执行推理。
2 基本使用方法
2.1 前提准备
参考:https://pytorch.org/tutorials/advanced/super_resolution_with_onnxruntime.html
使用前先准备一个onnx的模型,参考Pytorch的官方教程,运行 export_onnx_model.py 文件(可
在2.2.3 Pytorch官方示例小节中找到)中的 export_onnx_model() 函数,可以导出ONNX模型
super_resolution.onnx 。该模型接收形状为[batch_size,1、224、224]的输入,输出形状为[1, 1,
672, 672]。
注:[batch_size,1、224、224]表示batch_size张通道数为1、高度为224,宽度为224的图像。
本篇文章仅讲述ONNX RT的使用,不讲述Pytorch导出过程。
2.2 Python使用
ONNX Runtime提供Python接口。根据ONNX RT的官方文档(Python API页面),ONNX
Runtime兼容的Python版本为 Python 3.6-3.9 ,注意安装匹配的Python版本。
2.2.1 安装
调用ONNX Runtime的Python接口需要安装onnxruntime的CPU版或GPU版,安装命令如下:
注:在查阅资料时发现CPU版可能和GPU版不兼容,如果调试时报错,可以只保留需要使用的版本
进行尝试。
2.2.2 快速开始
ONNX Runtime的Python接口进行推理主要分三步:
(1)导入onnxruntime包;
(2)创建InferenceSession,参数为需要进行推理的 onnx 模型字节串或模型路径,其他参数的含
义见下面的 InferenceSession 小节;
(3)用run方法进行推理,参数为输出列的名称 list 和输入的名称-输入值的 dict ,输入值的形
状与模型能接受的形状相同,其他参数的含义见下面的 Session.run 小节。 返回值是一个由 ndarray
组成的 list ,形如 [ array([[[...]]]), array([[[...]]]), ...] ,array的形状应该(待测)与
该模型的输出形状一致。
注:onnx模型的网络结构可以通过onnx可视化工具看到,如:https://lutzroeder.github.io/netro
n/,可以通过此工具查看模型输入形状和输出形状。
源代码:https://onnxruntime.ai/docs/api/python/modules/onnxruntime/capi/onnxruntime_i
nference_collection.html
InferenceSession
InferenceSession继承自Session类,包括初始化参数及其含义,具体定义如下:
$ pip install onnxruntime
$ pip install onnxruntime-gpu
import onnxruntime
sess = onnxruntime.InferenceSession('YouModelPath.onnx')
output = sess.run([output_name,...], { input_name: input_value })
class InferenceSession(Session):
"""
This is the main class used to run a model.
"""
def __init__(self, path_or_bytes, sess_options=None, providers=None,
provider_options=None):
"""
:param path_or_bytes: filename or serialized ONNX or ORT format model in
a byte string
:param sess_options: session options
:param providers: Optional sequence of providers in order of decreasing
precedence. Values can either be provider names or tuples of
(provider name, options dict). If not provided, then all available
providers are used with the default precedence.
:param provider_options: Optional sequence of options dicts
corresponding
to the providers listed in 'providers'.
The model type will be inferred unless explicitly set in the
SessionOptions.
To explicitly set:
so = onnxruntime.SessionOptions()
so.add_session_config_entry('session.load_model_format', 'ONNX') or
so.add_session_config_entry('session.load_model_format', 'ORT') or
A file extension of '.ort' will be inferred as an ORT format model.
All other filenames are assumed to be ONNX format models.
'providers' can contain either names or names and options. When any
options
are given in 'providers', 'provider_options' should not be used.
The list of providers is ordered by precedence. For example
['CUDAExecutionProvider', 'CPUExecutionProvider']
means execute a node using CUDAExecutionProvider if capable, otherwise
execute using CPUExecutionProvider.
"""
Session.__init__(self)
if isinstance(path_or_bytes, str):
self._model_path = path_or_bytes
self._model_bytes = None
elif isinstance(path_or_bytes, bytes):
self._model_path = None
self._model_bytes = path_or_bytes # TODO: This is bad as we're
holding the memory indefinitely
else:
raise TypeError("Unable to load from type
'{0}'".format(type(path_or_bytes)))
self._sess_options = sess_options
self._sess_options_initial = sess_options
self._enable_fallback = True
self._read_config_from_model =
os.environ.get('ORT_LOAD_CONFIG_FROM_MODEL') == '1'
try:
self._create_inference_session(providers, provider_options)
except RuntimeError:
if self._enable_fallback:
print("EP Error using {}".format(self._providers))
print("Falling back to {} and
retrying.".format(self._fallback_providers))
self._create_inference_session(self._fallback_providers, None)
# Fallback only once.
self.disable_fallback()
else:
raise
def _create_inference_session(self, providers, provider_options):
available_providers = C.get_available_providers()
剩余15页未读,继续阅读
资源评论
百态老人
- 粉丝: 2191
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功