哦呦,刚发了那篇文章,好多老哥们点赞收藏,受宠若惊,但是也给我再来写一篇提供了动力,毕竟谁不喜欢被别人认可呢,哈哈,谢谢各位老哥们的点赞和收藏,一起继续学习。
上一篇文章是讲了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 配套软件
- NVIDIA Triton™:是一个服务端的高性能推理库,感兴趣的可以自己研究一下。
- NVIDIA DALI® :NVIDIA Data Loading Library (DALI)是一个gpu加速库,用于数据加载和预处理,以加速深度学习应用程序。它提供了一组高度优化的构建块,用于加载和处理图像、视频和音频数据。在流行的深度学习框架中,它可以作为内置数据加载器和数据迭代器的便携替代品。TensorRT推理可以被当做一个用户操作继承到DALI的pipeline中,一个将TensorRT集成到DALI中的一个部分的样例可以参考:https://github.com/NVIDIA/DL4AGX
- TensorFlow-TensorRT (TF-TRT):针对TensorFlow的TensorRT工具,它选择TensorFlow图的子图来由TensorRT加速,而将图的其余部分留给TensorFlow本地执行。结果仍然是一个TensorFlow图,你可以像往常一样来执行它,更多的请参考: Examples for TensorRT in TensorFlow
- Torch-TensorRT (Torch-TRT):是一个PyTorch-TensorRT编译器,将PyTorch模块转换成TensorRT engines。在内部,PyTorch模块首先根据所选的中间表示(IR)转换为TorchScript/FX模块。编译器选择PyTorch图的子图通过TensorRT进行加速,而让图的其余部分由Torch本地执行。结果仍然是一个可以像往常一样执行的PyTorch模块,更多请参考:Examples for Torch-TRT
- TensorFlow-Quantization Toolkit:提供了训练和部署基于Tensorflow 2的Keras模型的工具,精度较低。该工具包用于根据操作符名称、类和模式匹配对图中的不同层进行量化。量化后的图可以转换为ONNX,然后再转换为TensorRT engine,更多请参考:model zoo
- PyTorch Quantization Toolkit:提供以低精度训练PyTorch模型的工具,然后可以导出以在TensorRT中进行优化。
此外,PyTorch Automatic SParsity (ASP)工具为训练具有结构化稀疏性的模型提供了工具,然后可以导出并允许TensorRT在NVIDIA安培架构gpu上使用更快的稀疏策略。
TensorRT集成了一些性能分析工具,如NVIDIA Nsight™ Systems和NVIDIA 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。(这个后面我们会单独进行介绍)文章来源:https://www.toymoban.com/news/detail-827466.html
对于在TensorRT中使用valgrind和clang sanitizer工具(这两个工具是用来内存检查和优化的),参考这里,我们后面也会讲解,因为感觉挺有用的,sanitizer工具我在开发过程中也有使用。文章来源地址https://www.toymoban.com/news/detail-827466.html
到了这里,关于二、深入学习TensorRT,Developer Guide篇(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!