可真有你的!EasyEdge模型压缩新姿势……
近年來,深度學習技術(shù)在諸多領(lǐng)域大放異彩,因此廣受學術(shù)界和工業(yè)界的青睞。隨著深度學習的發(fā)展,神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)變得越來越復(fù)雜。復(fù)雜的模型固然具有更好的性能,但是高額的存儲空間與計算資源消耗使其難以有效地應(yīng)用在各硬件平臺上。因此深度學習模型在端上部署和加速成為了學術(shù)界和工業(yè)界都重點關(guān)注的研究領(lǐng)域。?
一方面,有許多深度學習框架可以讓開發(fā)者和研究者用于設(shè)計模型,每個框架具備各自獨特的網(wǎng)絡(luò)結(jié)構(gòu)定義和模型保存格式。AI 工程師和研究者希望自己的模型能夠在不同的框架之間轉(zhuǎn)換,但框架之間的差距阻礙了模型之間的交互操作。另一方面,由于深度學習模型龐大的參數(shù)量,直接在邊緣端部署模型會產(chǎn)生較高的時延。?
百度 EasyEdge 端與邊緣 AI 服務(wù)平臺可以很好地解決上述問題。EasyEdge 可以支持多種主流深度學習框架的模型輸入,提供了方便的部署功能,針對業(yè)內(nèi)各類主流芯片與操作系統(tǒng)進行了適配,省去了繁雜的代碼過程,可以輕松將模型部署到端設(shè)備上。EasyEdge 在集成了多種加速技術(shù)的同時對外提供多個等級的加速服務(wù),以平衡模型推理時間和精度,一方面可以最大限度的減小模型在端上部署的延時,另一方面可以匹配更廣泛的使用場景。?
EasyEdge 支持多種不同類型深度學習模型的部署,包括常見的模型類型包括圖像分類、檢測、分割以及部分人臉檢測、姿態(tài)估計。目前 EasyEdge 支持的經(jīng)典網(wǎng)絡(luò)種類超過 60 種以及多種自定義的網(wǎng)絡(luò)類型。?
同時 EasyEdge 支持接入多種深度學習框架,包括飛槳 PaddlePaddle、Pytorch、Tensorflow、MxNet 等。為了更方便的實現(xiàn)部署,目前 EasyEdge 支持部分深度學習框架模型的互轉(zhuǎn)換,如圖 1 所示。例如用戶想要在 Intel 的 CPU 上使用 OpenVINO 部署一個 Pytorch 模型,EasyEdge 可以實現(xiàn)經(jīng)過多次模型轉(zhuǎn)換,將 torch 模型格式轉(zhuǎn)換成 OpenVINO IR 格式,最后基于 OpenVINO 部署框架完成模型部署。
▲ 圖1. EasyEdge 支持多種模型框架轉(zhuǎn)換
EasyEdge 對于端設(shè)備的支持也是很廣泛的,既支持常見的通用芯片 CPU、GPU 以及通用 arm 設(shè)備,也支持市面上主流的專用芯片,如 Intel Movidius 系列,海思 NNIE 等,如圖 2 所示,EasyEdge 目前已建設(shè)為業(yè)界適配最廣泛的端與邊緣服務(wù)平臺。
▲?圖2. EasyEdge 支持多種硬件設(shè)備部署
解析EasyEdge中的模型壓縮技術(shù)
為了能實現(xiàn)多種網(wǎng)絡(luò)在不同芯片的高效部署,EasyEdge 后臺提供了多種優(yōu)化操作,如模型格式轉(zhuǎn)換、圖優(yōu)化、芯片優(yōu)化、模型低精度計算優(yōu)化、模型裁剪和蒸餾等。其中模型壓縮技術(shù)是至關(guān)重要的一環(huán),EasyEdge 中用到的模型壓縮技術(shù)包括常見的模型低精度計算,結(jié)構(gòu)化裁剪以及模型蒸餾等。如圖 3 所示,為了更好的適配端設(shè)備,EasyEdge 集成了多種模型壓縮庫,可根據(jù)實際部署情況靈活調(diào)用。
▲?圖3. EasyEdge 中的模型壓縮技術(shù)
模型低精度計算旨在通過少量的比特去表示原本 32bit 的浮點數(shù)據(jù)。一方面是為了壓縮模型體積大小,對于較大的模型可以使端側(cè)設(shè)備更快地將模型 load 到內(nèi)存中,減小 IO 時延,另一方面,通常處理器對于定點的計算能力會強于浮點,因此量化后的模型往往可以被更快的推理計算。如圖 4 所示,分布不規(guī)則的浮點數(shù)據(jù)被量化到少數(shù)幾個定點。EasyEdge 支持包括常見低精度類型包括 FP16 和 INT8,其中 INT8 量化技術(shù)能提供最大限度的無損壓縮。
▲?圖4. 模型量化 [1]
INT8 量化技術(shù)的實現(xiàn)方法大致分為兩種,訓練后量化和訓練中量化。顧名思義訓練后量化就是在已經(jīng)訓練好的 FP32 模型中插入量化節(jié)點,通過統(tǒng)計學方法盡可能通過少量定點數(shù)去還原原來的浮點數(shù)據(jù),而訓練中量化會在訓練之前就插入模擬量化節(jié)點,在訓練過程中就模擬量化后的數(shù)據(jù)去計算各個節(jié)點的 output,這樣模型最終會擬合收斂到模型量化后最優(yōu)。如圖 5 所示。相比之下訓練中量化具有更好的精度,但是需要耗費更長的時間。
▲?圖5. 訓練量化原理 [2]
EasyEdge 同時具備訓練中量化和離線訓練量化的能力,并且會根據(jù)不同的實際情況選擇不一樣的量化方法。深度學習模型中,分類模型最終一般會以計算最終 Layer 的 topK 最為最終的輸出結(jié)果,這種性質(zhì)就決定了模型更注重最終輸出的排序關(guān)系而非數(shù)值本身的大小,因此分類模型相比于基于數(shù)值回歸的檢測模型具有更強的量化魯棒性。基于這一點,EasyEdge 的量化策略會根據(jù)模型類型靈活調(diào)整,在分類相關(guān)任務(wù)中會傾向于使用離線量化技術(shù),以縮短發(fā)布時長,而基于 anchor 回歸的一系列檢測模型中則更傾向于通過再訓練來保證精度。另一方面,根據(jù)端側(cè)設(shè)備、部署框架不同,EasyEdge 采取的量化策略也會有所區(qū)別。例如在使用 PaddleFluid 框架將模型部署到 CPU 上時,較敏感的 OP 在量化之后會極大的影響最終精度,因此在 EasyEdge 中這些 OP 的輸入輸出數(shù)據(jù)類型采用 FP32,而其余 OP 的計算會采用 INT8。這種 Layer 級別的混合精度量化策略可以很好的平衡推理速度和精度。
在離線量化過程中,會出現(xiàn)部分 outlier 數(shù)據(jù)點距離中心分布太遠的情況,這會導(dǎo)致傳統(tǒng)的量化策略會過大的預(yù)估量化 range,而導(dǎo)致最終量化精度較低,如圖 13 所示。為了應(yīng)對這種情況,EasyEdge 集成了后校準技術(shù),通過多次迭代以尋找更合適的閾值,使量化后 INT8 數(shù)據(jù)分布和量化前 FP32 數(shù)據(jù)分布具有最小的 KL 散度,以此來降低量化誤差。
模型裁剪通常指的是結(jié)構(gòu)化裁剪。結(jié)構(gòu)化裁剪是通道級別的裁剪,如圖 6 所示,旨在刪除多余的計算通道。
▲?圖6. 模型結(jié)構(gòu)化裁剪 [3]
對于某一個卷積核的裁剪,如圖 7 所示,在中間的 kernel 同時裁剪掉 input 和 output 的一個通道時,其輸入輸出 tensor 對應(yīng)的通道將減小,這帶來兩方面好處,一方面是在減小卷積核大小之后,模型體積得以減小,減少了推理過程中的 IO 時間,另一方面 tensor 本身體積被壓縮,因此相比壓縮之前只需要更少的內(nèi)存開銷。
EasyEdge 目前采取的就是這種通道裁剪技術(shù)。同時在裁剪通道的選擇上,封裝了基于 L1-norm、L2-norm 和 FPGM [8] 等多種方法,并且會根據(jù)實際情況靈活選擇。另一方面,裁剪后的模型由于更改了部分 Layer 的 shape,因此可能會影響到網(wǎng)絡(luò)拓撲結(jié)構(gòu)的合理性,EasyEdge 平臺集成了通道調(diào)整方法,實現(xiàn)通過廣度優(yōu)先查找算法,逐個矯正通道數(shù),并且對于部分特殊難以調(diào)整的 block 會配置跳過,保證裁剪算法的合理性。
▲?圖7. 針對一個卷積核的結(jié)構(gòu)化裁剪 [4]
對于部分模型的裁剪,EasyEdge 采用通道敏感度分析技術(shù),通過在每個 Layer 上多次裁剪推理計算最終精度損失來分析各個 Layer 對于通道裁剪的敏感度。另一方面,EasyEdge 還集成了 Layer 級別的配置裁剪策略,通過閾值過濾的方法,在相同壓縮率目標下,盡可能多的保留更敏感的層,以達到最小的精度影響。舉個例子,如圖 8 所示,一個 ResNet50 網(wǎng)絡(luò)中,通過敏感度分析得出結(jié)論,起始層和終止層對裁剪更敏感,因此實施更低的裁剪率,而中間層具有更多的冗余,因此采用更高的裁剪率。
不僅如此,EasyEdge 在上層融合了一些簡單的超參搜索的技術(shù),一方面需要盡可能保留敏感 Layer 的參數(shù)信息,另一方面需要找出最匹配設(shè)定壓縮率的模型。例如一個 120M 大小的模型,在配置裁剪率為 50% 的時候,可以精確裁剪到 60M 左右,這種技術(shù)使 EasyEdge 平臺在模型壓縮層面可以提供更差異化的服務(wù)。
▲?圖8. 基于敏感度的裁剪,精準的裁剪率控制 [5]
對于部分模型的加速,EasyEdge 使用了基于 Hinton [9] 的蒸餾技術(shù)。模型蒸餾的目的是利用大模型學習到的知識去調(diào)教更小的模型,目的是為了讓小模型的精度能夠逼近大模型的精度。如圖 9 所示,一般蒸餾的方法是在同一個 session 中,將大模型的某些層輸出和小模型的部分輸出以一定的形式關(guān)聯(lián),這樣在訓練小模型的過程中,大模型所學到的知識會作用于小模型的梯度反向傳播,促進小模型的收斂。
▲?圖9. 知識蒸餾功能 [6]
本次新上功能,主要功能基于模型壓縮框架 PaddleSlim 開發(fā),EasyEdge 平臺基于其中的壓縮功能做了進一步的封裝和優(yōu)化。想了解更多相關(guān)信息可以登錄 github 搜索 PaddleSlim。?
我們分別在三種最常用的端設(shè)備,即 CPU、GPU 和 ARM 上發(fā)布了超高精度檢測模型,具體設(shè)備型號如下:
CPU: Intel? Xeon? Processor E5-2630 v4?
GPU: NVIDIA Tesla V100?
ARM: Firefly-RK3399?
如圖 10 所示,其中直方圖中 acc1-acc3 分別代表不同加速等級,加速等級越高模型被裁剪的通道數(shù)越多,縱坐標是網(wǎng)絡(luò)對單張圖片的推理延時。可以觀察到 EasyEdge 的模型壓縮能力在三種端上速度收益都很明顯,直觀上看通用 CPU 上加速效果最好,可以達到超過一倍的速度提升,這也跟 EasyEdge 平臺在不同端設(shè)備上采取的加速方法相關(guān),當多種加速技術(shù)同時使用時會取得較大的提升。其中 GPU 本身擁有更強的算力,因此減小 FLOPS 對于 GPU 的加速效果而言略弱于 CPU 和通用 ARM。
▲?圖10. 不同端設(shè)備上的加速情況
那么接下來對比一下同一個硬件設(shè)備上,不同類型的模型的加速效果。我們實驗了幾種不同精度的模型在 Jetson (jetson4.4-xavier) 上的推理效果,包括 MobileNetv1-SSD、MobileNetv1-YOLOv3 和 YOLOv3。如圖 11 所示,acc1-acc3 的含義同上,總體來說,新上的模型壓縮功能在犧牲少量精度的情況下最多可以獲得 40% 左右的速度收益,效果明顯。另一方面,高性能模型的加速效果相比之下會略差一點,因為高性能模型本身具備一定的加速特質(zhì),例如更小的模型體積和更少的 FLOPS,因此再提升的空間相比之下更小。
▲?圖11. 不同的檢測模型在 Jetson 上的推理延時
實際使用過程中具體的速度提升會根據(jù)端側(cè)設(shè)備和模型類型的不同而有所區(qū)別,EasyEdge 平臺的模型壓縮能力在后續(xù)迭代中也會持續(xù)優(yōu)化和更新。
現(xiàn)在可以體驗一下新功能,在發(fā)布模型的時候可以根據(jù)自身需求選擇合適的加速方案,如圖 12 所示。
▲?圖12. EasyEdge 提供多種加速方案
發(fā)布模型后可以在評測頁面觀看 sdk 在端上的推理效果,如圖 13 所示,最快的加速方案伴隨著較少的精度損失,可將模型速度提升 30%。
▲?圖13. EasyEdge 提供模型評測功能
EasyEdge 的能力也全面集成于飛槳企業(yè)版 EasyDL 和 BML 中,使用這兩大平臺,可以一站式完成數(shù)據(jù)處理、模型訓練、服務(wù)部署全流程,實現(xiàn) AI 模型的高效開發(fā)和部署。?
近期,飛槳企業(yè)版開展【2021 萬有引力計劃】活動,免費送你價值 10,000 元現(xiàn)金券,可直接用于購買飛槳企業(yè)版 EasyDL 和 BML 公有云的線上服務(wù),最高可兌換:
6000+ 小時的自定義模型訓練時長
590+ 小時的腳本調(diào)參
公有云部署 400+ 小時配額
或者兌換 50 個設(shè)備端的 SDK
名額有限,立刻點擊閱讀原文領(lǐng)取:
https://ai.baidu.com/easydl/universal-gravitation
參考文獻
[1] Fang J, Shafiee A, Abdel-Aziz H, et al. Near-lossless post-training quantization of deep neural networks via a piecewise linear approximation[J]. arXiv preprint arXiv:2002.00104, 2020.
[2] Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2704-2713.
[3] Han S, Pool J, Tran J, et al. Learning both weights and connections for efficient neural networks[J]. arXiv preprint arXiv:1506.02626, 2015.
[4] Li H, Kadav A, Durdanovic I, et al. Pruning filters for efficient convnets[J]. arXiv preprint arXiv:1608.08710, 2016.
[5] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
[6] Gou J, Yu B, Maybank S J, et al. Knowledge distillation: A survey[J]. International Journal of Computer Vision, 2021, 129(6): 1789-1819.
[7] Wu H, Judd P, Zhang X, et al. Integer quantization for deep learning inference: Principles and empirical evaluation[J]. arXiv preprint arXiv:2004.09602, 2020.
[8] He Y, Liu P, Wang Z, et al. Filter pruning via geometric median for deep convolutional neural networks acceleration[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 4340-4349.
[9] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.
????
現(xiàn)在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關(guān)注」訂閱我們的專欄吧
·
總結(jié)
以上是生活随笔為你收集整理的可真有你的!EasyEdge模型压缩新姿势……的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么在bios中u盘启动 BIOS中如何
- 下一篇: u盘怎么装xp电脑系统教程 如何在电脑上