我正在尝试使用 python API 来使用 TensorRt。我试图在多个线程中使用它,其中 Cuda 上下文与所有线程一起使用(在单个线程中一切正常)。我正在使用带有tensorrt:20.06-py3图像的docker、onnx模型和Nvidia 1070 GPU。
应该允许多线程方法,如此处所述 TensorRT Best Practices .
我在主线程中创建了上下文:
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
其次,我尝试在线程中构建模型,但出现以下错误:
pycuda._driver.LogicError: explicit_context_dependent failed: invalid device context - no currently active context?
当我调用“cuda.Stream()”时出现错误
我确信我可以在同一个 Cuda 上下文下并行运行多个 Cuda 流,但我不知道该怎么做。
最佳答案
我找到了解决方案。这个想法是创建一个正常的全局 ctx = device.make_context()
然后在每个执行线程中执行以下操作:
ctx.push()
---
Execute Inference Code
---
ctx.pop()
源代码和完整示例的链接是 here
关于multithreading - TensorRT 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62719277/