PaddleClas-圖像分類模型TensorRT預測評估

簡介

  • 在之前介紹分類模型的時候,大家除了比較精度之外,一般還會比較flops和params這兩個參數,flops表示計算量,可以間接反映推理速度,params表示參數量,可以反映存儲大小。但是有一個問題,flops相同的兩個網絡,它們的推理速度並不一定是相同的,因爲可能有內存拷貝、通道拆分操作等其他差異。因此最好的方法就是直接在機器上預測,統計下耗時。
  • T4 GPU是可用於模型推理的GPU顯卡,支持TensorRT、FP32/FP16等多種推理類型,PaddleClas在其文檔中給出了T4 GP上不同模型在不同bs的情況下的預測耗時情況,具體文檔可以參考PaddleClas中模型庫的不同系列文檔:https://github.com/PaddlePaddle/PaddleClas/tree/master/docs/zh_CN/models

注意:這篇博客中提到的分類模型均是在PaddleClas官方repo中有對應實現:https://github.com/PaddlePaddle/PaddleClas,如果希望實現或者評估的話,可以去PaddleClas官網下載代碼進行評估或者使用。

環境準備

Paddle+TRT編譯安裝

  • 在T4 GPU上可以使用TRT進行推理加速,因此編譯帶有trt的Paddle安裝包。
  • 下載好TRT包之後,如果是TRT5,首先需要修改TRT包裏的NvInfer.h,在其中爲class IPluginFactory和class IGpuAllocator分別添加虛析構函數:
virtual ~IPluginFactory() {};
virtual ~IGpuAllocator() {};

下載好Paddle代碼之後,可以使用下面的命令進行編譯。

cmake  .. \
        -DWITH_CONTRIB=OFF \
        -DWITH_MKL=ON \
        -DWITH_MKLDNN=OFF  \
        -DWITH_TESTING=OFF \
        -DCMAKE_BUILD_TYPE=Release \
        -DWITH_INFERENCE_API_TEST=OFF \
        -DON_INFER=ON \
        -DWITH_PYTHON=ON  \
        -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
        -DCUDNN_ROOT=/paddle/libs/cudnn_v7.6_cuda10.1 \
        -DTENSORRT_ROOT=/paddle/libs/TensorRT-5.1.2.2

其中DCUDNN_ROOT是CUDNN地址,DTENSORRT_ROOT是TRT的代碼地址,因爲編譯預測包的時候需要用到這些。

更多的編譯選項和可能遇到的問題可以參考這裏:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html

  • 最終編譯得到一個whl包,直接安裝,就可以替換之前docker默認自帶的Paddle版本了,新的Paddle包是可以使用TRT進行預測的,但是需要注意的是,在預測之前要首先把TRT的lib地址添加到LD_LIBRARY_PATH環境變量中。
export LD_LIBRARY_PATH=/paddle/libs/TensorRT-5.1.2.2/lib:$LD_LIBRARY_PATH

T4環境準備

  • T4 GPU在不使用的時候,有可能會降頻;由於T4沒有主動散熱,長時間運行的話,也會降頻(否則GPU可能過熱而宕機),因此在做benchmark的時候需要鎖頻,下面這兩條命令可以進行鎖頻。
nvidia-smi -i 0 -pm ENABLED
nvidia-smi --lock-gpu-clocks=1590 -i 0

鎖頻之後,要想在沒有外部散熱的情況下,使GPU可以繼續長時間運行,可以在每次推理之後sleep 30ms左右,這樣的話,基本就不會發生GPU宕機的問題了。

評估結果和分析

  • 可以直接使用PaddleClas中的predict.py函數進行預測耗時的統計。

最終給出不同模型的精度和實際預測速度的圖表統計信息。

如果需要直接看結論,也可以直接拉到最後查看結論部分。

總覽

  • 下面是從模型庫中找出了一些比較經典的模型結構,在BS=4的情況下,FP32的模型預測-預測耗時變化曲線。
    在這裏插入圖片描述

ResNet及其Vd系列

在這裏插入圖片描述

在這裏插入圖片描述

具體地,T4上FP32與FP16的預測耗時統計信息如下。

