工程之道,深度學習的工業級模型量化實戰

2021-01-09 新浪財經

來源:新浪證券

背景

近年來隨著邊緣計算和物聯網的興起與發展,許多移動終端(比如手機)成為了深度學習應用的承載平臺,甚至出現了各式各樣專用的神經網絡計算晶片。由於這些設備往往對計算資源和能耗有較大限制,因此在高性能伺服器上訓練得到的神經網絡模型需要進行裁剪以縮小內存佔用、提升計算速度後,才能較好地在這些平臺上運行。

一種最直觀的裁剪方式就是用更少位數的數值類型來存儲網絡參數,比如常見的做法是將 32 位浮點數模型轉換成 8 位整數模型,模型大小減少為 1/4,而運行在特定的設備上其計算速度也能提升為 2~4 倍,這種模型轉換方式叫做量化(Quantization)。

量化的目的是為了追求極致的推理計算速度,為此捨棄了數值表示的精度,直覺上會帶來較大的模型掉點,但是在使用一系列精細的量化處理之後,其在推理時的掉點可以變得微乎其微,並能支持正常的部署應用。

原理

實現量化的算法多種多樣,一般按照代價從低到高可以分為以下四種:

Type1 和 Type2 由於是在模型浮點模型訓練之後介入,無需大量訓練數據,故而轉換代價更低,被稱為後量化(Post Quantization),區別在於是否需要小批量數據來校準(Calibration);

Type3 和 Type4 則需要在浮點模型訓練時就插入一些假量化(FakeQuantize)算子,模擬量化過程中數值截斷後精度降低的情形,故而稱為量化感知訓練(Quantization Aware Training, QAT)。

以常用的 Type3 為例,一個完整的量化流程分為三階段:(1)以一個訓練完畢的浮點模型(稱為 Float 模型)為起點;(2)包含假量化算子的用浮點操作來模擬量化過程的新模型(Quantized-Float 模型或 QFloat 模型);(3)可以直接在終端設備上運行的模型(Quantized 模型,簡稱 Q 模型)。

由於三者的精度一般是 Float > QFloat > Q ,故量化算法也就分為兩步:

· 拉近 QFloat 和 Q:這樣訓練階段的精度可以作為最終 Q 精度的代理指標,這一階段偏工程;

· 拔高 QFloat 逼近 Float:這樣就可以將量化模型性能儘可能恢復到 Float 的精度,這一階段偏算法。

第一步在MegEngine框架的「訓練推理一體化」特性下得到了保證,而第二步則取決於不同的量化算法。

儘管不同量化算法可能在假量化的具體實現上有所區別,但是一般都會有一個「截斷」的操作,即把數值範圍較大的浮點數轉換成數值範圍較小的整數類型,比如下圖,輸入一個[-1, 1)範圍的浮點數,如果轉換為 4 位整型,則最多只能表示 2^4 個值,所以需要將輸入的範圍劃分為16段,每段對應一個固定的輸出值,這樣就形成了一個類似分段函數的圖像,計算公式為:

[公式]

另外,由於分段函數在分段點沒有梯度,所以為了使假量化操作不影響梯度回傳,就需要模擬一個梯度,最簡單的方法就是用y=x來模擬這一分段函數,事實證明這麼做也是有效的,這種經典的操作被稱為「Straight-Through-Estimator」(STE)。

工程

量化部分作為模型推理部署的重要步驟,是業界在大規模工業應用當中極為關注的部分,它在 MegEngine 的底層優化中佔了很大比重。在目前開源的版本裡,針對三大平臺(X86、CUDA、ARM),MegEngine都有非常詳細的支持,尤其是ARM平臺。

一般在通用計算平臺上,浮點計算是最常用的計算方式,所以大部分指令也是針對浮點計算的,這使得量化模型所需的定點計算性能往往並不理想,這就需要針對各個平臺優化其定點計算的性能。

ARM 平臺

