trt多流、多batch、多context

(1)一个engine可以创建多个context,一个engine可以有多个执行上下文,允许一组权值用于多个重叠推理任务。例如,可以使用一个引擎和一个上下文在并行CUDA流中处理图像。每个上下文将在与引擎相同的GPU上创建。

(2)engine:引擎。不能跨平台和TensorRT版本移植。若要存储,需要将引擎转化为一种格式,即序列化,若要推理,需要反序列化引擎。引擎用于保存网络定义和模型参数。在特定 config 与硬件上编译出来的计算引擎,且只能应用于特定的 config 与硬件上,支持持久化到本地以便进行发布或者节约下次使用的编译时间。engine 集成了模型结构、模型参数与最优计算 kernel 配置。同时 engine 与硬件和 TensorRT 版本强绑定,所以要求 engine 的编译与执行的硬件与 TensorRT 版本要保持一致。

(3)context:上下文。创建一些空间来存储中间值。一个engine可以创建多个context,分别执行多个推理任务。进行 inference 的实际对象,由 engine 创建,与 engine 是一对多的关系。

(4)看到官网上说
In general TensorRT objects are not thread-safe. The expected runtime concurrency model is that different threads will operate on different execution contexts. The context contains the state of the network (activation values etc) during execution, so using a context concurrently in different threads results in undefined behavior.
同时进行多个模型的并行推理,使用多个engine进行推理,是不是不安全?

在不同的线程上使用相同的execution context:错误,文档说这样导致undefined behavior
在不同的线程上使用相同engine的不同的execution context:正确
在不同的线程上使用不同的engine:正确

并行推理的做法:

就是参照(8)和(9)的做法:就是多个cuda流  并行memcpy和inference以及后处理。一个batch多张图,然后每个流负责一个batch这样。网上说是重叠了推理和memcpy的时间,trt多流、多batch、多context_第1张图片

 

参考:

(1)https://www.jb51.net/article/221422.htm

(2)https://paddle-inference.readthedocs.io/en/master/api_reference/cxx_api_doc/Config/GPUConfig.html这里有多线程的写法

(3) 极智AI | 谈谈 GPU 并行推理的几个方式 - 掘金

(4)关于TensorRT和TF-TRT的一些事儿 | Bella's Blog

(5)tensorRT(一)| tensorRT如何进行推理加速?(建议收藏) - AI大道理 - 博客园 

(6)多模型并发 · Issue #5 · NVIDIA/trt-samples-for-hackathon-cn · GitHub 

(7)C/C++ TensorRT引擎多线程推理多个rtsp流并显示或保存_highoooo的博客-CSDN博客_tensorrt 多线程 

(8)极智AI | 谈谈 GPU 并行推理的几个方式 - 知乎

(9)CUDA多个流的使用_-牧野-的博客-CSDN博客_cuda多流 

你可能感兴趣的:(部署,tensorRT,tensorRT)