【发布时间】:2020-10-24 09:45:21
【问题描述】:
我正在尝试通过 python API 使用 TensorRt。我正在尝试在多个线程中使用它,其中 Cuda 上下文与所有线程一起使用(在单个线程中一切正常)。我正在使用带有 tensorrt:20.06-py3 图像、onnx 模型和 Nvidia 1070 GPU 的 docker。
应该允许多线程方法,正如这里提到的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 流,但我不知道该怎么做。
【问题讨论】:
-
您需要在每个线程中显式传递并绑定到上下文
-
你能告诉我怎么做吗?我知道 C 中有一个 cuCtxSetCurrent 函数,但我不能在 pycuda/python 中执行类似的操作
标签: multithreading cuda pycuda tensorrt nvidia-docker