onnx实现对pytorch模型推理加速


向AI转型的程序员都关注了这个号????????????

人工智能大数据与深度学习  公众号:datayx

微软宣布将多平台通用ONNX机器学习引擎开源,此举将让机器学习框架,向着机器学习框架的标准化和性能优化方向迈进了一大步。

ONNX Runtime是适用于Linux,Windows和Mac上ONNX格式的机器学习模型的高性能推理引擎。

开发人员可以为自己机器学习任务选择合适的框架,框架作者可以集中精力推出创新,提高框架的性能。对于硬件供应商来说,也可以简化神经网络计算的复杂度,实现优化算法。

onnxruntime模型部署流程

1.安装

pip install onnxpip install onnxruntime

( pip install onnxruntime-gpu  #GPU环境)

2. Pytorch 模型转onnx

当提到保存和加载模型时,有三个核心功能需要熟悉:

1.torch.save:将序列化的对象保存到disk。这个函数使用Python的pickle
实用程序进行序列化。使用这个函数可以保存各种对象的模型、张量和字典。
2.torch.load:使用pickle unpickle工具将pickle的对象文件反序列化为
内存。
3.torch.nn.Module.load_state_dict:使用反序列化状态字典加载
model's参数字典

保存加载模型2种方式,在保存模型进行推理时,只需要保存训练过的模型的学习参数即可,一个常见的PyTorch约定是使用.pt或.pth文件扩展名保存模型。

# 第一种:保存和加载整个模型
Save:
torch.save(model_object, 'model.pth')
Load:
model = torch.load('model.pth')
model.eval()
#第二种:仅保存和加载模型参数(推荐使用)
Save:
torch.save(model.state_dict(), 'params.pth')
Load:
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load('params.pth'))
model.eval()
#记住,必须调用model.eval(),
以便在运行推断之前将dropout和batch规范化层设置为评估模式。如果不这样做,
将会产生不一致的推断结果
#在保存用于推理或恢复训练的通用检查点时,必须保存模型的state_dict

Pytorch模型转onnx

举例模型是调用resnet50训练的4分类模型,训练过程调用gpu,则转换过程如下:

1 如果保存的是整个模型

import torch
device = torch.device("cuda" if torch.cuda.is_available()
                      else "cpu")

model = torch.load("test.pth") # pytorch模型加载
batch_size = 1  #批处理大小
input_shape = (3, 244, 384)   #输入数据,改成自己的输入shape
model.eval()

x = torch.randn(batch_size, *input_shape)   
x = x.to(device)
export_onnx_file = "test.onnx"		#输出的ONNX文件名
torch.onnx.export(model
                    x,
                    export_onnx_file,
                    opset_version=11,
                    do_constant_folding=True,	
                    input_names=["input"],	
                    output_names=["output"],	
                    dynamic_axes={
"input":{0: 'batch',2:'batch',3:'batch'},
                                   
 "output":{0: 'batch',2:'batch',3:'batch'})

2 如果保存的是模型参数,则需要先创建模型,再加载模型参数

import torch
from models import resnet50
model = resnet50() #创建模型
weight = torch.load("test.pth")
model.load_state_dict(weight )

batch_size = 1  
input_shape = (3, 244, 384)   #输入数据,改成自己的输入shape

model.eval()

x = torch.randn(batch_size, *input_shape)
export_onnx_file = "test.onnx"	# 输出的ONNX文件名
torch.onnx.export(model,
                    x,
                    export_onnx_file,
                    opset_version=10,
                    do_constant_folding=True,	
                    input_names=["input"],	
                    output_names=["output"],	
                    dynamic_axes={
"input":{0: 'batch',2:'batch',3:'batch'},
                                   
 "output":{0: 'batch',2:'batch',3:'batch'})

3. 使用onnx推理预测

参考链接

https://zhuanlan.zhihu.com/p/159379768

https://blog.csdn.net/jacke121/article/details/104510401

https://blog.csdn.net/LimitOut/article/details/107117759


阅读过本文的人还看了以下文章:

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  


机大数据技术与机器学习工程

 搜索公众号添加: datanlp

长按图片,识别二维码

根据引用和,使用Torch-TensorRT可以加速PyTorch推理过程。Torch-TensorRT是一个优化工具,可以通过TensorRT对PyTorch模型进行加速,无需更改代码。这样可以提高推理速度,并且不会对模型的准确性产生影响。此外,根据引用,当使用Elastic Inference加速器时,默认的predict_fn会使用torch.jit.optimized_execution来指定模型经过优化后才能在加速器上运行,否则将以标准的PyTorch方式进行推理。值得注意的是,Amazon SageMaker目前不支持多附加设备,因此设备序号始终被设置为0。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用Torch-TensorRT在PyTorch中将推理速度提高6倍](https://blog.csdn.net/kunhe0512/article/details/124878538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch模型推理提速](https://blog.csdn.net/weixin_42264234/article/details/118637687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值