ARM平臺一般是指手機移動端,其系統架構和底層指令都不同於我們熟知的電腦CPU,而隨著架構的變遷,不同架構之間的指令也存在不兼容的問題。為此,MegEngine針對ARM v8.2前後版本分別實現了不同的優化:

· ARM v8.2 主要的特性是提供了新的引入了新的 fp16 運算和 int8 dot 指令,MegEngine基於此進行一系列細節優化(細節:四個int8放到一個128寄存器的32分塊裡一起算),最終實現了比浮點版本快2~3倍的速度提升

· 而對於v8.2之前的ARM處理器,MegEngine則通過對Conv使用nchw44的layout和細粒度優化,並創新性地使用了int8(而非傳統的int6)下的winograd算法來加速Conv計算,最使實現能夠和浮點運算媲美的速度。

CUDA 平臺

CUDA 平臺是指 NVIDIA 旗下 GPU 平臺,由於提供 CUDNN 和 Toolkit 系列接口以及 TensorRT 專用推理庫,大部分算子可以使用官方優化,而 MegEngine 則在此基礎上進行了更多細節的優化,比如如何更好地利用 GPU 的TensorCore 進行加速,不同型號之間一些差異的處理等,最終效果根據不同模型也有非常明顯的推理加速。

X86 平臺

X86 平臺是指 Intel CPU 平臺,近年來隨著深度學習的發展,其也慢慢提供了針對定點運算更多的支持。

· 在新一代至強(Xeon)處理器上,通過使用 VNNI(Vector Neural Network Instructions)指令,MegEngine 將 CPU 的 int8 推理性能優化到了浮點性能的 2~3 倍。

· 而對於不支持 VNNI 指令的 CPU,一般只提供最低 int16 的數值類型支持,則通過使用 AVX2(Advanced Vector Extensions)這一向量格式,實現了 int8 推理性能與浮點性能持平。

以上是對各個平臺推理加速效果的整體介紹,更多更細節的介紹可以期待之後的系列文章。

使用

除了底層實現上的加速與優化,在 Python 側訓練部分,MegEngine對接口也有很多細節設計,使得整體代碼邏輯清晰簡潔。

我們在 Module 中額外引入了兩個基類:QATModule、QuantizedModule 。分別代表上文提及的帶假量化算子的 QFloat 模型與 Q 模型,並提供普通 Module → QATModule → QuantizedModule 三階段的轉換接口。各個版本的算子是一一對應的,且通過合理的類繼承免除了大量算子實現中的冗餘代碼,清晰簡潔。

如上圖,用戶首先在普通 Module 上進行正常的模型訓練工作。訓練結束後可以轉換至 QFloat 模型上,通過配置不同的 Observer 和假量化算子來選擇不同的量化參數 scale 獲取方式,從而選擇進行 QAT 或 Calibration 後量化。之後可以再轉換至 Q 模型上,通過 trace.dump 接口就可以直接導出進行部署。

針對推理優化中常用的算子融合,MegEngine 提供了一系列已 fuse 好的 Module,其對應的 QuantizedModule 版本都會直接調用底層實現好的融合算子(比如 conv_bias)。

這樣實現的缺點在於用戶在使用時需要修改原先的網絡結構,使用 fuse 好的 Module 搭建網絡,而好處則是用戶能更直接地控制網絡如何轉換,比如同時存在需要 fuse 和不需要 fuse 的 Conv 算子,相比提供一個冗長的白名單,我們更傾向於在網絡結構中顯式地控制,而一些默認會進行轉換的算子,也可以通過 disable_quantize 方法來控制其不進行轉換。

另外我們還明確了假量化算子(FakeQuantize)和Observer的職責,前者將主要負責對輸入進行截斷處理的計算部分,而後者則只會記錄輸入的值,不會改變輸出,符合 Observer 的語義。

在配置使用上,用戶需要顯式指定針對 weight、activation 分別使用哪種 Observer 和 FakeQuantize,比如:

