1. 程式人生 > >騰訊AI Lab正式開源PocketFlow自動化深度學習模型壓縮與加速框架

騰訊AI Lab正式開源PocketFlow自動化深度學習模型壓縮與加速框架

感謝閱讀騰訊AI Lab微訊號第54篇文章,11月2日,騰訊AI Lab在南京舉辦的騰訊全球合作伙伴大會人工智慧分論壇上宣佈,正式開源“PocketFlow”專案。

11月2日,騰訊AI Lab在南京舉辦的騰訊全球合作伙伴大會“共生·人工智慧”分論壇上宣佈正式開源“PocketFlow”專案, 該專案是一個自動化深度學習模型壓縮與加速框架,整合多種模型壓縮與加速演算法並利用強化學習自動搜尋合適壓縮引數,解決傳統深度學習模型由於模型體積太大,計算資源消耗高而難以在移動裝置上部署的痛點,同時極大程度的降低了模型壓縮的技術門檻,賦能移動端AI應用開發。

這是一款適用於各個專業能力層面開發者的模型壓縮框架,基於Tensorflow開發,集成了當前主流與AI Lab自研的多個模型壓縮與訓練演算法,並採用超引數優化元件實現了全程自動化託管式的模型壓縮。開發者無需瞭解具體模型壓縮演算法細節,即可快速地將AI技術部署到移動端產品上,實現使用者資料的本地高效處理。

目前該框架在騰訊內部已對多個移動端AI應用模型進行壓縮和加速,並取得了令人滿意的效果, 對應用整體的上線效果起到了非常重要的作用。

專案訪問地址:

https://github.com/Tencent/PocketFlow

隨著移動網際網路的普及和AI演算法的愈加成熟,移動端AI的需求和應用場景也愈加豐富,如智慧美顏,瘦身,手勢識別,場景識別,遊戲AI,視訊檢測,車載語音互動,智慧家居,實時翻譯等。將模型部署在移動端代替伺服器端可以實現實時互動,在無網路環境的情況下也可正常執行,並且保護了資料的隱私和安全性,降低運維成本。而在移動端AI模型部署方面,小而快變成了模型推理最渴望的要求之一,因為小的模型可以使得整個應用的儲存空間減小;而提高模型的推理速度則可以使得整個模型應用場景的反應速度加快,同時也可以在低配裝置上取得很好的效果。因此,模型的推理速度逐漸已經成為了各大AI應用市場競爭力上最重要的評測指標之一。然而往往訓練出來的模型推理速度或者尺寸大小不能滿足需求,大部分開發者對極致的模型壓縮和加速方法又感到困惑。

PocketFlow的出現就是為了解決這個令眾多AI應用開發者頭痛的問題。

框架開源內容

PocketFlow框架本次開源內容主要由兩部分元件構成,分別是模型壓縮/加速演算法部分和超引數優化部分,具體結構如下圖所示:

640?wx_fmt=jpeg

模型壓縮/加速演算法部分包括多種深度學習模型壓縮和加速演算法:

1)通道剪枝(channel pruning): 在CNN網路中,通過對特徵圖中的通道維度進行剪枝,可以同時降低模型大小和計算複雜度,並且壓縮後的模型可以直接基於現有的深度學習框架進行部署。PocketFlow還支援通道剪枝的分組finetune/retrain功能,通過實驗我們發現此方法可以使原本壓縮後的模型精度有明顯的提升。

2)權重稀疏化(weight sparsification):通過對網路權重引入稀疏性約束,可以大幅度降低網路權重中的非零元素個數;壓縮後模型的網路權重可以以稀疏矩陣的形式進行儲存和傳輸,從而實現模型壓縮。

3)權重量化(weight quantization):通過對網路權重引入量化約束,可以降低用於表示每個網路權重所需的位元數;我們同時提供了對於均勻和非均勻兩大類量化演算法的支援,可以充分利用ARM和FPGA等裝置的硬體優化,以提升移動端的計算效率,併為未來的神經網路晶片設計提供軟體支援。

