えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

Makefileの編集で物体検出スピードはどう変化する?(Darknet)

 2月に入ってMAXON Motorの動作確認をしていたため、全く記事を書いていませんでした。


 今回は(また)Darknet関連の備忘録的なものを書きます。

 AlexeyAB実装のDarknetでは、Makefileをいろいろと弄ることがあります。

github.com

 ここでは、そのコンパイルオプションの変更によってどれくらいの速度差が出るのかを検証してみました。1ファイルの読み込みによる速度は実際の動作(いわゆるdemoコマンドやdarknet-ros)での速度とは少し違います。ご注意ください。

環境

 検証は次の環境で行いました。

ハードウェア

  • CPU:Ryzen7 2700x (4.35GHz 16thread)

  • GPU:ROG-STRIX-RTX2080TI (11GB VRAM・OC)

  • Memory:16GB・2933MHz (HyperX Predator DDR4 RGB)

  • SSD:275GB SATA SSD

ソフトウェア

  • OS:Ubuntu18.04LTS

  • CUDA:CUDA10.2

  • cuDNN:7.6.5

  • OPENMP:201511 (libomp-devで導入)

調整するパラメータ

 次の3項目を調整します。

  • GPU

  • CUDNN・CUDNN_HALF(どちらかが0だと無効)

注:CUDNN_HALFが有効になっていなかったので再検証したい

 また、OPENCV=0としました。

コマンドは次のとおりです。

$ ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

結果

 次のグラフのようになりました。右のグラフは、通常の表記なのですが、あまりにも差が大きすぎたので、左に対数表記のグラフも載せました。縦軸の単位はミリ秒(ms)、横軸は、識別のための番号です。下の表の番号とも対応しています。

f:id:Ray_ar:20210204235354p:plain
動作速度比較グラフ

GPUのON/OFFについて

  • CPUのみとCPU+GPUではGPU使用時に10倍の速度差が出ました。(3・4と5・6の比較)やはり、GPUは強い。

cuDNNのON/OFFについて

  • cuDNNはディープラーニング用のライブラリで知られています。こちらは、CPUとGPUほどではないですが、使用時と未使用時で8倍の差が開きました。(1・2と3・4の比較)

 GPUの時点で速いのだから、cuDNNの速度差はあまりないだろうと思い込んでいたのですが、さすがにこの差は大きい…特に組み込みコンピュータなどの低スペックGPUだと必須でしょう。

OpenMPのON/OFFについて

  • OpenMPとは並列処理を効率化するライブラリらしいです。GPUだと少ししか差が出ません(1ms程度速くなったかな?程度)が、CPUだとマルチスレッド性能相応に速くなるみたいです。実際、Ryzen7シリーズは16スレッドあるので、CPU処理におけるOpenMPの効果は大きいと思われます。

 最近は、シングルスレッド性能やCPU内のバス速度が向上しているので、さらなる効果が期待できそうです。GPU使用時はあまり気にするほどでもないような気がします。

まとめ

  • cuDNNの使用時・未使用時の差が想像以上に大きくて驚きました。できればCUDAインストール時にcuDNNも一緒に入れてほしいなーと思いつつ、検証を終わります。

 Darknetでは、条件を満たせば、Tensorコアも使ってくれるらしいので、その貢献がどれくらいのものなのかも気になるところです。