Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading TensorRT多线程_Multithreading_Cuda_Pycuda_Tensorrt_Nvidia Docker - Fatal编程技术网

Multithreading TensorRT多线程

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() 我尝试了两种方法,首先在主线程中构

我试图使用python API使用TensorRt。我尝试在多个线程中使用它,其中Cuda上下文与所有线程一起使用(在单个线程中一切工作正常)。我正在使用带有tensorrt:20.06-py3图像的docker,以及一个onnx模型和Nvidia 1070 GPU

正如这里提到的,应该允许使用多线程方法

我在主线程中创建了上下文:

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()