Multithreading TensorRT多线程
我试图使用python API使用TensorRt。我尝试在多个线程中使用它,其中Cuda上下文与所有线程一起使用(在单个线程中一切工作正常)。我正在使用带有tensorrt:20.06-py3图像的docker,以及一个onnx模型和Nvidia 1070 GPU 正如这里提到的,应该允许使用多线程方法 我在主线程中创建了上下文:Multithreading TensorRT多线程,multithreading,cuda,pycuda,tensorrt,nvidia-docker,Multithreading,Cuda,Pycuda,Tensorrt,Nvidia Docker,我试图使用python API使用TensorRt。我尝试在多个线程中使用它,其中Cuda上下文与所有线程一起使用(在单个线程中一切工作正常)。我正在使用带有tensorrt:20.06-py3图像的docker,以及一个onnx模型和Nvidia 1070 GPU 正如这里提到的,应该允许使用多线程方法 我在主线程中创建了上下文: cuda.init() device = cuda.Device(0) ctx = device.make_context() 我尝试了两种方法,首先在主线程中构
cuda.init()
device = cuda.Device(0)
ctx = device.make_context()
我尝试了两种方法,首先在主线程中构建引擎,然后在执行线程中使用它。这个案例给出了这个错误
[TensorRT] ERROR: ../rtSafe/cuda/caskConvolutionRunner.cpp (373) - Cask Error in checkCaskExecError<false>: 10 (Cask Convolution execution)
[TensorRT] ERROR: FAILED_EXECUTION: std::exception
调用“cuda.Stream()”时出现错误
我确信我可以在同一Cuda环境下并行运行多个Cuda流,但我不知道如何做到这一点。我找到了一个解决方案。我们的想法是创建一个普通的全局
ctx=device。创建_context()
,然后在每个执行线程中执行以下操作:
ctx.push()
---
Execute Inference Code
---
ctx.pop()
源和完整示例的链接是,您需要在每个线程中显式地传递和绑定到上下文。您能告诉我怎么做吗?我知道C中有一个cuCtxSetCurrent函数,但我无法在pycuda/python中执行类似的操作
ctx.push()
---
Execute Inference Code
---
ctx.pop()