我正在尝试使用 python API 来使用 TensorRt。我试图在多个线程中使用它,其中 Cuda 上下文与所有线程一起使用(在单个线程中一切正常)。我使用 docker 和 tensorrt:20.06-py3 图像、onnx 模型和 Nvidia 1070 GPU。
应该允许多线程方法,如此处所述TensorRT 最佳实践 https://docs.nvidia.com/deeplearning/tensorrt/best-practices/index.html#thread-safety.
我在主线程中创建了上下文:
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 https://forums.developer.nvidia.com/t/how-to-use-tensorrt-by-the-multi-threading-package-of-python/123085
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)