這樣的好處在於,用戶可以控制每一處量化過程的細節,可以分別採用不同量化算子和數值類型。

下文簡單說明一下在 MegEngine 中轉換一個 ResNet 網絡的全流程代碼:

Float → QFloat:

QFloat → Q 並導出用於部署:

本文簡單介紹了神經網絡模型實際應用在移動平臺必不可少的一步——量化,以及天元(MegEngine )在量化上做的一些工作:包括底層針對不同平臺的一些優化效果,在用戶接口使用上的一些設計理念。

天元(MegEngine)相信,通過簡潔清晰的接口設計與極致的性能優化,「深度學習,簡單開發」將不僅惠及曠視自身,也能便利所有的研究者,開發者。

參考文獻

[1] Moons, B., Goetschalckx, K., Van Berckelaer, N., & Verhelst, M. (2017, October). Minimum energy quantized neural networks. In 2017 51st Asilomar Conference on Signals, Systems, and Computers (pp. 1921-1925). IEEE.

[2] Jacob, B., Kligys, S., Chen, B., Zhu, M., Tang, M., Howard, A., ... & Kalenichenko, D. (2018). Quantization and training of neural networks for efficient integer-arithmetic-only inference. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 2704-2713).

[3] Zhou, A., Yao, A., Guo, Y., Xu, L., & Chen, Y. (2017). Incremental network quantization: Towards lossless cnns with low-precision weights. arXiv preprint arXiv:1702.03044.

[4] Li, F., Zhang, B., & Liu, B. (2016). Ternary weight networks. arXiv preprint arXiv:1605.04711.

[5] Rastegari, M., Ordonez, V., Redmon, J., & Farhadi, A. (2016, October). Xnor-net: Imagenet classification using binary convolutional neural networks. In European conference on computer vision (pp. 525-542). Springer, Cham.

