• TensorRT--学习笔记


    1. 官方文档是最权威的
    2. TensorRT是可以在NVIDIA各种GPU硬件平台下运行的一个C++推理框架。利用Pytorch、TF或者其他框架训练好的模型,可以转化为TensorRT的格式,然后利用TensorRT推理引擎去运行我们这个模型,从而提升这个模型在英伟达GPU上运行的速度。速度提升的比例是比较可观的。
    3. 支持计算能力在5.0及以上的显卡(当然,这里的显卡可以是桌面级显卡也可以是嵌入版式显卡),常见的RTX30系列计算能力是8.6、RTX20系列是7.5、RTX10系列是6.1,如果想要使用TensorRT,首先要确认下显卡是否支持。
    4. TensorRT是由C++、CUDA、python三种语言编写成的一个库,其中核心代码为C++和CUDA,Python端作为前端与用户交互。当然,TensorRT也是支持C++前端的,如果我们追求高性能,C++前端调用TensorRT是必不可少的。
    5. TensorRT的加速效果取决于模型的类型和大小,也取决于所使用的显卡类型。
    6. 对于GPU来说,因为底层的硬件设计,更适合并行计算也更喜欢密集型计算。TensorRT所做的优化也是基于GPU进行优化,当然也是更喜欢那种一大块一大块的矩阵运算,尽量直通到底。因此对于通道数比较多的卷积层和反卷积层,优化力度是比较大的;如果是比较繁多复杂的各种细小op操作(例如reshape、gather、split等),那么TensorRT的优化力度就没有那么夸张了。
    7. 为了更充分利用GPU的优势,在设计模型的时候,可以更加偏向于模型的并行性,因为同样的计算量,“大而整”的GPU运算效率远超“小而碎”的运算。
    8. Tensor RT为提升在英伟达GPU上运行速度做出的提速有增益的优化:
      1. 算子融合(层与张量融合):简单来说就是通过融合一些计算op或者去掉一些多余op来减少数据流通次数以及显存的频繁使用来提速
      2. 量化:量化即IN8量化或者FP16以及TF32等不同于常规FP32精度的使用,这些精度可以显著提升模型执行速度并且不会保持原先模型的精度
      3. 内核自动调整:根据不同的显卡构架、SM数量、内核频率等(例如1080TI和2080TI),选择不同的优化策略以及计算方式,寻找最合适当前构架的计算方式
      4. 动态张量显存:显存的开辟和释放是比较耗时的,通过调整一些策略可以减少模型中这些操作的次数,从而可以减少模型运行的时间
      5. 多流执行:使用CUDA中的stream技术,最大化实现并行操作
    9. TensorRT官方支持Caffe、Tensorflow、Pytorch、ONNX等模型的转换(不过Caffe和Tensorflow的转换器Caffe-Parser和UFF-Parser已经有些落后了),也提供了转换模型的方式:
      1. 使用TF-TRT,将TensorRT集成在TensorFlow中
      2. 使用ONNX2TensorRT,即ONNX转换trt的工具
    10. 目前TensorRT对ONNX的支持最好,TensorRT-8最新版ONNX转换器又支持了更多的op操作。而深度学习框架中,TensorRT对Pytorch的支持更为友好
    11. TensorRT是硬件相关的:因为不同显卡(不同GPU),其核心数量、频率、架构、设计(还有价格..)都是不一样的,TensorRT需要对特定的硬件进行优化,不同硬件之间的优化是不能共享的。
    12. TensorRT支持的权重精度:支持FP32、FP16、INT8、TF32等,这几种类型都比较常用。
      1. FP32:单精度浮点型,深度学习中最常见的数据格式,训练推理都会用到;
      2. FP16:半精度浮点型,相比FP32占用内存减少一半,有相应的指令值,速度比FP32要快很多;
      3. TF32:第三代Tensor Core支持的一种数据类型,是一种截短的 Float32 数据格式,将FP32中23个尾数位截短为10bits,而指数位仍为8bits,总长度为19(=1+8 +10)。保持了与FP16同样的精度(尾数位都是 10 位),同时还保持了FP32的动态范围指数位都是8位);
      4. INT8:整型,相比FP16占用内存减小一半,有相应的指令集,模型量化后可以利用INT8进行加速。
      5. 以上精度展示:
    13. TensorRT的缺点
      1. 经过infer优化后的模型与特定GPU绑定,例如在1080TI上生成的模型在2080TI上无法使用;
      2. 高版本的TensorRT依赖于高版本的CUDA版本,而高版本的CUDA版本依赖于高版本的驱动,如果想要使用新版本的TensorRT,更换环境是不可避免的;
      3. TensorRT尽管好用,但推理优化infer还是闭源的,像深度学习炼丹一样,也像个黑盒子,使用起来会有些畏手畏脚,不能够完全掌控。所幸TensorRT提供了较为多的工具帮助调试。

     

  • 相关阅读:
    ROS学习笔记一(安装、节点、发布者和订阅者)
    被误删的HDFS文件如何有效恢复
    C高级day2
    liunx的基础命令整理
    Mysql(索引)
    Python和Pandas对事件数据的处理:以电动汽车充电数据为例
    NodeJs - 集合对象序列化问题
    Nautlius Chain主网正式上线,模块Layer3时代正式开启
    mysql 配置主从复制 及 Slave_SQL_Running = no问题排查
    HFS 快速搭建 http 服务器
  • 原文地址:https://blog.csdn.net/weixin_45647721/article/details/128060475