猿问

为什么 python 线程会减慢更快的 R-CNN 的推理时间

我正在开发一个流量跟踪系统,该系统分析已经收集的视频。我正在使用 opencv、threading、pytorch 和 dectron2。为了加快从 opencv 抓取帧的速度,我决定使用一个线程,它运行一个循环,用帧填充队列,如本文中所见。在实现这个之后,我可以像我的处理管道的其余部分一样快地访问帧,所以那里没有问题。当我现在对帧进行推理(只是通过 Faster R-CNN 模型的前向传递)时,就会出现问题,这需要 5 秒以上,而过去需要 0.11 秒。我的 GPU 正在被使用,而我的 CPU 远未充分利用。什么可能导致这种情况发生?



繁星coding
浏览 81回答 1
1回答

森栏

CPython 有一个全局解释器锁。这意味着解释器有一个大锁,它可以防止同时从多个线程评估 Python 字节码。用 C 实现并提供对高级操作的访问的包通常能够在运行时释放 GIL,但如果您的处理代码主要是 Python 和 CPU-bound,您将不会从多线程中获得任何加速:您'会有线程相互争斗,但由于 GIL,您的处理最终将完全按顺序进行。在这种情况下,您需要多处理来获得加速,GIL 是每个解释器的,因此不同进程中的独立解释器不会相互干扰。但是,通信/同步成本甚至更高。
随时随地看视频慕课网APP

相关分类

Python
我要回答