4)網路蒸餾(network distillation):對於上述各種模型壓縮元件,通過將未壓縮的原始模型的輸出作為額外的監督資訊,指導壓縮後模型的訓練,在壓縮/加速倍數不變的前提下均可以獲得0.5%-2.0%不等的精度提升。

5)多GPU訓練(multi-GPU training):深度學習模型訓練過程對計算資源要求較高,單個GPU難以在短時間內完成模型訓練,因此我們提供了對於多機多卡分散式訓練的全面支援,以加快使用者的開發流程。無論是基於ImageNet資料的Resnet-50影象分類模型還是基於WMT14資料的Transformer機器翻譯模型,均可以在一個小時內訓練完畢。

超引數優化(hyper-parameter optimization)部分可以通過強化學習或者AutoML,在整體壓縮率一定的情況下,搜尋出每一層最合適的壓縮比例使得整體的精度最高。多數開發者對模型壓縮演算法往往瞭解較少,調節壓縮演算法引數需要長期的學習和實驗才能有所經驗, 但超引數取值對最終結果往往有著巨大的影。PocketFlow的超引數優化部分正是幫助開發者解決了這一大痛點,並且通過實驗我們發現,其優化結果也要好於專業的模型壓縮工程師手工調參的結果。其結構如下圖:

640?wx_fmt=png

PocketFlow效能

通過引入超引數優化元件,不僅避免了高門檻、繁瑣的人工調參工作,同時也使得PocketFlow在各個壓縮演算法上全面超過了人工調參的效果。以影象分類任務為例,在CIFAR-10和ImageNet等資料集上,PocketFlow對ResNet和MobileNet等多種CNN網路結構進行有效的模型壓縮與加速。

在CIFAR-10資料集上,PocketFlow以ResNet-56作為基準模型進行通道剪枝,並加入了超引數優化和網路蒸餾等訓練策略,實現了2.5倍加速下分類精度損失0.4%,3.3倍加速下精度損失0.7%,且顯著優於未壓縮的ResNet-44模型; 在ImageNet資料集上,PocketFlow可以對原本已經十分精簡的MobileNet模型繼續進行權重稀疏化,以更小的模型尺寸取得相似的分類精度;與Inception-V1、ResNet-18等模型相比,模型大小僅為後者的約20~40%,但分類精度基本一致(甚至更高)。

640?wx_fmt=png

相比於費時費力的人工調參,PocketFlow框架中的AutoML自動超引數優化元件僅需10餘次迭代就能達到與人工調參類似的效能,在經過100次迭代後搜尋得到的超引數組合可以降低約0.6%的精度損失;通過使用超引數優化元件自動地確定網路中各層權重的量化位元數,PocketFlow在對用於ImageNet影象分類任務的MobileNet-v1模型進行壓縮時,取得了一致性的效能提升;用PocketFlow平均量化位元數為8時,準確率不降反升,從量化前的70.89%提升到量化後的71.29%。

640?wx_fmt=png

PocketFlow落地助力內部移動應用AI落地

在騰訊公司內部,PocketFlow框架正在為多項移動端業務提供模型壓縮與加速的技術支援。例如,在手機拍照APP中,人臉關鍵點定位模型是一個常用的預處理模組,通過對臉部的百餘個特徵點(如眼角、鼻尖等)進行識別與定位,可以為後續的人臉識別、智慧美顏等多個應用提供必要的特徵資料。我們基於PocketFlow框架,對人臉關鍵點定位模型進行壓縮,在保持定位精度不變的同時,大幅度地降低了計算開銷,在本身已經十分精簡的網路上取得了1.3 ~ 2倍不等的加速效果,壓縮後的模型已經在實際產品中得到部署。

640?wx_fmt=png

在人體體態識別專案中,PocketFlow更是在滿足上線精度的要求下,使得模型推理速度有3倍以上的加速, 為專案的移動端落地起到了決定性的作用。

640?wx_fmt=png640?wx_fmt=jpeg