中国建设银行官方网站悦生活,html网站简易模板,中文网站怎么做英文版,怎么做盗版电影网站先来一段摘抄自网上的TensorRT介绍#xff1a;
TensorRT是英伟达针对自家平台做的加速包#xff0c;TensorRT主要做了这么两件事情#xff0c;来提升模型的运行速度。
TensorRT支持INT8和FP16的计算。深度学习网络在训练时#xff0c;通常使用 32 位或 16 位数据。Tensor…先来一段摘抄自网上的TensorRT介绍
TensorRT是英伟达针对自家平台做的加速包TensorRT主要做了这么两件事情来提升模型的运行速度。
TensorRT支持INT8和FP16的计算。深度学习网络在训练时通常使用 32 位或 16 位数据。TensorRT则在网络的推理时选用不这么高的精度达到加速推断的目的。TensorRT对于网络结构进行了重构把一些能够合并的运算合并在了一起针对GPU的特性做了优化。现在大多数深度学习框架是没有针对GPU做过性能优化的而英伟达GPU的生产者和搬运工自然就推出了针对自己GPU的加速工具TensorRT。一个深度学习模型在没有优化的情况下比如一个卷积层、一个偏置层和一个reload层这三层是需要调用三次cuDNN对应的API但实际上这三层的实现完全是可以合并到一起的TensorRT会对一些可以合并网络进行合并。我们通过一个典型的inception block来看一看这样的合并运算。
TensorRT用来做模型的推理优化也是有Python接口的实际使用测试下来python接口的模型推理速度C基本差不多的。这里较为详细的记录TensorRT python接口从环境的配置到模型的转换再到推理过程还有模型的INT8量化有时间的话也一并总结记录了笔者使用的版本是TensorRT7.0版本此版本支持模型动态尺寸的前向推理下面也会分为静态推理和动态推理来介绍。 3.3.1 builder介绍
builder功能之一是搜索cuda内核目录找到最快的cuda以求获得最快的实现因此有必要使用相同的GPU进行构建相同的操作算子进行融合减少IO操作engine就是在此基础上运行的builder还可以控制网络以什么精度运行FP32,FP16,INT8还有两个特别重要的属性是最大批处理大小和最大工作空间大小。 安装完 tensorRT后 pip安装pycuda
pip install pycuda
TensorRT 模型转换
日志
要创建构建器您需要首先创建一个记录器为tensorrt实现日志报错接口方便报错。 TensorRT中包含一个简单的日志记录器与Python绑定。包括一个简单的记录器实现它将高于特定严重性的所有消息记录到stdout 。在下面的代码我们只允许警告和错误消息才打印
logger trt.Logger(trt.Logger.WARNING)
The Build Phase 构建器
简单来说就是用tensorrt的语言来构建模型如果自己构建的话主要是灵活但是工作量so large一般还是用tensorrt parser来构建 1Caffe框架的模型可以直接用tensorrt内部解释器构建 2除caffeTF模型以外其他框架先转成ONNX通用格式再用ONNX parser来解析 3TF可以直接通过tensorrt内部的UFF包来构建但是tensorrt uff包中并支持所有算子 4自己将wts放入自己构建的模型中工作量so large但是很灵活。
博主用的ONNXparser来构建engine的下面就介绍以下ONNX构建engine
创建一个构建器
builder trt.Builder(logger)
4.1.1. Creating a Network Definition in Python
创建构建器后优化模型的第一步是创建网络定义
# 1-1、设置网络读取的 flag
# EXPLICIT_BATCH 相较于 IMPLICIT_BATCH 模式会显示的将 batch 的维度包含在张量维度当中
# 有了 batch大小的我们就可以进行一些必须包含 batch 大小的操作了如 Layer Normalization。
# 不然在推理阶段应当指定推理的 batch 的大小。目前主流的使用的 EXPLICIT_BATCH 模式# 1-2 构建一个空的网络计算图
network_flags (1 int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
self.network builder.create_network(network_flags)
为了使用 ONNX 解析器导入模型需要EXPLICIT_BATCH标志。有关详细信息请参阅显式与隐式批处理部分。
4.1.2. Importing a Model using the ONNX Parser
现在需要从 ONNX 表示中填充网络定义。您可以创建一个 ONNX 解析器来填充网络如下所示
parser trt.OnnxParser(network, logger)