在邊緣設備上擬合大型神經網絡的方法總結


前言:

對於任何想要創建可擴展服務的人來說,部署大內存的深度學習算法是一項挑戰。 從長遠來看,雲服務是昂貴的。 在邊緣設備上離線部署模型更便宜,並且還有其他好處。 唯一的缺點是它們缺乏內存和計算能力。

本文探討了一些可用於在內存受限設置中擬合神經網絡的技術。 不同的技術用於“訓練”和“推理”階段,因此分別討論。

 

Training

某些應用程序需要在線學習。也就是說,模型會根據反饋或附加數據進行改進。在邊緣部署此類應用程序會對模型造成有形的資源限制。這里有 4 種方法可以減少此類模型的內存消耗。

 

1. Gradient Checkpointing

TensorFlow 等框架會消耗大量內存進行訓練。在前向傳播期間,圖中每個節點的值都會被評估並保存在內存中。這是在反向傳播期間計算梯度所必需的。

 

圖片

 

通常情況下這沒什么問題,但當模型變得更深更復雜時,內存消耗會急劇增加。對此的一個巧妙的回避解決方案是在需要時重新計算節點的值,而不是將它們保存到內存中

 

圖片

 

但是,如上所示,計算成本顯着增加。 一個好的權衡是只在內存中保存一些節點,而在需要時重新計算其他節點。 這些保存的節點稱為檢查點。 這大大減少了深度神經網絡內存消耗。 這如下圖所示:

 

圖片

 

 

2. 犧牲速度換內存(重新計算)

擴展上述思想,我們可以重新計算某些操作以節省時間。一個很好的例子是 《Memory-Efficient Implementation of DenseNets 》這篇論文。

圖片

DenseNets 參數效率很高,但內存效率也很低,這種現象是由concatenation和batchnorm兩項操作的性質引起的。

為了使 GPU 上的卷積高效,這些值必須連續放置。因此,在concatenation之后,cudNN 在 GPU 上連續排列這些值。這涉及到大量的冗余內存分配。同樣,batchnorm 涉及過多的內存分配,如本文所述。這兩種操作都會導致內存的二次方增長。DenseNets 有大量的concatenation和batchnorm,因此它們的內存效率很低。

 

上述問題的巧妙解決方案涉及兩個關鍵觀察。

 

圖片

首先,concatenation和batchnorm不是時間密集型的。因此,我們可以在需要時重新計算值,而不是存儲所有冗余內存。其次,我們可以使用“共享內存空間”來轉儲輸出,而不是為輸出分配“新”內存空間。

我們可以覆蓋這個共享空間來存儲其他連接操作的輸出。我們可以在需要時重新計算用於梯度計算的串聯操作。 類似地,我們可以將其擴展為 batchnorm 操作。這個簡單的技巧節省了大量 GPU 內存,以換取略微增加的計算時間。

 

圖片

 

3. 降低精度

在一篇優秀的博客中,Pete Warden 解釋了如何使用 8 位浮點值訓練神經網絡。由於精度降低會產生許多問題,其中一些問題列在下面:

  • 如《Training deep neural networks with low precision multiplications》論文中所述,“激活值、梯度和參數”具有完全不同的范圍。 定點表示並不理想。論文聲稱“動態定點”表示非常適合低精度神經網絡。

  • 正如 Pete Warden 的另一篇博客中所述,較低的精度意味着與精確值的偏差較大。通常,如果錯誤是完全隨機的,它們很有可能相互抵消。然而,零被廣泛用於padding、dropout和ReLU。在較低精度的浮點格式中精確表示零可能是不可能的,因此可能會在性能中引入整體偏差。

 

4. 神經網絡架構工程

架構工程(Architecture engineering)涉及設計最優化准確度、內存和速度的神經網絡結構。

有以下幾種方法可以在空間和時間上優化卷積。

  • 將 NxN 卷積分解為 Nx1 和 1xN 卷積的組合。這節省了大量空間,同時也提高了計算速度。在Inceptionv2-v4網絡中都使用了這個和其他幾個優化技巧。

  • 在 MobileNet 和 Xception Net 中使用 Depthwise Separable 卷積。

  • 使用 1x1 卷積作為瓶頸來減少傳入通道的數量。該技術用於很多經典的神經網絡。

一個有意思的解決方案是讓機器為特定問題選擇最佳架構。神經架構搜索使用機器學習來為給定的分類問題找到最佳的神經網絡架構。在 ImageNet 上使用時,由此形成的網絡 (NASNet) 是迄今為止創建的性能最佳的模型之一。Google 的 AutoML 有着相同的工作原理。

圖片

 

 

Inference

邊緣推斷的擬合模型相對容易。 本節介紹可用於針對此類邊緣設備優化神經網絡的技術。

 

1. 去掉 “Bloatware”