Models Crop Size Resize Short Size FP16
Batch Size=1
(ms)
FP16
Batch Size=4
(ms)
FP16
Batch Size=8
(ms)
FP32
Batch Size=1
(ms)
FP32
Batch Size=4
(ms)
FP32
Batch Size=8
(ms)
ResNet18 224 256 1.3568 2.5225 3.61904 1.45606 3.56305 6.28798
ResNet18_vd 224 256 1.39593 2.69063 3.88267 1.54557 3.85363 6.88121
ResNet34 224 256 2.23092 4.10205 5.54904 2.34957 5.89821 10.73451
ResNet34_vd 224 256 2.23992 4.22246 5.79534 2.43427 6.22257 11.44906
ResNet50 224 256 2.63824 4.63802 7.02444 3.47712 7.84421 13.90633
ResNet50_vc 224 256 2.67064 4.72372 7.17204 3.52346 8.10725 14.45577
ResNet50_vd 224 256 2.65164 4.84109 7.46225 3.53131 8.09057 14.45965
ResNet50_vd_v2 224 256 2.65164 4.84109 7.46225 3.53131 8.09057 14.45965
ResNet101 224 256 5.04037 7.73673 10.8936 6.07125 13.40573 24.3597
ResNet101_vd 224 256 5.05972 7.83685 11.34235 6.11704 13.76222 25.11071
ResNet152 224 256 7.28665 10.62001 14.90317 8.50198 19.17073 35.78384
ResNet152_vd 224 256 7.29127 10.86137 15.32444 8.54376 19.52157 36.64445
ResNet200_vd 224 256 9.36026 13.5474 19.0725 10.80619 25.01731 48.81399
ResNet50_vd_ssld 224 256 2.65164 4.84109 7.46225 3.53131 8.09057 14.45965
ResNet101_vd_ssld 224 256 5.05972 7.83685 11.34235 6.11704 13.76222 25.11071

SEResNeXt與Res2Net系列

在這裏插入圖片描述

在這裏插入圖片描述

具體地,T4上FP32與FP16的預測耗時統計信息如下。

Models Crop Size Resize Short Size FP16
Batch Size=1
(ms)
FP16
Batch Size=4
(ms)
FP16
Batch Size=8
(ms)
FP32
Batch Size=1
(ms)
FP32
Batch Size=4
(ms)
FP32
Batch Size=8
(ms)
Res2Net50_26w_4s 224 256 3.56067 6.61827 11.41566 4.47188 9.65722 17.54535
Res2Net50_vd_26w_4s 224 256 3.69221 6.94419 11.92441 4.52712 9.93247 18.16928
Res2Net50_14w_8s 224 256 4.45745 7.69847 12.30935 5.4026 10.60273 18.01234
Res2Net101_vd_26w_4s 224 256 6.53122 10.81895 18.94395 8.08729 17.31208 31.95762
Res2Net200_vd_26w_4s 224 256 11.66671 18.93953 33.19188 14.67806 32.35032 63.65899
ResNeXt50_32x4d 224 256 7.61087 8.88918 12.99674 7.56327 10.6134 18.46915
ResNeXt50_vd_32x4d 224 256 7.69065 8.94014 13.4088 7.62044 11.03385 19.15339
ResNeXt50_64x4d 224 256 13.78688 15.84655 21.79537 13.80962 18.4712 33.49843
ResNeXt50_vd_64x4d 224 256 13.79538 15.22201 22.27045 13.94449 18.88759 34.28889
ResNeXt101_32x4d 224 256 16.59777 17.93153 21.36541 16.21503 19.96568 33.76831
ResNeXt101_vd_32x4d 224 256 16.36909 17.45681 22.10216 16.28103 20.25611 34.37152
ResNeXt101_64x4d 224 256 30.12355 32.46823 38.41901 30.4788 36.29801 68.85559
ResNeXt101_vd_64x4d 224 256 30.34022 32.27869 38.72523 30.40456 36.77324 69.66021
ResNeXt152_32x4d 224 256 25.26417 26.57001 30.67834 24.86299 29.36764 52.09426
ResNeXt152_vd_32x4d 224 256 25.11196 26.70515 31.72636 25.03258 30.08987 52.64429
ResNeXt152_64x4d 224 256 46.58293 48.34563 56.97961 46.7564 56.34108 106.11736
ResNeXt152_vd_64x4d 224 256 47.68447 48.91406 57.29329 47.18638 57.16257 107.26288
SE_ResNet18_vd 224 256 1.61823 3.1391 4.60282 1.7691 4.19877 7.5331
SE_ResNet34_vd 224 256 2.67518 5.04694 7.18946 2.88559 7.03291 12.73502
SE_ResNet50_vd 224 256 3.65394 7.568 12.52793 4.28393 10.38846 18.33154
SE_ResNeXt50_32x4d 224 256 9.06957 11.37898 18.86282 8.74121 13.563 23.01954
SE_ResNeXt50_vd_32x4d 224 256 9.25016 11.85045 25.57004 9.17134 14.76192 19.914
SE_ResNeXt101_32x4d 224 256 19.34455 20.6104 32.20432 18.82604 25.31814 41.97758
SENet154_vd 224 256 49.85733 54.37267 74.70447 53.79794 66.31684 121.59885

