TensorRT 自学笔记001 基础知识点和学习资源
TensorRT 自学笔记001 基础知识点和学习资源
各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢!
TensorRT简介:
TensorRT 是一套可用于高效实现DL模型推理的SDK,它内含infer优化器和运行环境,能让DL模型在更低的资源占用的条件下,以更快的的运行。在TensorRT中,我们可以用API手动地一个Layer一个Layer地搭建Network,也可以直接使用来自ONNX的模型,如果使用后者,就不需要一层一层地搭建模型。
各种链接
Jetpack SDK
TensorRT文档
C++ API文档
Python API
TensoRT 下载
B站课程示例代码
B站官方课程链接
TensorRT的工作流程
构建期
加载模型,并优化模型,计算图优化,将多个层合并为一个层,消除无用层,导入用户自定义的plugin(可选)
注:上述这些操作都是为了,加快模型的推理速度,同时降低模型的资源消耗(CPU资源,内存资源)。
运行期
维护运行环境,然后序列化和反序列化engine
名词解释
下面是一些名词和功能的解释
显存池复用:
数据存在同一片显存中,可快速复用,以此避免内存的反复分配和释放。
logger
日志记录器,可以从详细到简略设置不同记录等级的日志。
builder
引擎构建器,模型搭建的入口,构建模型的核心,可以用于创建TensorRT对象,创建用于Dyanmic Shape输入的配置器。
builderconfig
网络属性选项,用于设置模型的属性,如设置数据精度类型,设置explicit batch,设置Dynamic Shape等。
explicit batch显性批次和implicit batch隐性批次
explicit batch 即显式地指定张量的batch,explicit batch为主流开发方法,也支持更多功能
Dynamic Shape
实际开发时,我们会对模型输入不同的shape的数据,这要求模型每次接受的shape,batch等不同。所以提供了Dynamic Shape适用于输入张量shape在infer时才确定的情况,它不仅支持输入输出的调整,还可以在数据的不同批次的推理间随时做调整,几乎所有维度都动态可变。
Layer和Tensor
我们可以把Layer看作为计算节点,Tensor可以看作数据节点。
Tensor数据节点可作为一个Layer计算节点的输入输出节点,换句话说我们时用Layer计算节点和Tensor数据节点搭建出了整个网络。
Network
网络具体构造,网络主体,实际开发时,我们需要不断的用network添加各种网络层,标记输入输出张量和设置层属性。
context
类比cpu中的进程,用于设置张量的shape,用于执行真正的推理计算。
CUDA异构计算
开始推理时,我们需同时准备CPU和GPU内存,然后数据从内存copy至显存,在GPU端计算,然后将计算结果copy回内存
序列化和反序列化
将引擎保存下来即为序列化,加载以前保存好的引擎即为反序列化,这样就不用每次推理之前都构建一次引擎,直接加载使用即可。
注意,跨平台甚至是跨版本的序列化和反序列化是不可以的,甚至是相同平台,相同版本,不同时间构建的engine都可能是不同的
模型的TensorRT部署方式
将ONNX格式模型部署于设备上推理,有三种方式
1, 使用原框架自带的TRT接口
性能稍差,但易用性高,难度低,开发速度快
2, 使用Parser,将模型转换到TRT再使用
性能高,但需要改network和写适配的plugin,兼顾了效率和性能,是最推荐的开发方式
3, 使用TRT重建整个Network,再使用
性能最高,资源消耗最少,能精细控制Network,但是易用性和开发效率低
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!