相關焦點

  • 推薦算法系統/人臉識別/深度學習對話機器人高級實戰課
    包含了推薦算法系統實戰、深度學習人臉識別實戰、深度學習對話機器人實戰等高級前沿的精品課程,下面分別介紹下各個實戰項目:1、推薦算法系統實戰首先推薦系統不等於推薦算法,更不等於協同過濾。對話機器人從對話的產生方式,可以分為基於檢索的模型(Retrieval-Based Models)和生成式模型(Generative Models),基於檢索我們可以使用搜尋引擎的方式來做,基於生成式模型我們可以使用TensorFlow或MXnet深度學習框架的Seq2Seq算法來實現,同時我們可以加入強化學習的思想來優化Seq2Seq算法。
  • .| 深度學習理論與實戰:提高篇(5)——深度學習在語音識別中的應用
    編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。提起深度學習的再次興起,大家首先可能會想到2012年AlexNet在圖像分類上的突破,但是最早深度學習的大規模應用發生在語音識別領域。自從2006年Geoffrey Hinton提出逐層的Pretraining之後,神經網絡再次進入大家的視野。
  • 潮科技行業入門指南 | 深度學習理論與實戰:提高篇(3)——基於HMM...
    編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。作者李理,環信人工智慧研發中心vp,有十多年自然語言處理和人工智慧研發經驗,主持研發過多款智能硬體的問答和對話系統,負責環信中文語義分析開放平臺和環信智慧機器人的設計與研發。以下為正文。
  • 淺談AI深度學習之於先進封裝的重要性
    AI深度學習之於先進封裝的重要性 隨著半導體製造越來越逼近摩爾定律極限,本次大會最多討論的高精密封裝。半導體封測從最早的傳統封裝到先進封裝,再到高精密封裝,成為行業趨勢。缺陷檢測與良率控制的挑戰來自於封測工藝流程的巨大變革。缺陷檢測和複雜分析扮演著越來越重要的角色,而傳統AOI檢測方法已經無法適應半導體封裝的快速迭代發展要求。
  • 天算量化:「武器」匯聚交戰市場,揭秘量化之謎!
    來源:私募排排網研究院私募行業的蓬勃發展吸引了各個行業的菁英匯集,尤其是對於精英聚集的量化私募而言,在近兩年來備受市場關注,量化投資正在成為A股市場的新生力量,更新著A股的交易模式。作為國內最早一批結合人工智慧技術,採用非線性深度學習算法,進行股票和期貨量化投資的私募基金公司。
  • 指南者留學參加線上項目實戰的同學,都拿到了怎樣的錄取?
    01W同學,指南者量化金融、商業數據分析項目實戰訓練營學員本科背景:西南財經大學 金融智能與信息管理 GPA:3.7 語言:7.0(690)當前錄取:如何寫進簡歷:offer展示:04L同學,指南者量化金融項目實戰訓練營學員本科背景:西南財經大學 金融工程
  • 盤點金融領域裡常用的深度學習模型
    我們跟隨 Sonam Srivastava 的分析,並展望深度學習在金融領域的運用前景。雖然金融是計算密集型最多的領域,但廣泛使用的金融模型:監督和無監督模型、基於狀態的模型、計量經濟學模型甚至隨機模型都受到過度擬合和啟發式問題帶來的影響,抽樣結果很差。因為金融生態圈異常複雜,其非線性充斥著大量的相互影響的因素。
  • TensorFlow官方推薦 國內首本教程:《TensorFlow實戰》預售(免費送書)
    本書結合了大量實例代碼,深入淺出地介紹了如何使用TensorFlow創建各種深度學習模型,是初學者入門的最佳書籍。《TensorFlow實戰》首著問世,Google TensorFlow研發團隊內部推薦的中文教程TensorFlow Contributor、Committer原創TensorFlow工程研發總監Rajat Monga、深度學習領域泰鬥顏水成等讚譽好評作者:黃文堅、唐源《TensorFlow
  • 深度學習之卷積神經網絡經典模型
    隨著ReLU與dropout的提出,以及GPU帶來算力突破和網際網路時代大數據的爆發,卷積神經網絡帶來歷史的突破,AlexNet的提出讓深度學習走上人工智慧的最前端。這個網絡論證了加大深度,寬度以及訓練數據的增加是現有深度學習獲得更好效果的主要方式。但是增加尺寸可能會帶來過擬合的問題,因為深度與寬度的加深必然會帶來過量的參數。此外,增加網絡尺寸也帶來了對計算資源侵佔過多的缺點。
  • NLP 從入門到實戰,阿里 iDST 9 大名師即將開講
    本課程將系統涵蓋 NLP 技術中的分詞算法、語義理解、對話系統以及機器翻譯等四大版塊,重點介紹基礎理論與實戰應用,幫助大家解決實戰過程中會遇到的技術難題。  課程內容(10個課時):1.詞法分析1、中文詞法分析的基本概念和核心問題2、基於馬爾科夫模型的中文詞法分析3、基於序列標註模型(CRF、LSTM)的中文詞法分析4、詞法分析之工業界實踐2.
  • 新深度學習模型——少量人工神經元造就更高智能
    與之前的深度學習模型相比,該系統具有明顯的優勢:能更好地應對嘈雜輸入,而且其操作模式可以詳細解讀。與活體大腦相似,人工神經網絡也是由許多獨立的細胞組成的。當一個細胞處於活躍狀態時,會向其他細胞發送信號,下一個細胞會將接收到的所有信號進行綜合評估,以決定自身是否也需要被激活。
  • 主流的深度學習模型有哪些?
    作者:阿薩姆 | 普華永道 數據科學家量子位 已獲授權編輯發布轉載請聯繫原作者深度學習大熱以後各種模型層出不窮,很多朋友都在問到底什麼是DNN、CNN和RNN,這麼多個網絡到底有什麼不同,作用各是什麼?趁著回答《深度學習的主要分類是什麼呀?這些網絡cnn dbn dnm rnn是怎樣的關係?》
  • 吳恩達深度學習筆記(13)-多樣本梯度下降和向量化處理多批次數據
    所以看來你需要一個for循環遍歷所有n個特徵當你應用深度學習算法,你會發現在代碼中顯式地使用for循環使你的算法很低效,同時在深度學習領域會有越來越大的數據集。所以能夠應用你的算法且沒有顯式的for循環會是重要的,並且會幫助你適用於更大的數據集。所以這裡有一些叫做向量化技術,它可以允許你的代碼擺脫這些顯式的for循環。
  • WAVE SUMMIT+2020深度學習開發者峰會報名啟動
    WAVE SUMMIT+2020深度學習開發者峰會盛大開啟!讓我們再次相約,嗨翻歲末~此次大會由深度學習技術及應用國家工程實驗室與百度聯合主辦,既有前沿技術解析與產業落地的乾貨,也有美酒和音樂的派對狂歡。同時,百度開源深度學習平臺飛槳也會在這次大會上帶來重磅更新,新老朋友們千萬不要錯過!
  • 35 萬行代碼,曠視重磅開源天元深度學習框架 ,四大特性實現簡單開發
    發布會上,曠視研究院高級技術總監田忠博詳細介紹了這款剛剛正式對外開源的深度學習框架。  全球AI開發框架又添一員,曠視開源「天元」  曠視天元開源之時,正值深度學習框架百花齊放的時代。  發布會上,天元項目的負責人,也是曠視研究院高級技術總監田忠博指出,天元是一套訓練推理一體化、動靜態合一的工業級深度學習框架。
  • ResNet壓縮20倍,Facebook提出新型無監督模型壓縮量化方法
    機器之心原創 作者:立早 怎樣用量化方法解決模型壓縮問題?Facebook 近日提出了一個基於向量的量化方法,無需標註數據即可對 ResNet 模型進行20倍壓縮,還能夠獲得很高的準確率。
  • 深度學習 vs. 概率圖模型 vs. 邏輯學
    【編者按】在上個月發表博客文章《深度學習 vs. 機器學習 vs. 模式識別》之後,CMU博士、MIT博士後及vision.ai聯合創始人Tomasz Malisiewicz這一次帶領我們回顧50年來人工智慧領域三大範式(邏輯學、概率方法和深度學習)的演變歷程。通過本文我們能夠更深入地理解人工智慧和深度學習的現狀與未來。
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    對於個人和公司來說,存在許多狀況是更希望在本地設備上做深度學習推斷的:想像一下當你在旅行途中沒有可靠的網際網路連結時,或是要處理傳輸數據到雲服務的隱私問題和延遲問題時。邊緣計算(Edge computing)是一種在物理上靠近數據生成的位置從而對數據進行處理和分析的方法,為解決這些問題提供了方案。
  • 交易門深度精粹(5月15日更新)
    晟元全球投資基金的創始人、前高盛傳奇深交易員袁駿杭州希格斯投資創始人、量化交易悍將談效俊全球宏觀交易實戰派,歐洲十年袁玉瑋程序化交易不死鳥、上海蒙璽投資創始人李驤「預測最準」宏觀猛將,交銀國際研究部主管洪灝弘量研究聯合創始人/量化研究主管黃耀東
  • 量化| 模型校正在量化金融中的應用
    原標題:量化 | 模型校正在量化金融中的應用 只做專業交易軟體 | 交易開拓者旗艦版 | TB-Plus | TB-Smart | 校正是個反問題,給定產品價格反推模型參數 為了讓大家保持興趣,現在來看看兩個最簡單的定價和校正: 定價問題是1 + 2 = 3,把加法看成是個「模型」,那麼與之對應的校正問題就是 1 加上多少等於 3,校正 (用減法3 - 1) 出來的結果是2。