DPN與DenseNet系列

在這裏插入圖片描述

在這裏插入圖片描述

具體地,T4上FP32與FP16的預測耗時統計信息如下。

Models Crop Size Resize Short Size FP16
Batch Size=1
(ms)
FP16
Batch Size=4
(ms)
FP16
Batch Size=8
(ms)
FP32
Batch Size=1
(ms)
FP32
Batch Size=4
(ms)
FP32
Batch Size=8
(ms)
DenseNet121 224 256 4.16436 7.2126 10.50221 4.40447 9.32623 15.25175
DenseNet161 224 256 9.27249 14.25326 20.19849 10.39152 22.15555 35.78443
DenseNet169 224 256 6.11395 10.28747 13.68717 6.43598 12.98832 20.41964
DenseNet201 224 256 7.9617 13.4171 17.41949 8.20652 17.45838 27.06309
DenseNet264 224 256 11.70074 19.69375 24.79545 12.14722 26.27707 40.01905
DPN68 224 256 11.7827 13.12652 16.19213 11.64915 12.82807 18.57113
DPN92 224 256 18.56026 20.35983 29.89544 18.15746 23.87545 38.68821
DPN98 224 256 21.70508 24.7755 40.93595 21.18196 33.23925 62.77751
DPN107 224 256 27.84462 34.83217 60.67903 27.62046 52.65353 100.11721
DPN131 224 256 28.58941 33.01078 55.65146 28.33119 46.19439 89.24904

Inception系列

在這裏插入圖片描述

在這裏插入圖片描述

具體地,T4上FP32與FP16的預測耗時統計信息如下。

Models Crop Size Resize Short Size FP16
Batch Size=1
(ms)
FP16
Batch Size=4
(ms)
FP16
Batch Size=8
(ms)
FP32
Batch Size=1
(ms)
FP32
Batch Size=4
(ms)
FP32
Batch Size=8
(ms)
GoogLeNet 299 320 1.75451 3.39931 4.71909 1.88038 4.48882 6.94035
Xception41 299 320 2.91192 7.86878 15.53685 4.96939 17.01361 32.67831
Xception41_
deeplab
299 320 2.85934 7.2075 14.01406 5.33541 17.55938 33.76232
Xception65 299 320 4.30126 11.58371 23.22213 7.26158 25.88778 53.45426
Xception65_
deeplab
299 320 4.06803 9.72694 19.477 7.60208 26.03699 54.74724
Xception71 299 320 4.80889 13.5624 27.18822 8.72457 31.55549 69.31018
InceptionV4 299 320 9.50821 13.72104 20.27447 12.99342 25.23416 43.56121

HRNet系列

在這裏插入圖片描述

在這裏插入圖片描述

具體地,T4上FP32與FP16的預測耗時統計信息如下。

Models Crop Size Resize Short Size FP16
Batch Size=1
(ms)
FP16
Batch Size=4
(ms)
FP16
Batch Size=8
(ms)
FP32
Batch Size=1
(ms)
FP32
Batch Size=4
(ms)
FP32
Batch Size=8
(ms)
HRNet_W18_C 224 256 6.79093 11.50986 17.67244 7.40636 13.29752 23.33445
HRNet_W30_C 224 256 8.98077 14.08082 21.23527 9.57594 17.35485 32.6933
HRNet_W32_C 224 256 8.82415 14.21462 21.19804 9.49807 17.72921 32.96305
HRNet_W40_C 224 256 11.4229 19.1595 30.47984 12.12202 25.68184 48.90623
HRNet_W44_C 224 256 12.25778 22.75456 32.61275 13.19858 32.25202 59.09871
HRNet_W48_C 224 256 12.65015 23.12886 33.37859 13.70761 34.43572 63.01219
HRNet_W64_C 224 256 15.10428 27.68901 40.4198 17.57527 47.9533 97.11228

EfficientNet與ResNeXt101_wsl系列

在這裏插入圖片描述

在這裏插入圖片描述

具體地,T4上FP32與FP16的預測耗時統計信息如下。

Models Crop Size Resize Short Size FP16
Batch Size=1
(ms)
FP16
Batch Size=4
(ms)
FP16
Batch Size=8
(ms)
FP32
Batch Size=1
(ms)
FP32
Batch Size=4
(ms)
FP32
Batch Size=8
(ms)
ResNeXt101_
32x8d_wsl
224 256 18.19374 21.93529 34.67802 18.52528 34.25319 67.2283
ResNeXt101_
32x16d_wsl
224 256 18.52609 36.8288 62.79947 25.60395 71.88384 137.62327
ResNeXt101_
32x32d_wsl
224 256 33.51391 70.09682 125.81884 54.87396 160.04337 316.17718
ResNeXt101_
32x48d_wsl
224 256 50.97681 137.60926 190.82628 99.01698256 315.91261 551.83695
Fix_ResNeXt101_
32x48d_wsl
320 320 78.62869 191.76039 317.15436 160.0838242 595.99296 1151.47384
EfficientNetB0 224 256 3.40122 5.95851 9.10801 3.442 6.11476 9.3304
EfficientNetB1 240 272 5.25172 9.10233 14.11319 5.3322 9.41795 14.60388
EfficientNetB2 260 292 5.91052 10.5898 17.38106 6.29351 10.95702 17.75308
EfficientNetB3 300 332 7.69582 16.02548 27.4447 7.67749 16.53288 28.5939
EfficientNetB4 380 412 11.55585 29.44261 53.97363 12.15894 30.94567 57.38511
EfficientNetB5 456 488 19.63083 56.52299 - 20.48571 61.60252 -
EfficientNetB6 528 560 30.05911 - - 32.62402 - -
EfficientNetB7 600 632 47.86087 - - 53.93823 - -
EfficientNetB0_small 224 256 2.39166 4.36748 6.96002 2.3076 4.71886 7.21888

結論

有幾個比較有意思的結論可以參考一下

  • 從總圖中可以看出,EfficientNet在精度-預測速度方面還是更有優勢的,但是其由於顯存佔用比較多(更大的模型用更大的尺度去預測,也就是表中的resize_short_size),因此batch size無法打到很大,這對於實際部署的時候其實是比較讓人頭疼的,因爲申請新的GPU資源其實也大大增加了模型服務部署的成本。
  • 相比於FP32,FP16的推理在batch size較大的時候,優勢才比較明顯,各個系列模型裏面,bs=1時,fp32與fp16的預測耗時並沒有拉開很大的差距,但是bs=4的時候,基本都有2倍左右,而Xception系列更甚,FP16是FP32速度的2.5~3倍(畢竟這個系列模型尺度大,爲299,這本來也相當於計算量增加了)。
  • 對於分叉較多的HRNet以及DPN這些網絡來說,FP16的優勢沒有結構簡單的模型的優勢明顯。
  • 其實基於FP16預測的時候,最終評估指標是不變的(top1 score在小數點後4~6位可能會有些diff),因此在實際預測的時候,還是推薦使用更大的bs,基於FP16進行預測,加速效果讓人感動。
  • PaddleClas中提供的知識蒸餾預訓練模型還是很有優勢的,畢竟在整個座標軸的左上角。這個具體的知識蒸餾方案可以參考:https://blog.csdn.net/u012526003/article/details/106160464
  • 在bs=1的情況下,其實224尺度的評估與288尺度的評估的預測耗時並不會差很多(對於ResNet101來說,224預測比288預測快了0.4ms左右),但是指標卻直接提升了0.7%,因此在預測部署的時候,如果對預測耗時的要求沒有那麼嚴苛,是可以稍微把預測尺度調大一些的,畢竟不用重新訓練就可以提升精度,還是非常香的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章