在NVIDIA Jetson 平台上運行Deepstream速度慢的常見解決辦法

  • 2019 年 10 月 4 日
  • 筆記

NVIDIA發布了最新的Deepstream 4.0.

光說不練假把式,光練不說傻把式,不少用戶發現在Jetson嵌入式平台上運行Deepstream會遭遇到速度變慢,今天匯總幾個常見解決方案:

1

確保Jetson時鐘設置高。運行這些命令將Jetson時鐘調高。

$ sudo nvpmodel -m <mode> –for MAX perf and power mode is 0 $ sudo jetson_clocks

2

pipeline中的某個插件可能運行緩慢。您可以測量pipeline中的每個插件的延遲,以確定是哪個插件很慢。

  • 啟用幀延遲測量

$ export NVDS_ENABLE_LATENCY_MEASUREMENT=1

  • 啟用對所有插件的處理延遲測量

$ export NVDS_ENABLE_COMPONENT_LATENCY_MEASUREMENT=1

3

在配置文件里的[streammux]選項組裡,將batched-push-timeout設定成1/max_fps。例如max_fps是60fps,那麼倒數是16.7ms.

4

在配置文件中[streammux] 選項組種,設定成影片流的實際高度和寬度,

( 可能就能減少一步縮放的過程吧,甚至還能降低功耗)

5

對於RTSP流輸入,在配置文件的[streammux]組中,設置live-source=1。還要確保所有[sink#]組的sync屬性都設置為0。

6

如果啟用了二次推理,請嘗試在配置文件的[secondary-gie#]組中增加批大小,以防要推理的對象數量大於批大小設置。

(二次推理的意思是:第一次基於全影像進行目標檢測,第二次只針對第一次識別出的區域進行二次推理,比如第一次識別出車的區域,然後第二次針對識別出的車的區域進行推理,識別車類別/顏色)

7

在Jetson上,使用Gst-nvoverlaysink而不是Gst-nveglglessink,因為overlay的不需要使用GPU繪製(輸出單元合併即可),GL的需要GPU上(跑shader之類的)

8

如果GPU是性能瓶頸,我們可以增加主檢測器的推理時間間隔,通過修改應用程式配置中的[primary-gie]組的interval屬性或Gst-nvinfer配置文件的interval屬性來實現。(也就是說,GPU用滿了,那麼可以讓主檢測網路,原本是10ms推理檢測一次,現在改成30ms…)

9

如果pipeline中的元素(估計是各個處理插件),卡死在等待可用的緩衝區上—這點可以通過觀察是否CPU/GPU使用率都很低來確定,那麼你就可以增加decoder所分配出來的緩衝區數量。請嘗試通過設置[source#]組的num-extra-surfaces屬性來增加解碼器分配的緩衝區數量,這是 在應用程式或Gst nvv4l2decoder元素的num-extra-surfaces屬性中。

10

如果你正在docker里,或者在控制台上運行應用程式,同時FPS性能很低 ,請在配置文件的[sink0]組中設置qos = 0.問題是由初始載入引起的。I/O操作使CPU陷入困境,而qos=1作為[sink0]組的默認屬性,decodebin開始丟棄幀。為了避免這種情況,在配置文件中的[sink0]組中設置qos=0。

11

在NVIDIA®Jetson Nano™上,啟動deepstream-segmentation-test測試後,幾分鐘後崩潰。系統重新啟動,解決辦法:NVIDIA建議您在運行此應用程式時通過DC電源連接器為Jetson模組供電。