【TensorRT】基本介绍

news/2024/11/28 10:52:21/

TensorRT用于高效实现已经训练好的深度学习的模型的推理过程的SDK,能使DL模型有更快的推理速度和更高的吞吐量。官方提供Python和C++两种接口,形式基本一致且相互对应。

1 ✨ TensorRT介绍

🍟1.1 TensorRT的工作

分为两个时期(构建期和运行期):

1-1 构建期工作
namedescription
模型解析/建立加载 Onnx等其他格式的模型/使用原生API搭建模型
计算图优化横向层融合(Conv),纵向层融合(Conv+add +ReLU)
节点消除去除无用层,节点变换(Pad,Slice,Concat,Shuffle)
多精度支持FP32/ FP16 / INT8 / TF32(可能插入reformat节点)
优选kernel/format硬件有关优化
导入plugin实现自定义操作
现存优化显存池复用
1-2 运行期工作
namedescription
运行时环境对象生命期管理,内存显存管理,异常处理
序列化/反序列化推理引擎保存为文件或从文件中加载

🌭1.2 TensorRT流程

在这里插入图片描述
构建期:

  1. 创建logger(日志记录器)
  2. 建立Builder(引擎构建器,包含计算图属性信息)和BuilderConfig(Builder相关选项)
  3. 创建Network(计算图具体内容),网络主体。
  4. 生成SerializedNetwork(网络的TRT内部表示)

运行期:
5. 建立Engine(模型计算核心)和Context(类比进行)
6. Buffer(数据内存、显存)相关准备(Host端+device端)
7. Buffer拷贝 Host to Device
8. 执行推理(Execute)
9. Buffer拷贝 Device to Host
10.善后工作
在这里插入图片描述

🍿1.3 模型转化(DL Network=>TRT Network)

在这里插入图片描述
三种方案:

  1. 使用框架自带的TRT接口。简单灵活,部署仍在原框架中,无需书写Plugin,但是牺牲了一定的性能。
  2. 使用Paser(推荐)。流程成熟,ONNX通用性好,方便网络调整,兼顾效率性能。
  3. 使用TensorRT原生API搭建网络。性能最优,精细网络控制,兼容性最好,但是应用性和开发效率较低。

✨ 2 API介绍

在这里插入图片描述

🧂2.1 logger(日志记录器)

"""
trt.Logger.VERBOSE:可选参数,产生不同等级的日志,由详细到简略分别为VERBOSE,INFO,WARNING,ERROR,INTERNAL_ERROR
"""
logger = trt.Logger(trt.Logger.VERBOSE)

通常使用VERBOSE和INFO两个,可获得网络优化过程和接口信息。

🥓 2.2 Builder(引擎构建器)以及BuilderConfig

Builder:

builder = trt.Builder(logger)

builder.max_batch_ size = 256,指定最大Batch Size(Static Shape模式下使用)

BuilderConfig:

config = builder.create_builder_config()

常用属性有:

namedescription

🥚2.3 Network(网络具体构造)

"""
param:`1 <<int(tensorrt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)`,使用Explicit Batch模式。
"""
network = builder.create_network()

常用方法:

namedescription
network.add_input( ‘oneTensor’ ,trt.float32,(3,4,5))标记网络输入张量
network.add_input( ‘oneTensor’ ,trt.float32,(3,4,5))添加layer
network.mark_output(convLayer.get_output(O))标记网络输出张量

🍿2.4 生成Engine

serializedNetwork = builder. build_serialized_network(network, config)  # SerializedNetwork(TRT内部表示)
engine = trt.Runtime(logger).deserialize_cuda_engine(serializedNetwork)

在这里插入图片描述

什么是binding:
在这里插入图片描述
可以用context.get_binding_shape(2)context.get_binding_shape(3)获取网络信息

🤣2.5 生成Context

context = engine.create_execution_context()

在这里插入图片描述

cuda异构计算:
在这里插入图片描述

🥓2.6 Buffer

在这里插入图片描述

2.7 🎃 TRT文件保存

在这里插入图片描述

✨3 模式选择

为什么选择Explicit Batch模式,而不选择Implicit Batch模式:
在这里插入图片描述

✨ 4 精度

4.1 🍟 FP16

在这里插入图片描述
在这里插入图片描述

✨5 Parser

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

✨ 6 使用框架内的接口

在这里插入图片描述

1

X


http://www.ppmy.cn/news/694954.html

相关文章

400错误 解决方案

400一般都是参数接收问题 可能的问题有&#xff1a; 1.参数名不一致 2.参数类型不一致 因为前端传过来的都是字符串&#xff0c;所以后台除了基本类型&#xff0c;其他类型接收需要用转换器&#xff0c; 一般会出现的问题就是Date类型没有转换器&#xff0c;所以转换错误 可以在…

400

400介绍 在没有代理400电话之前&#xff0c;通过电视、广播、报纸等了解到&#xff0c;很多集团或企业做宣传用的是以400开头的十个数字的号码&#xff1b;有时驻足城市一角或者乘高速的时候也能看到某个建筑物上赫然写着&#xff1a;全国统一招商电话400*******。当时心里不解…

400错误和404错误

文章目录 400错误和404错误 400错误和404错误 404错误是因为浏览器根本找不到访问路径&#xff0c;通常是因为你项目里面的访问路径错误&#xff0c;项目里面没有对应的访问路径。比如说&#xff0c;你在后端写了一个控制器方法&#xff0c;这个控制器方法有个对应的请求&…

http协议常见错误状态码(400,404,500等).

HTTP 是 一 个 在 计 算 机 世 界 里 专 门 在 两 点 之 间 传 输文 字 、 图 片 、 音 频 、 视 频 等 超 文 本 数 据 的 约 定 和 规 范 RFC 规 定 HTTP 的 状 态 码 为 「 三 位 数 」 &#xff0c; 第 一 个 数 字 定 义 了 响 应 的 类别 &#xff0c; 被 分 为 五 类 : …

http 400错误的解决方法

http 400错误的解决方法先说说我的环境fc10apachepostgresql;费了好长时间在网上搜到的&#xff0c;第一时间贴出来&#xff0c;供大家参考。找到规则&#xff0c;注释掉./etc/modsecurity/modsecurity_crs_21_protocol_anomalies.conf:代码:#SecRule REQUEST_HEADERS:Host &qu…

HTTP常见状态码(404、400、500)等错误

一些常见的状态码为&#xff1a; 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解&#xff1a; 1xx&#xff08;临时响应&#xff09; 表示临时响应并需要请求者继续执行操作的状态代码。 代码 说明 100 &#xff08;继续&#xff09; 请求…

HTTP常见状态码(404、400、500)

HTTP状态码表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常或者是出现的错误&#xff0c;能够根据返回的状态码判断请求是否得到正确的处理很重要。 状态码分类表 类别原因短语1xxInformational&#xff08;信息性状态码&#xff09;接受的请求正在处理2xxSuccess&…

http 400错误提示解决办法

今天遇到个问题&#xff0c;前端调用后台接口提示400 这个问题出现&#xff0c;既然是400&#xff0c;那就有可能是参数请求错误&#xff0c;因为请求并未到达controller层&#xff0c;所以第一时间就是考虑请求参数合法性问题&#xff0c;经过排查发现&#xff1a;是由于前端…