TensorRT API开发手册

第一章 综述

1.1 TensorRTLayers

1.2 关键概念

1.3 TensorRT API’s

1.3.1 Python Samples

1.3.2 Python Workflows


第一章 综述

NVIDIA的TensorRT是一个基于GPU高性能前向运算的C++库。TensorRT导入网络定义,通过合并tensors与layers,权值转换,选择高效中间数据类型,基于层参数与性能评估的选择,来进行网络优化。

TensorRT提供模型导入途径来帮助你对训练好的深度学习模型进行表示,同于TensorRT的优化与运行。这种优化工具自动进行图优化,层融合,并利用多样化的高度优化的计算核心寻找最快的模型实现方式。输出可以前向运算时可以运行这个网络的运行库。

TensorRT提供了一种基础能力,使得用户可以在Pascal与VoltaGPU上选择性进行快速多精度应用。TensorRT用gcc4.8进行编译。

1.1 TensorRTLayers

TensorRT直接支持以下类型的层:

Activation

激活层通过逐像素激活函数实现。支持的激活类型包括,RELU,tanh与sigmoid.

BatchGemm

批矩阵相乘层实现了批矩阵的乘法运算。在矩阵相乘前矩阵可以进行转置。当维度不匹配的时候会进行适当的矩阵扩展。

Concatenation

连接层在通道维度上将宽高相同的tensors进行连接。

Constant

Constant层是一个提供本层参数的tensor,使得常量在计算时可以方便使用。

Convolution

Convolution层计算3D卷积(通道,高,宽),可选择是否使用偏置。

Deconvolution

Deconvolution层实现了去卷积运算,可选择是否使用偏置。

ElementWise

ElementWise层也叫做Eltwise层,实现了逐像素操作。支持加法,乘法,最大,减法,除法,指数运算。

Flatten

Flatten层在保持batch_size的同时,将输入转成一个向量。假设第一个维度表示batch大小。Flatten只能在全连接层前使用。

FullConnected

全连接层实现了矩阵向量积运算,可选择是否使用偏置。

Gather

Gather层实现了聚集操作,将一个数据tensor,一个索引tensor,一个数据tensor axis作为输入,利用索引index将数据tensor重建索引。当前,只有TensorRT C++API支持。

LRN

LRN层实现跨通道局部响应归一化。

MartrixMultipy

矩阵乘法层实现了一系列的矩阵相乘运算。在乘法运算前可以选择是否将矩阵转置。当维度不匹配的时候会进行适当的矩阵扩展。

Padding

Padding层实现了tensors的空间0扩展。Padding可以是不同维度,不对称的,也可以是正的(tensor扩展结果),或者负的(均值结果)。

Plugin

Plugin层允许用户实现原生TensorRT不支持的层。

Pooling

Pooling层在通道维度实现池化操作。支持最大池化与均值池化。

Ragged SoftMax

Ragged SoftMax实现了包含不同长度序列tensor的跨通道的Softmax。序列的长度利用另外一个tensor输入。

Reduce

Reduce使用降维算法实现了tensors降维操作。降维运算支持像素相乘,最大,最小,平均。目前只有TensorRT的C++API支持这个层。

RNN

这个层在RNNV2层出现后已经弃用了,然而还是向下兼容。

RNNv2

RNNv2实现了类似递归神经网络,GRU,LSTM这样的递归层。当前支持RNN,GPU,LSTM。

Scale

Scale层实现了逐tensor,逐通道,逐权重的仿射变换,与或运算,以及常数幂运算。

Shuffle

Shuffle层用来实现tensors得重新排序,可以用来进行reshape或者数据转换。

SoftMax

SoftMax实现了跨通道的softmax。

Squeeze

Squeeze层将tensor中维度为1的shape。

TopK

TopK层在一个维度中寻找TopK元素,返回降维的tensor,与一个位置索引的tensor。

Unary

Unary支持元素级的一元操作。支持exp,log,sqrt,recip,abs与neg操作。

注:

BatchNormalization可以利用TensorRT的Scale层实现。

卷积层进行的操作实际上是相关操作。这样主要是考虑通过TensorRT API导入权重,而不是通过NVCaffe解析库。

### 安装TensorRT及其API文档和使用教程 #### TensorRT安装流程 在Ubuntu系统中安装TensorRT需要关注CUDA与cuDNN的版本兼容性。以下是具体的安装过程: 1. **确认环境依赖** 需要先确定已安装的CUDA和cuDNN版本,确保它们与目标TensorRT版本匹配[^3]。如果尚未安装CUDA或cuDNN,则需按照官方指南完成安装。 2. **下载TensorRT安装包** 访问NVIDIA官网并进入TensorRT下载页面,选择适合当前系统的版本。例如,在Ubuntu 16.04环境下可以选择`TensorRT-7.2.3.4.Ubuntu-16.04.x86_64-gnu.cuda-11.0.cudnn8.1.tar.gz`作为安装文件[^2]。 3. **解压安装包** 将下载好的`.tar.gz`压缩包放置到指定目录后执行如下命令进行解压: ```bash tar -xzvf TensorRT-<version>.tar.gz ``` 解压完成后会生成一个名为`tensorrt`的文件夹,其中包含了库文件、头文件以及其他资源。 4. **设置环境变量** 修改用户的shell配置文件(如`.bashrc`),添加以下路径以便程序能够正确调用TensorRT功能: ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/tensorrt/lib ``` 5. **验证安装成功与否** 使用样例测试脚本来检验TensorRT是否正常工作。通常情况下,安装包内附带了一些简单的例子供开发者参考运行效果。 #### API文档获取途径 为了更好地利用TensorRT开发高性能推理应用,可以查阅其详尽的技术资料。主要来源包括但不限于以下几个方面: - NVIDIA官方网站提供了最新版次的手册链接地址; - GitHub仓库里也有开源项目贡献者整理出来的学习笔记可供借鉴; - 社区论坛讨论帖子里往往隐藏着不少实用技巧提示。 #### 使用教程推荐 针对初学者而言,可以从基础概念入手逐步深入理解整个框架的工作原理。这里列举几个常见的入门级主题方向供大家探索尝试: - 学习如何构建基本网络模型并通过Python接口加载预训练权重参数实现前向传播计算操作; - 掌握序列化/反序列化进程从而保存优化后的引擎用于后续部署场景当中; - 实践多线程并发处理机制提升整体吞吐量表现水平等等。 ```python import tensorrt as trt TRT_LOGGER = trt.Logger(trt.Logger.WARNING) def build_engine(onnx_file_path, engine_file_path): with trt.Builder(TRT_LOGGER) as builder, \ builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) as network,\ trt.OnnxParser(network, TRT_LOGGER) as parser: config = builder.create_builder_config() runtime = trt.Runtime(TRT_LOGGER) with open(onnx_file_path, 'rb') as model: if not parser.parse(model.read()): print('Failed to parse the ONNX file') exit() plan = builder.build_serialized_network(network, config) with open(engine_file_path, "wb") as f: f.write(plan) ``` 上述代码片段展示了基于ONNX格式转换成TensorRT Engine的核心逻辑部分。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值