深度学习神经网络的部署

简介: 1. ONNX的简介Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移(一般用于中间部署阶段)。

1. ONNX的简介

Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移(一般用于中间部署阶段)。

目前官方支持加载ONNX模型并进行推理的深度学习框架有: Caffe2,PyTorch,MXNet,ML.NET,TensorRT 和 Microsoft CNTK,并且 TensorFlow 也非官方的支持ONNX。


使用tensorrt的一般步骤

主要先是构建(bulid),之后是部署(development)


Build:该阶段主要完成模型转换(从caffe或TensorFlow到TensorRT),如下图所示,在模型转换时会完成前述优化过程中的层间融合,精度校准。这一步的输出是一个针对特定GPU平台和网络模型的优化过的TensorRT模型,这个TensorRT模型可以序列化存储到磁盘或内存中。存储到磁盘中的文件称之为 planfile。


Deploy:该阶段主要完成推理过程,如下图所示。将上一个步骤中的plan文件首先反序列化,并创建一个 runtime engine,然后就可以输入数据(比如测试集或数据集之外的图片),然后输出分类向量结果或检测结果。


以onnx模型为例检测介绍,主要分为3步,如下图所示,第一步是导入模型,这包括从磁盘上保存的文件加载模型,并将其从原始框架转换为TensorRT网络。ONNX是表示深度学习模型的标准,使它们能够在框架之间传输(Caffe2、Chainer、CNTK、paddle、PyTorch和MXNet都支持ONNX格式)。接下来,基于输入模型、目标GPU平台和指定的其他配置参数,构建一个优化的TensorRT引擎。最后一步是向TensorRT引擎提供输入数据以执行推理。

需要用的tensorrt的组件如下:

  • ONNX解析器:以ONNX格式的经过训练的模型作为输入,并用TensorRT填充网络对象
  • Builder:在TensorRT中获取一个网络并生成一个为目标平台优化的引擎
  • Engine:获取输入数据,执行推理并发出推理输出
  • Logger:与生成器和引擎关联的对象,用于在生成和推断阶段捕获错误、警告和其他信息

构架引擎步骤三部曲

创建bulider

通过builder创建一个空的TensorRT网络(Net)network()

构建一个onnx的解析器parser

with trt.Builder(TRT_LOGGER) as builder, \
      builder.create_network() as network,\
      trt.OnnxParser(network, TRT_LOGGER) as parser:

builder介绍

builder功能之一是搜索cuda内核目录,找到最快的cuda以求获得最快的实现,因此有必要使用相同的GPU进行构建(相同的操作,算子进行融合,减少IO操作),engine就是在此基础上运行的,builder还可以控制网络以什么精度运行(FP32,FP16,INT8),还有两个特别重要的属性是最大批处理大小和最大工作空间大小。

builder.max_workspace_size = 1<< 30
builder.max_batch_size = max_batch_size

它的作用是给出模型中任一层能使用的内存上限。运行时,每一层需要多少内存系统分配多少,并不是每次都分 1 GB,但不会超过 1 GB。 就是 2^30 bytes 即 1 GB。


默认使用FP32加速,即只是图优化等操作,不进行量化或降精度。设置FP16和int9_mode十分简单,一行代码即可:

builder.fp16_mode = fp16_mode  # Default: False
builder.int8_mode = int8_mode  # Default: False

判断是否有parse model文件(onnx)

if not os.path.exists(onnx_file_path):
  quit('ONNX file {} not found'.format(onnx_file_path))
print('Loading ONNX file from path {}...'.format(onnx_file_path))

正常输出为

Loading ONNX file from path ./model.onnx...
• 1

开始onnx的文件解析

with open(onnx_file_path, 'rb') as model:
    print('Beginning ONNX file parsing')
    parser.parse(model.read())
   #for each_line in model:  #可以打印出来观看及鞥
       #print(each_line)

对注释部分的打印结果描述是:

Beginning ONNX file parsing
b'\x08\x04\x12\x07pytorch\x1a\x031.2:\xdc\xcb\x06\n'
b'\x8a\x01\n'
b'\x05input\n'
b'\rlayer1.weight\n'
b'\x0blayer1.bias\x12\x017"\x04Conv*\x12\n'
b'\tdilations@\x01@\x01\xa0\x01\x07*\x0c\n'
b'\x05group\x18\x01\xa0\x01\x02*\x15\n'
b'\x0ckernel_shape@\x03@\x03\xa0\x01\x07*\x11\n'
b'\x04pads@\x00@\x00@\x00@\x00\xa0\x01\x07*\x10\n'
b'\x07strides@\x01@\x01\xa0\x01\x07\n'
b'\x0c\n'
b'\x017\x12\x018"\x04Relu\n'
b'K\n'
b'\x018\x12\x019"\x07MaxPool*\x15\n'
b'\x0ckernel_shape@\x03@\x03\xa0\x01\x07*\x11\n'
b'\x04pads@\x00@\x00@\x00@\x00\xa0\x01\x07*\x10\n'
b'\x07strides@\x01@\x01\xa0\x01\x07\n'
b'\x87\x01\n'
......................后面还有很多......................结束

