multithreading - TensorRT 多线程

标签 multithreading cuda pycuda tensorrt nvidia-docker

我正在尝试使用 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/

相关文章:

c - 用 "return"或 "do_exit()"终止内核线程是一个好习惯吗?

multithreading - 如何在 groovy 中使用多线程访问 1000 个端点?

c++ - 简单的 CUDA vector 搜索/索引程序无法正常工作

python - PyCUDA NPP 库兼容性

python - 使用 PyCuda 的遗传细胞自动机,如何有效地将每个细胞的大量数据传递给 CUDA 内核?

Java 桌面 - 如何将数据库访问与 UI 线程分开?

java - 像 read() 这样的 I/O 方法如何在 Java 中将线程置于阻塞状态?

cublasDdot CUBLAS_STATUS_INTERNAL_ERROR

cuda - 我如何知道是否可以使用 CUDA?

python - PyCUDA 内核计时错误