tensorrt使用文档(一)

    科技2022-08-13  141

    Overview

     

    NVIDIATensorRT™是一个C ++库,可以帮助NVIDIA图形处理器(GPU)进行高性能推理。 TensorRT通过合并张量和图层,转换权重,选择高效的中间数据格式,并根据图层参数和测量的性能从大型内核目录中进行选择,从而对网络进行定义并对其进行优化。   TensorRT包含导入方法,可帮助您为TensorRT表达训练有素的深度学习模型以优化和运行。 它是一种优化工具,可以应用图形优化和图层融合,并利用各种高度优化的内核集合找到该模型的最快实现,以及可用于在推理上下文中执行此网络的运行时方法。   TensorRT包含一个基础架构,可让您利用Pascal和Volta GPU的高速降低精度功能作为可选优化。 TensorRT是基于GCC4.8的。  

     

    1. TensorRT Layers TensorRT可以直接支持下面类型的网络层:

     

    Activation (激活层): 激活层是每个元素的激活方法,它目前支持一下几种类型的激活层: ReLU , tanh , sigmod

     

    Concatenation (连接层): 连接层链接通过通道维度链接多个相同高度和宽度的张量

     

    Convolution( 卷基层 ): 卷基层是一个三维的卷积操作,有时会加入bias(偏置量)

     

    Deconvolution 反卷基层是一个反卷积操作,有时会加入bias(偏置量)

     

    ElementWise ElementWise层是一些常用的元素操作。目前支持的有: sum, product, maximum, subtraction, division 和 power.

     

    Flatten

     

    Flatten层的作用是使输入的张量在大小不变的情况下,变得扁平化。举个例子:一个输入张量形状为:n*c*w*h(4维);输出为一个大小为n*(c*w*h)(一维)的向量

     

    FullyConnected FullyConnected实现的是一个矩阵向量的乘积,有时会加入bias(偏置量)

     

    LRN LRN层实现了一个跨通道的局部响应归一化

     

    Padding Padding层实现了在空间上的张量的零填充。填充可以是在每个轴上不对称的,正的(使张量膨胀),负的(使张量剪裁)

     

    Plugin Plugin层允许您自定义网络层的实现,而这些网络层可能是TensorRT不支持的。

     

    Pooling Pooling层在一个通道上实现了池化操作。支持的池化类型有最大和平均。

     

    RNN RNN层实现了递归网络层。它包括:RNN,GRU(Gated Recurrent Units),LSTM(Long Short-term memory)

     

    Scale Scale层实现了每一个张量,每一个通道或者每一个权重的仿射变换和常数求幂

     

    Shuffle Shuffle层实现了张量的调整。它可以用于改变数据的形状或者顺序

     

    SoftMax SoftMax层实现了跨通道的SoftMax操作

     

    Squeeze Squeeze层从张量形状中移除尺寸为1的维度。 Squeeze层仅实现二元挤压(去除特定尺寸1维)。 批量维度无法删除。

     

    Unary Unary层支持点态一元操作。支持的操作有 exp 、 log 、 sqrt 、 replp 、 abs 、 neg 。

     

    2.Key Concepts

     

    请确定您熟悉以下内容: Networkdefinition 神经网络的定义,它包括了一个按顺序排列好的网络层,以及一个张量的集合

     

    Layer 每一个网络层输入一系列的张量,计算并输出一系列的张量。每一个网络层都有一些参数,举个例子:在卷基层中有: convolutionsize, stride , convolutionfilter weights 。

     

    Tensor 一个张量是一个网络层的输入,或者是一个网络层的输出。张量会有数据类型来详述他们的精度,举个例子:16位或者32位的浮点数(16-bit float or 32-bit float),3维(3-dimensions),通道(channel),宽和高。输入张量的尺寸由应用程序定义,对于输出张量,则由生成器推断。 所支持的维数为n(p1p2...)chw,其中p1,p2等是索引维数。张量最多有 Dims::MAX_DIMENS IONS 维度,其中该常数设置为8。

     

    每个网络层和张量都有一个名称,在分析或读取tensorrt构建日志时非常有用。 当使用NvCaffeParser时, 张量和网络层的名字取自NVCaffeprototxt文件中。

     

    3.TensorRT API's

     

    TensorRT的API允许开发人员导入、校准、生成和部署优化的网络。网络可以直接从NVCaffe导入,也可以通过UFF格式从其他框架导入。它们也可以通过实例化各个层和直接设置参数和权重来创建。 除了早期的C++接口,TensorRT还绑定了python的接口。TensorRT的Python接口支持除了RNN以外的所有功能。它通过使用Numpy作为网络层权重和使用PyCUDA,使它的输出和输出具有通用性。它会提供一系列的功能,来解决开发者经常面临的问题。这些功能包括:NVCaffe 模型分析,在一个流中的UFF模型分析,还有在一个UFF文件中读取和写入PLAN文件。这些功能更都在 tensort.utils中。 tensorrt/examples/custom_layers提供了一个工作流程给那些希望用Python实现传统网络层的开发者。

     

    3.1 Python Samples Python接口支持之前提供的所有的C++的接口: ‣       NvCaffeParser ‣       Nvinfer的图定义API ‣       优化推理引擎的构建器 ‣       用于计算推理引擎执行时间的接口 ‣       用于注册自定义层实现的调用。

     

    你可以在 {PYTHON_PACKAGE_DIR}/tensorrt/ examples这个地址里面找到Python的例子 TensorRT包附带了几个示例应用程序实现。根据您是在系统中安装TensorRT,还是只为用户安装,可以找到这些选项。

     

    一些样例程序的位置: If you installed TensorRT with: Examples are located in:       pip(3)    install tensorrt....    /usr/local/lib/python{2.7/3.5}/dist-           packages/tensorrt/examples pip(3)    install tensorrt.... --user    $HOME/.local/lib/python{2.7/3.5}/dist-     packages/tensorrt/examples

     

    For more information about importing a trained model toTensorRT using Python, see NVCaffePython Workflow, TensorFlow PythonWorkflow, and Converting A Model FromAn Unsupported Framework To TensorRT With The TensorRT Python API. 对于如何使用Python导入训练好的模型到TensorRT,您可以查看 NVCaffe Python Workflow, TensorFlow Python Workflow, 和 Converting A Model FromAn Unsupported Framework To TensorRT With The TensorRT Python API.   tensorrt推理引擎组件 tensorrt_inference组成   tensorrt推理引擎伪代码
    Processed: 0.014, SQL: 8