已经完成onnx文件解析,

print('Completed parsing of ONNX file')
print('Building an engine from file {}; this may take a while...'.format(onnx_file_path))

输出结果

Completed parsing of ONNX file
Building an engine from file ./model.onnx; this may take a while...
相关文章
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的自适应神经网络:原理与应用
【8月更文挑战第14天】在深度学习领域,自适应神经网络作为一种新兴技术,正逐渐改变我们处理数据和解决问题的方式。这种网络通过动态调整其结构和参数来适应输入数据的分布和特征,从而在无需人工干预的情况下实现最优性能。本文将深入探讨自适应神经网络的工作原理、关键技术及其在多个领域的实际应用,旨在为读者提供一个全面的视角,理解这一技术如何推动深度学习向更高效、更智能的方向发展。
|
4天前
|
机器学习/深度学习 自然语言处理 数据安全/隐私保护
深度学习中的艺术与科学:探索神经网络的奥秘
本文将带您走进深度学习的奇妙世界,一探神经网络背后的科学原理和艺术创造。我们将从基础概念出发,逐步深入到模型训练的技巧,以及如何应对过拟合等常见问题。通过实例分析,我们将展示深度学习技术在图像识别和自然语言处理等领域的应用,并讨论其在未来科技发展中的潜在影响。让我们一同解锁深度学习的力量,发现它如何塑造我们的数字世界。
|
5天前
|
机器学习/深度学习 传感器 自然语言处理
深度学习的魔法:如何用神经网络解锁数据的秘密
在这个数字信息爆炸的时代,深度学习技术如同一把钥匙,揭开了数据隐藏的层层秘密。本文将深入浅出地探讨深度学习的核心概念、关键技术和实际应用,带领读者领略这一领域的奥秘与魅力。通过生动的比喻和直观的解释,我们将一起走进神经网络的世界,看看这些由数据驱动的“大脑”是如何学习和成长的。无论你是科技爱好者还是行业新手,这篇文章都将为你打开一扇通往未来的大门。
|
2天前
|
机器学习/深度学习 人工智能 PyTorch
【深度学习】使用PyTorch构建神经网络:深度学习实战指南
PyTorch是一个开源的Python机器学习库,特别专注于深度学习领域。它由Facebook的AI研究团队开发并维护,因其灵活的架构、动态计算图以及在科研和工业界的广泛支持而受到青睐。PyTorch提供了强大的GPU加速能力,使得在处理大规模数据集和复杂模型时效率极高。
112 59
|
5天前
|
机器学习/深度学习 算法 自动驾驶
深度学习的奥秘:探索神经网络的黑盒子
深度学习技术如同一扇打开未知世界的大门,其背后的复杂算法和庞大数据让许多人感到好奇又困惑。本文以通俗易懂的语言,逐步揭开深度学习的神秘面纱,从基础概念到实际应用,引导读者理解并欣赏这一技术的奇妙之处。
15 1
|
5天前
|
机器学习/深度学习 算法
深度学习中的艺术与科学:探索神经网络的奥秘
本文以浅显易懂的方式介绍了深度学习的基本概念,并逐步深入到其背后的复杂数学原理。通过生动的比喻和直观的解释,文章揭示了深度学习如何模仿人脑处理信息,并探讨了它在图像识别、语音处理等领域的应用。同时,文章还讨论了深度学习面临的挑战和未来的发展方向,旨在激发读者对这一前沿技术的兴趣和思考。
|
7天前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
30 1
|
1天前
|
机器学习/深度学习 API 数据处理
《零基础实践深度学习》2.4手写数字识别之网络结构
这篇文章介绍了手写数字识别任务中网络结构设计的优化,比较了多层全连接神经网络和卷积神经网络两种模型结构,并展示了使用PaddlePaddle框架实现这些网络结构,训练并观察它们在MNIST数据集上的表现。
7 0
|
1天前
|
机器学习/深度学习 自然语言处理 算法
深度学习的奥秘:探索神经网络的核心机制
在这篇文章中,我们将深入浅出地探讨深度学习背后的科学原理和实际应用。通过简化的语言和生动的比喻,我们将揭示神经网络如何模仿人脑处理信息的方式,以及它们如何在各种领域内实现惊人的成就。无论你是技术新手还是资深专家,这篇文章都将为你提供新的视角和深刻的见解。
|
2天前
|
机器学习/深度学习 存储 物联网
深度学习模型的优化与部署
【8月更文第18天】随着深度学习技术的发展,模型规模变得越来越大,这对计算资源的要求也越来越高。为了能够在资源有限的边缘设备(如智能手机、物联网设备)上运行复杂的深度学习模型,我们需要采用一系列优化方法来减少模型大小和计算复杂度。本文将介绍几种常用的模型优化技术,并讨论如何在边缘设备或云端服务器上部署这些优化后的模型。
15 0

热门文章

最新文章