MLPerf世界紀錄技術分享:通過模型壓縮優化取得最佳效能

lumin1020發表於2022-06-09

作者 | 劉姝

供稿 | 浪潮

MLPerf競賽由圖靈獎得主大衛·帕特森(David Patterson)聯合谷歌、史丹佛、哈佛大學等單位共同成立,是國際上最有影響力的人工智慧基準測試之一。在MLPerf V0.7推理競賽開放賽道中,浪潮資訊通過模型壓縮優化演算法取得效能大幅提升,將ResNet50的計算量壓縮至原模型的37.5%,壓縮優化後的ResNet50推理速度相比優化前單GPU提升83%,8GPU提升81%,基於浪潮NF5488A5伺服器,每秒最多可以處理549782張圖片,排名世界第一。本文將重點介紹浪潮在比賽中使用的模型壓縮演算法的設計思路、實現方式及效果。

1. 什麼是模型壓縮

為了提高識別準確率,當前深度學習模型的規模越來越大。ResNet50引數量超過2500萬,計算量超40億,而Bert引數量達到了3億。不管是訓練還是推理部署,這對平臺的計算能力和儲存能力都提出了非常高的要求。當前深度學習已經發展到部署應用普及階段,在移動端/嵌入式端裝置,計算/儲存資源是有限的,大模型難以適用。

很多深度神經網路中存在顯著的冗餘,僅僅訓練一小部分原來的權值引數就有可能達到和原網路相近的效能,甚至超過原網路的效能[1]。這給模型壓縮帶來了啟發。

模型壓縮是通過特定策略降低模型引數量/計算量,使其執行時佔用更少的計算資源/記憶體資源,同時保證模型精度,滿足使用者對模型計算空間、儲存空間的需求,從而能夠將模型更好地部署在移動端、嵌入式端裝置,讓模型跑得更快、識別得更準。

2.常用模型壓縮方法

模型壓縮有多種實現方法,目前可分為5大類:

(1)模型裁剪:

實現方式:對網路中不重要的權重進行修剪,降低引數量/計算量。

使用方式:分為非結構化裁剪與結構化裁剪,非結構化裁剪需結合定製化軟硬體庫,結構化裁剪無軟硬體限制。

(2)模型量化

實現方式:以低位元位數表示網路權重,(如fp16/8bit/4bit/2bit),降低模型的佔用空間,進行推理加速。

使用方式:需要定製化軟硬體支援,如TensorRT、TVM。

(3)知識蒸餾

實現方式:遷移學習的一種,用訓練好的“教師”網路去指導另一個“學生”網路訓練。

使用方式:大模型輔助小模型訓練來幫助小模型提升。

(4)精度緊湊網路

實現方式:設計新的小模型結構,如MobileNet、ShuffleNet。

(5)低秩分解

實現方式:將原來大的權重矩陣分解成多個小的矩陣。

使用方式:現在模型多以1x1為主,低秩分解難以壓縮,目前已不太適用。

上述幾種模型壓縮技術中,模型量化對推理部署軟硬體的要求較高,知識蒸餾一般用來輔助提高精度,緊湊網路模型結構相對固定,低秩分解不適用目前主流模型結構。而模型裁剪可以對模型結構靈活壓縮,滿足使用者對計算量/引數量的需求,且壓縮後的模型仍可保持較高精度,本文將重點介紹模型裁剪方法。

3. 模型裁剪相關技術

如前所述,模型裁剪分為非結構化裁剪與結構化裁剪。非結構化裁剪是一種細粒度裁剪,通過裁剪掉某些不重要的神經元實現,優點是裁剪力度較大,可將模型壓縮幾十倍,缺點是裁剪後的模型部署需要定製化的軟硬體支援,部署成本較高。而結構化裁剪是一種粗粒度裁剪,一般有channel、filter和shape級別的裁剪,這種方法裁剪力度雖然不像非結構化裁剪力度那麼大,但好處是裁剪後的模型不受軟硬體的限制,可以靈活部署,是近幾年模型壓縮領域研究者/公司的研究熱點。本文我們重點研究結構化裁剪。

結構化模型裁剪近幾年湧現很多優秀論文,壓縮成績不斷被重新整理,壓縮技術從手動化結構裁剪進化到基於AutoML的自動化結構化裁剪。以下是幾種代表性的方法:

(1)將訓練好的模型進行通道剪枝(channel pruning)[2]。通過迭代兩步操作進行:第一步是channel selection,採用LASSO regression來做;第二步是reconstruction,基於linear least squares來約束剪枝後輸出的feature map儘可能和減枝前的輸出feature map相等。

