我正在開發(fā)一個流量跟蹤系統(tǒng),該系統(tǒng)分析已經(jīng)收集的視頻。我正在使用 opencv、threading、pytorch 和 dectron2。為了加快從 opencv 抓取幀的速度,我決定使用一個線程,它運(yùn)行一個循環(huán),用幀填充隊列,如本文中所見。在實現(xiàn)這個之后,我可以像我的處理管道的其余部分一樣快地訪問幀,所以那里沒有問題。當(dāng)我現(xiàn)在對幀進(jìn)行推理(只是通過 Faster R-CNN 模型的前向傳遞)時,就會出現(xiàn)問題,這需要 5 秒以上,而過去需要 0.11 秒。我的 GPU 正在被使用,而我的 CPU 遠(yuǎn)未充分利用。什么可能導(dǎo)致這種情況發(fā)生?
1 回答

森欄
TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊
CPython 有一個全局解釋器鎖。這意味著解釋器有一個大鎖,它可以防止同時從多個線程評估 Python 字節(jié)碼。
用 C 實現(xiàn)并提供對高級操作的訪問的包通常能夠在運(yùn)行時釋放 GIL,但如果您的處理代碼主要是 Python 和 CPU-bound,您將不會從多線程中獲得任何加速:您'會有線程相互爭斗,但由于 GIL,您的處理最終將完全按順序進(jìn)行。
在這種情況下,您需要多處理來獲得加速,GIL 是每個解釋器的,因此不同進(jìn)程中的獨(dú)立解釋器不會相互干擾。但是,通信/同步成本甚至更高。
添加回答
舉報
0/150
提交
取消