二、深入学习TensorRT,Developer Guide篇(一)

哦呦,刚发了那篇文章,好多老哥们点赞收藏,受宠若惊,但是也给我再来写一篇提供了动力,毕竟谁不喜欢被别人认可呢,哈哈,谢谢各位老哥们的点赞和收藏,一起继续学习。
上一篇文章是讲了getting started,参考了官方文档怎么进行快速的验证,主要就是通过一些操作带着我们去熟悉一下TensorRT整体的工作流程和一些高频使用的API。后面我们要深入一点,继续研究TensorRT后面的内容,我这里参考的仍然是官方文档:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#overview
本文是我基于官方文档结合自己理解的产物,不一定非常准确,仅供各位老哥参考。

1. 一些前置知识

1.1 samples

官方提供了非常多的样例程序(samples),瞄了一眼,感觉非常有用,后面我们一起再回头研究一下: NVIDIA TensorRT Sample Support Guide,还有一些嵌入式的样例,主要是jetson系列,我也建议大家有空的时候去研究一下:jetson-inference

1.2 MIG

MIG是具有NVIDIA安培架构或更高架构的NVIDIA GPU的一项功能,可以将单个GPU定向地划分为多个更小的GPU。物理分区提供具有QoS的专用计算和内存片,并在GPU的部分上独立执行并行工作负载。对于GPU利用率较低的TensorRT应用程序,MIG可以在对延迟影响很小或没有影响的情况下产生更高的吞吐量。最佳分区方案是特定于应用程序的。这个我也是第一次接触,之前没见过,感觉就是对于GPU支持单独划分使用?而且这个划分是真正的物理层面的划分,硬件资源都是真正的划分,这样理解不知道对不对,感兴趣的请参考: Multi-Instance GPU

1.3 配套软件

  1. NVIDIA Triton™:是一个服务端的高性能推理库,感兴趣的可以自己研究一下。
  2. NVIDIA DALI® :NVIDIA Data Loading Library (DALI)是一个gpu加速库,用于数据加载和预处理,以加速深度学习应用程序。它提供了一组高度优化的构建块,用于加载和处理图像、视频和音频数据。在流行的深度学习框架中,它可以作为内置数据加载器和数据迭代器的便携替代品。TensorRT推理可以被当做一个用户操作继承到DALI的pipeline中,一个将TensorRT集成到DALI中的一个部分的样例可以参考:https://github.com/NVIDIA/DL4AGX
  3. TensorFlow-TensorRT (TF-TRT):针对TensorFlow的TensorRT工具,它选择TensorFlow图的子图来由TensorRT加速,而将图的其余部分留给TensorFlow本地执行。结果仍然是一个TensorFlow图,你可以像往常一样来执行它,更多的请参考: Examples for TensorRT in TensorFlow
  4. Torch-TensorRT (Torch-TRT):是一个PyTorch-TensorRT编译器,将PyTorch模块转换成TensorRT engines。在内部,PyTorch模块首先根据所选的中间表示(IR)转换为TorchScript/FX模块。编译器选择PyTorch图的子图通过TensorRT进行加速,而让图的其余部分由Torch本地执行。结果仍然是一个可以像往常一样执行的PyTorch模块,更多请参考:Examples for Torch-TRT
  5. TensorFlow-Quantization Toolkit:提供了训练和部署基于Tensorflow 2的Keras模型的工具,精度较低。该工具包用于根据操作符名称、类和模式匹配对图中的不同层进行量化。量化后的图可以转换为ONNX,然后再转换为TensorRT engine,更多请参考:model zoo
  6. PyTorch Quantization Toolkit:提供以低精度训练PyTorch模型的工具,然后可以导出以在TensorRT中进行优化。

此外,PyTorch Automatic SParsity (ASP)工具为训练具有结构化稀疏性的模型提供了工具,然后可以导出并允许TensorRT在NVIDIA安培架构gpu上使用更快的稀疏策略。
TensorRT集成了一些性能分析工具,如NVIDIA Nsight™ SystemsNVIDIA Deep Learning Profiler (DLProf)(这些CUDA编程也是需要的,大家心里要有个数,说不定我们后面还会遇见,如果再次遇见我们就一起研究一下,消灭它)

1.4 ONNX

TensorRT从框架导入训练模型的主要方法是通过ONNX格式。TensorRT附带了一个ONNX解析器来帮助导入模型,一般情况下解析器向后兼容至opset 7。如果你遇到啥问题,ONNX Model Opset Version Converter可以帮助你解决不兼容问题。

GitHub版本可能支持更新的opsets,我们建议你在使用TensorRT进行部署的时候,使用最新的ONNX opset,TensorRT的ONNX算子支持列表可以从这里找到。

另外,PyTorch对ONNX有原生的支持,对于TensorFlow,建议参考tf2onnx方式

将模型导出到ONNX后的第一步是使用Polygraphy运行constant folding。这通常可以解决ONNX解析器中的TensorRT转换问题,还可以简化工作流程。具体操作请参考这里。在某些情况下,可能需要进一步修改ONNX模型,例如,用插件替换子图,或者根据其他操作重新实现不支持的算子。为了使这个过程更容易,你可以使用ONNX-GraphSurgeon。(这个后面我们会单独进行介绍)

对于在TensorRT中使用valgrind和clang sanitizer工具(这两个工具是用来内存检查和优化的),参考这里,我们后面也会讲解,因为感觉挺有用的,sanitizer工具我在开发过程中也有使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值