模型加速 關於模型加速的總結

2021-10-22 06:14:56 字數 2966 閱讀 3282

● 模型加速的目標:

a. increase inference speed:加快推理速度(應用層面)。

b. reduce model size:壓縮模型。

● 關於模型的加速大致可以分為三個方面的加速:

1)平台(支援層面):數**算(底層)

2)訓練前:網路結構的設計

3)訓練後:在訓練好的模型上進行加速

因為模型加速包含的內容非常廣泛,下面只對這三個方面進行簡單介紹。

(1) winograd [2015]

● 原理:

用大量低成本操作代替少量高成本操作(乘法操作轉為加法操作),雖然運算數量上看起來更多了,但是總的花費是減少的。(winograd 演算法通過減少乘法次數來 實現提速,但是加法的數量會相應增加,同時需要額外的 transform 計算以及儲存 transform 矩陣)。

注:在二維卷積上,只適用於小kernel(如2×2、3×3、4×4)。

● 計算過程如下:

(2)奇異值分解(singular value decomposition,svd)

較為複雜,有興趣的可以查閱相關資料。

使用輕量級網路加速模型(如果是檢測或者分割等複雜任務,就使用輕量級網路作為backbone)。可以更好的部署在移動端。

● 常用的輕量級網路:

1)壓縮再擴充套件:squeezenet

2)深度可分離卷積:mobilenet系列:

a. mobilenet v1 mobilenet v1詳解

b. mobilenet v2 mobilenet v2詳解

c. mobilenet v3

3)通道混洗:shufflenet系列:

a. shufflenet v1

b. shufflenet v2

4)網路結構搜尋(nas):efficient net

剪枝是對已訓練好的模型進行裁剪的方法,是目前模型壓縮中使用最多的方法,通常是 尋找一種有效的評判手段,來判斷引數的重要性,將不重要的 connection 或者 filter 進行裁 剪來減少模型的冗餘。剪枝通常能大幅減少引數數量,壓縮空間,從而降低計算量。乙個典 型的剪枝演算法通常有三個階段,即訓練(大型模型),剪枝和微調。在剪枝過程中,根據一 定的標準,對冗餘權重進行修剪並保留重要權重,以最大限度地保持精確性。

● 基本步驟:

1)實現原始網路,並將其訓練到收斂,儲存權重。

2)觀察對每一層的權重,判斷其對模型的貢獻大小,刪除貢獻較小的 kernel,評判標準可 以是 std,sum(abs),mean 等。

3)當刪除部分 kernel 後,會導致輸出層的 channel 數變化,需要刪除輸出層對應 kernel 的 對應 channel。

4)構建剪枝後的網路,載入剪枝後的權重,與原模型對比精準度。

5)使用較小的學習率,rebirth 剪枝後的模型。

6)重複第 1 步

● 方法:network slimming

● 什麼是模型量化?

模型量化即以較低的推理精度損失將連續取值(或者大量可能的離散值)的浮點型模型 權重或流經模型的張量資料定點近似(通常為 int8)為有限多個(或較少的)離散值的過程。 它是以更少位數的資料型別用於近似表示 32 位有限範圍浮點型資料的過程,而模型的輸入 輸出依然是浮點型。從而達到減少模型尺寸大小、減少模型記憶體消耗及加快模型推理速度等 目標。

● 為什麼要進行模型量化?

resnet-152 神經網路的提出證明了越寬越深越大的模型往往比越窄越淺越小的模型精度 要高,但是越寬越深越大的模型對計算資源要求更高,而現在模型應用越來越傾向於從雲端 部署到邊緣側,受限於邊緣側裝置的計算資源,我們不得不考慮裝置儲存空間(storage)、 裝置記憶體大小(memory)、裝置執行功耗(power)及時延性(latency)等等問題,特別是 在移動終端和嵌入式裝置等資源受限的邊緣側應用場景中更加需要我們進行優化。模型量化 就是為了解決這類問題。

● 模型量化的好處

● 模型量化的缺點

1) 模型量化會損失一定的精度:雖然微調後可以減少精度損失,但推理精度確實下降。

2) 模型量化增加了操作複雜度:在量化時需要做一些特殊的處理,否則精度損失更嚴 重。

● 量化方法:tensorrt關於tensorrt的更詳細介紹以及安裝過程可以參考我的另外兩篇文章:tensorrt詳解 、tensorrt安裝、測試

● onnx介紹:

onnx(open neural network exchange )是微軟和 facebook 攜手開發的開放式神經網 絡交換工具,也就是說不管用什麼框架訓練,只要轉換為 onnx 模型,就可以放在其他框 架上面去 inference。這是一種統一的神經網路模型定義和儲存方式,上面提到的除了 tensorflow 之外的其他框架官方應該都對 onnx 做了支援,而 onnx 自己開發了對 tensorflow 的支援。從深度學習框架方面來說,這是各大廠商對抗谷歌 tensorflow 壟斷地位的一種有效 方式;從研究人員和開發者方面來說,這可以使開發者輕易地在不同機器學習工具之間進行 轉換,並為專案選擇最好的組合方式,加快從研究到生產的速度。

剪枝後 模型加速 TensorFlow模型剪枝原理

封面 thisisengineering raeng on unsplash 本文是對 to prune,or not to prune exploring the efficacy ofpruning for model compression 的摘抄。在這裡可以找到 原文。背景對於資源有限的移動...

如何給深度學習加速 模型壓縮 推理加速

深度學習模型往往受到端計算力的限制,無法很好的部署在移動端或無法降低端的計算成本。例如自動駕駛的模型就過於巨大,而且往往是很多模型並行,所以一般會用一些加速的方法來降低推算的計算力要求。加速方法有多種不同角度 網路結構,模型推理加速,模型剪枝,引數量化等。table of contents 網路結構...

Pytorch 基於混和精度的模型加速

這篇部落格是在pytorch中基於apex使用混合精度加速的乙個偏工程的描述,原理層面的解釋並不是這篇部落格的目的,不過在參考部分提供了非常有價值的資料,可以進一步研究。乙個關鍵原則 僅僅在權重更新的時候使用fp32,耗時的前向和後向運算都使用fp16 其中的乙個技巧是 在反向計算開始前,將dlos...