专栏首页机器学习AI算法工程onnx实现对pytorch模型推理加速

onnx实现对pytorch模型推理加速

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

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

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

onnxruntime模型部署流程

1.安装

pip install onnx
pip 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


本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度探索ONNX模型部署

    这篇文章从多个角度探索了ONNX,从ONNX的导出到ONNX和Caffe的对比,以及使用ONNX遭遇的困难以及一些解决办法,另外还介绍了ONNXRuntime以...

    计算机视觉
  • PyTorch 1.0 正式公开,Caffe2并入PyTorch实现AI研究和生产一条龙

    新智元
  • 如何将PyTorch Lightning模型部署到生产中

    纵观机器学习领域,主要趋势之一是专注于将软件工程原理应用于机器学习的项目激增。 例如,Cortex再现了部署无服务器功能但具有推理管道的体验。类似地,DVC实现...

    计算机与AI
  • 如何使用TensorRT对训练好的PyTorch模型进行加速?

    TensorRT是Nvidia公司出的能加速模型推理的框架,其实就是让你训练的模型在测试阶段的速度加快,比如你的模型测试一张图片的速度是50ms,那么用tens...

    计算机视觉联盟
  • 【重磅】微软Facebook联手发布AI生态系统,CNTK+Caffe2+PyTorch挑战TensorFlow

    【新智元导读】夜间重磅,微软Facebook联手发布AI生态系统,推出 Open Neural Network Exchange(ONNX,开放神经网络交换)格...

    新智元
  • 【亚马逊加盟对抗谷歌联盟ONNX】微软Facebook深度学习开源联盟再添盟友

    编辑:弗格森 【新智元导读】 除了亚马逊以外,AMD、ARM、华为、 IBM、英特尔、Qualcomm都宣布将支持ONNX,形成强大的深度学习开源联盟,谷歌目...

    新智元
  • 开发 | 新版PyTorch发布在即,融合Caffe2、ONNX

    AI 科技评论按:上个月,Caffe2 代码正式并入 PyTorch,就在今天,Facebook AI 系统与平台部(AI Infra and Platform...

    AI科技评论
  • 业界 | Facebook联合微软推出神经网络交换格式ONNX:实现不同框架间模型迁移

    选自Facebook 作者:Joaquin Quinonero Candela 机器之心编译 近日,Facebook 与微软联合推出了开放式神经网络交换(ONN...

    机器之心
  • 【NLP】把BERT的推断速度提升17倍

    微软刚刚开源了Transformer的突破性优化,大大提升了CPU和GPU上的推理速度。

    yuquanle
  • 融合 Caffe2、ONNX 的新版 PyTorch 发布在即,能否赶超 TensorFlow?

    AI 研习社按:上个月,Caffe2 代码正式并入 PyTorch,就在今天,Facebook AI 系统与平台部(AI Infra and Platform)...

    AI研习社
  • 浅谈机器学习模型推理性能优化

    在机器学习领域,清晰明了的数据预处理和表现优异的模型往往是数据科学家关注的重点,而实际生产中如何让模型落地、工程化也同样值得关注,工程化机器学习模型避不开的一个...

    ThoughtWorks
  • PyTorch模型转TVM模型全流程记录

    PyTorch1.3以后添加了对移动端的支持,我曾尝试过将模型转入移动端,花了很多功夫,把检测+识别的所有代码都转成TorchScript之后,放到移动端运行,...

    带萝卜
  • 使用OpenVINO加速Pytorch表情识别模型

    OpenVINO自带的表情识别模型是Caffe版本的,这里使用的模型是前面一篇文章中训练生成的pytorch全卷积网络,模型基于残差网络结构全卷积分类网络。

    OpenCV学堂
  • 亲测有效 | OpenVINO支持ONNX格式文件直接读取了

    OpenVINO 2020R04版本支持ONNX格式文件的直接读取了,使用的函数还是跟之前读取IR文件函数保持一致,只是第二个参数缺省为空时候,就会尝试读取ON...

    OpenCV学堂
  • 使用ONNX和Torchscript加快推理速度的测试

    近年来,基于Transformer 架构的模型一直是推动NLP在研究和工业上取得突破的动力。BERT、XLNET、GPT或XLM是一些改进了技术水平的模型,它们...

    deephub
  • PyTorch 1.0现身F8开发者大会

    B.Stories 第三方集成:支持 Facebook、Instagram、Messenger 和 WhatsApp 这四个带有 Stories 功能的应用,适...

    刀刀老高
  • 业界 | 无缝整合PyTorch 0.4与Caffe2,PyTorch 1.0即将问世

    机器之心
  • onnx2pytorch和onnx-simplifier新版介绍

    【GiantPandaCV导语】本文是ONNX2Pytorch思路分享以及onnx-simplifier新版简要介绍。ONNX2Pytorch工具已经测试了on...

    BBuf
  • 开源一年多的模型交换格式ONNX,已经一统框架江湖了?

    在过去的一年多中,ONNX 这种「通用」的神经网络交换格式已经有了很长远的发展,用不同框架编写的模型可以在不同的平台中流通。在这次研讨会中,我们确切地感受到了这...

    机器之心

扫码关注云+社区

领取腾讯云代金券