TensorFlow 等機器學習框架會消耗大量內存空間來創建圖。這個額外的空間對於加速訓練過程很有用,但它不用於推理。因此,可以剪掉專門用於訓練的圖部分。我們將這部分稱為graph bloatware。

對於 TensorFlow,建議將模型檢查點轉換為凍結推理圖。此過程會自動刪除占用大量內存的bloatware。 當轉換為凍結推理圖時,來自模型檢查點的引發資源耗盡錯誤的圖有時可以滿足內存。

 

 

2. 特征剪枝

Scikit-Learn 上的一些機器學習模型(如隨機森林和 XGBoost)輸出名為 feature_importances_ 的屬性。該屬性表示每個特征對於分類或回歸任務的重要性。我們可以簡單地修剪最不重要的特征。如果模型具有無法通過任何其他方法減少的過多特征,這將非常有用。

圖片

同樣,在神經網絡中,很多權重值都接近於零。 我們可以簡單地修剪這些連接。 但是,刪除層之間的單個連接會創建稀疏矩陣。 目前正在努力創建可以無縫處理稀疏操作的高效推理引擎(硬件)。 然而,大多數機器學習框架在將稀疏矩陣傳輸到 GPU 之前就已經將它們轉換為密集形式。

圖片

相反,我們可以移除無關緊要的神經元並稍微重新訓練模型。 對於 CNN,我們也可以刪除整個卷積核。 研究和實驗表明,通過使用這種方法,我們可以保留大部分精度,同時大幅減小尺寸。

 

3. 權重共享

一個 4x4 權重矩陣。它有 16 個 32 位浮點值。我們需要 512 位 (16 * 32) 來表示矩陣。

將權重值量化為 4 個級別,但保留它們的 32 位性質。現在,4x4 權重矩陣只有 4 個唯一值。這 4 個唯一值存儲在單獨的(共享)內存空間中。我們可以為 4 個唯一值中的每一個指定一個 2 位地址(可能的地址值為 0、1、2 和 3)。

圖片

 我們可以通過使用 2 位地址來引用權重值。因此,我們獲得了一個具有 2 位地址的新 4x4 矩陣,矩陣中的每個位置都指向共享內存空間中的一個位置。此方法需要 160 位(16 * 2 + 4 * 32)用於整個表示。縮減因子為3.2 。

不用說,這種尺寸的減小伴隨着時間復雜度的增加。 但是,訪問共享內存的時間不會是嚴重的時間損失。

 

 

4. 量化

回想一下,本文的訓練部分介紹了降低精度。 對於推理,精度的降低並不像訓練那樣麻煩。 權重可以只轉換為較低精度的格式,然后進行推理。 但是,精度的急劇下降可能需要對weights進行輕微的重新調整。

 

5. Encoding

修剪和量化的權重可以通過使用編碼進一步進行大小優化。 霍夫曼編碼可以用較少的位數表示最常見的權重值。 因此,在位級別上,霍夫曼編碼的字符串比普通字符串占用的空間更小。

深度壓縮探索使用無損壓縮技術(如霍夫曼)進行編碼。 然而,研究也探索了有損壓縮技術的使用。 這兩種方法的缺點是翻譯的開銷。

 

6. 推理優化器

到目前為止,我們已經討論了一些很不錯的想法,但是從頭開始實施它們需要相當長的時間。 這就是推理優化器發揮作用的地方。例如,英偉達的 TensorRT 融合了所有這些想法(以及更多),並在訓練好的神經網絡的情況下提供了一個優化的推理引擎。

圖片

 

此外,TensorRT 可以優化模型,以便更好地利用 Nvidia 的硬件。下面是一個示例,其中使用 TensorRT 優化的模型更有效地使用 Nvidia 的 V100。

圖片

 

7. 知識蒸餾

我們可以教授較小的模型來模仿強大的較大模型的性能,而不是執行花哨的優化技術。 這種技術稱為知識蒸餾,它是 Google Learn2Compress 的一個組成部分。

圖片

通過使用這種方法,我們可以強制適合邊緣設備的較小模型達到較大模型的性能水平,而准確度的下降很小。

具體可以參考公眾號的另一篇文章《知識蒸餾簡要概述》。

原文鏈接:

https://heartbeat.fritz.ai/how-to-fit-large-neural-networks-on-the-edge-eb621cdbb33

 

其他文章

注意力機制總結

特征金字塔總結

數據增強方法總結

CNN可視化技術總結

CNN結構演變總結—經典模型

CNN結構演變總結—輕量化模型

CNN結構演變總結—設計原則

池化技術總結

非極大值抑制總結

英文文獻閱讀方法總結

論文創新的常見思路總結

本文來源於公眾號CV技術指南的技術總結系列。

在公眾號《CV技術指南》中回復“技術總結”可獲取以上所有總結系列文章的匯總pdf

QR.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM