簡介
- 在之前介紹分類模型的時候,大家除了比較精度之外,一般還會比較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官網下載代碼進行評估或者使用。
環境準備
- 爲避免和其他人的環境衝突,可以使用docker去創建自己的容器,準備docker並且在docker中安裝Paddle環境的可以參考這裏:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/install_Docker.html
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%,因此在預測部署的時候,如果對預測耗時的要求沒有那麼嚴苛,是可以稍微把預測尺度調大一些的,畢竟不用重新訓練就可以提升精度,還是非常香的。