(2)麻省理工學院韓鬆團隊提出了一種模型壓縮方法[3],其核心思想是使用強化學習技術來實現自動化壓縮模型。它不是對網路結構的路徑搜尋,而是採用強化學習中的DDPG(深度確定性策略梯度法)來產生連續空間上的具體壓縮比率。

(3)基於元學習的自動化裁剪方法[4],分三步實現:首先生成元網路進行權重預測;然後基於元網路利用遺傳進化演算法進行裁剪模型結構搜尋;最後篩選出符合要求的裁剪模型結構,對候選模型進行訓練。

4. 對ResNet50模型的壓縮優化

我們選擇Resnet50進行模型壓縮。從MLPerf競賽開始至2022年,而Resnet50始終是影像分類任務的基準模型,是計算機視覺領域模型的典型代表。

在裁剪方法的選擇上,我們採用基於AutoML的自動化裁剪方法。該方法的優勢是可以靈活定義搜尋空間,從而靈活裁剪出所需要的任何模型結構。Resnet50的裁剪要求可概括為“快且準”,實現方法分以下三步:

第一,與MetaPruning類似,首先生成一個“超網路”,為後續搜尋出的裁剪模型生成權重及預測精度。

第二,優化搜尋空間。自動化模型裁剪方法會基於特定方法對裁剪模型進行搜尋,搜尋方法與搜尋效率直接影響到目標模型的質量,我們對模型裁剪的搜尋空間與搜尋方法進行了深度優化。這一步是搜尋出符合預期的最優裁剪模型結構的關鍵,也是對Resnet50模型裁剪優化的關鍵技術點。

傳統方法在裁剪時一般以模型的計算量/引數量為裁剪指標,比如需要將引數量/計算量裁剪掉多少,但是我們對裁剪的終極目標之一是在推理部署時降低延遲,也就是快且準中的“快”。而單純降低模型引數量/計算量並不代表一定能帶來模型效能提升,需要考慮裁剪後模型計算強度與平臺計算強度的關係,參考roofline model理論。

圖1 Roofline model示意圖

圖1為roofline model示意圖,roofline model展示了模型在計算平臺的限制下能達到多快的計算速度,使用計算強度進行定量分析。當模型計算強度小於平臺計算強度(紅色區域),模型處於記憶體受限狀態,模型效能<計算平臺理論效能,效能提升<計算量減少;當模型計算強度大於平臺計算強度(綠色區域),模型處於計算受限狀態,模型效能約等於計算平臺理論效能,效能提升接近計算量減少。

同時我們研究發現,某些情況下,單純減少channel不一定會帶來模型效能提升甚至可能會降低模型效能,另外,裁剪後模型的推理效能因目標執行裝置不同存在差異。也就是說單純裁剪channel不一定會帶來效能提升,甚至有可能會適得其反,裁剪後模型的實際效能與部署的目標裝置相關,平臺計算特性和模型結構特點緊密相關。 

基於以上研究,我們對裁剪模型的搜尋空間做了重點優化,提出了基於效能感知的模型裁剪優化方法。在對裁剪模型結構進行搜尋時,除了考慮裁剪後模型的規模如計算量/引數量(FLOPS/Params),同時考慮不同模型結構(channel/shape/layers)基於裝置平臺的真實效能表現,也就是裁剪模型在推理部署平臺上的的推理延遲時間(latency)。具體做法如下:

(1)由於單純的計算量/引數量並不能反映模型在計算平臺上的真實效能,我們首先將不同的模型結構在計算平臺進行效能測試,決定模型的哪些層的channel需要多裁,哪些層的channel需要少裁,裁掉哪些層對實際效能提升效果最好。我們對resnet50的模型結構特點進行了研究。圖2為resnet50模型[5]結構圖,該模型結構分為5個conv模組,conv1是一個7x7卷積,conv2-conv5都是由bottleneck組成,分別包含3/4/6/3個bottleneck。

圖2 resnet50模型結構

以bottleneck為基本測試單位,模型推理測試平臺選擇tensorrt,對於每一個bottleneck,改變他們的輸入輸出channel個數,測試其在tensorrt上的推理效能表現,得到了每一個bottleneck在不同的輸入輸出channel下的實際效能表現。圖3展示了實驗中resnet50第三個stage的第6個bottleneck在不同的輸出channel個數下,在tensorrt上測試的推理效能。

圖3 resnet50conv3_bottleneck6基於tensorrt的推理延遲

由圖3結果可以看出,該模型結構下測得的推理延遲時間並不會隨著channel個數的增加而線性增長,推理時間與channel個數呈現出階梯狀關係(如當32<channel個數≤64時,推理效能持平)。該實驗結果帶來的啟發是,在對模型進行裁剪時,我們選擇保留階梯線右側邊緣的channel個數,這樣既能保證推理效能又能儘可能保證模型本身的channel個數。

(2)在對裁剪模型進行自動化搜尋時,除了基於計算量/引數量參考指標,提出了以延遲為優化目標的自動化模型裁剪方法。將基於效能感知的約束條件新增到裁剪模型搜尋空間,在對裁剪模型進行搜尋時,可同時滿足對計算量/引數量/延遲的多重要求,儘可能保證裁剪後的模型在推理部署階段最大限度地降低延遲。在裁剪模型搜尋階段,我們的優化程式碼第一階段首先會指定裁剪模型的計算量/引數量,通過計算量/引數量的設定去搜尋符合條件的裁剪模型。在裁剪模型的搜尋空間中,每一層channel個數的設定會參考(1)中的測試結果。第二階段在搜尋出的候選裁剪模型中,計算每個候選裁剪模型在目標推理平臺上的推理耗時,篩選出推理耗時最小的模型為我們的目標裁剪模型,從而保證裁剪模型是在計算量/引數量/延遲三個層面搜尋出的最優結果。

第三步,裁剪後模型精度恢復。對於模型裁剪,大家最關注的問題是裁剪後的模型是否能恢復到與裁剪前相近的精度,也就是快且準中的“準”。一般的模型裁剪方法是將模型裁剪之後進行finetune或者一邊裁剪一邊訓練,而通過我們的實驗發現通過裁剪演算法得到的壓縮模型,直接隨機初始化訓練(Training from scratch)得到的模型精度,反而比基於原模型權重finetune效果更好,Training from scratch可以更多去探索稀疏化模型的表達空間,所以我們對於裁剪後的模型採用Training from scratch的訓練方式。同時,為了儘可能恢復裁剪後模型的精度,我們結合蒸餾訓練,用大模型去指導裁剪後的小模型訓練,在精度保持上取得了非常好的效果。

表1是我們裁剪並訓練出的一些模型,將Resnet50計算量裁剪到原來的50%、37.5%時,仍然可以保持76%以上的TOP1精度:

表1 模型規模與對應精度

模型

Top-1

FLOPS

引數量

Raw-resnet50

76.4%

4G

255萬

Pruned-model1

76.3%

2G

167萬

Pruned-model2

76.1%

1.5G

165萬

基於浪潮NF5488A5平臺,未經過壓縮優化的Resnet50推理效能如表2:

表2 壓縮前的Resnet50基於NF5488A5的效能

模型

平臺

效能

Top1精度

ResNet50

浪潮NF5488A5(1*A100)

37694.5 images/s

76.1%

ResNet50

浪潮NF5488A5(8*A100)

303264 images/s

76.1%

而經過壓縮優化後,Resnet50在開放賽道的效能如表3:

表3 壓縮後的Resnet50基於NF5488A5的效能

模型

平臺

效能

Top1精度

ResNet50

浪潮NF5488A5(1*A100)

68994 images/s

75.856%

ResNet50

浪潮NF5488A5(8*A100)

549782 images/s

75.856%

綜上,在MLPerf推理V0.7競賽開放賽道中,基於壓縮優化演算法,我們將ResNet50計算量壓縮到原來的37.5%,壓縮優化後的ResNet50模型單GPU推理速度相比壓縮優化前提升83%,8GPU推理速度相比壓縮優化前提升81%。基於浪潮NF5488A5伺服器,單卡每秒可處理68994張圖片,8卡每秒可以處理549782張圖片,這個成績在當時參賽結果中排名第一。

參考文獻:

[1] Denil, M. , et al. "Predicting Parameters in Deep Learning." University of British Columbia (2013).

[2] He, Y. ,  X. Zhang , and  J. Sun . "Channel Pruning for Accelerating Very Deep Neural Networks." (2017).

[3] He, Y. , et al. "AMC: AutoML for Model Compression and Acceleration on Mobile Devices." (2018).

[4] Liu, Z. , et al. "MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning." (2019).

[5] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

————————————————

版權宣告:本文為CSDN博主「CSDN雲端計算」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:https://blog.csdn.net/FL63Zv9Zou86950w/article/details/125144702


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69965512/viewspace-2899630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章