研學社·系統組 | 實時深度學習的推理加速和持續訓練

機器之心發表於2017-06-21
作者 Yanchen 畢業於普林斯頓大學機器學習方向,現就職於微軟Redmond總部,從事大規模分散式機器學習和企業級AI研發工作。在該篇文章中,作者介紹了實時深度學習的推理加速和持續性訓練。


引言


深度學習變革了許多計算機視覺和自然語言處理(NLP)領域內的任務,它為越來越多的消費者和工業產品提供更強大的智慧,並潛在地影響了人們在日常經驗和工業實踐上的標準流程。從理論上來說,深度學習和其他基於統計機器學習方法的自動化系統十分類似,它們都可以採用兩個過程描述。首先,深度神經網路(DNN)模型明確地指向為問題領域和可用資料而訓練,通常訓練會在 GPU 或高效能 CPU 叢集上花費大約十多小時到幾周的時間。然後它才能部署到產品環境中,並持續輸入資料流且產生實時推理,而產生的輸出會直接作為端結果或繼續饋送到下游系統中。無論哪種方式,具有嚴格延遲要求的應用都需要進行輕量且快速的深度學習推理(如自動駕駛汽車或搜尋引擎),通常每個樣本資料需要在幾十毫秒內響應。因此,相對於學術上關注於更快地訓練,產業上往往更關注於更快地推理,推動更快的加速成為了很多硬體和軟體解決方案的焦點和核心。

深度學習系統另外一個重要的方面就是需要處理輸入和輸出資料隨時間的分佈變化。像任何統計機器學習模型一樣,深度神經網路的有效性極其依賴於假設輸入和輸出資料的分佈並不會隨時間地變化而產生明顯的改變,從而最初學習到的複雜模型和模式可以在以後繼續使用。然而,這類假設在現實中是很少成立的,特別是在資訊保安等領域,快節奏潛在資料生成機制的變化屬於常態(在資訊保安案例中,攻擊和防禦參與雙方都在不斷調整策略而盡力勝過對手,因此它們都在挖掘對手的潛在漏洞)。因此隨著使用深度學習能解決更多以前無法解決的問題,深度神經網路的持續性訓練問題和如何在不損害產品質量前提下訓練,就受到了機器學習服務提供商(Machine-Learning-as-a-Service /MLaaS)和大量應用程式架構師的關注。

在本報告中,我們將介紹深度神經網路推理加速和產品場景下的持續性訓練近期的一些技術、趨勢和研究。我們報告的目標並不是鑽研幾個具體的技術,而是對解決這兩個問題的硬體和軟體解決方案進行調查和概覽。我們希望提供給讀者繼續研究的出發點,並希望能激發更多不同專業的人才參與到我們的討論和知識的交流中。

推理加速


推理加速-硬體

DNN 訓練和推理都是計算密集型過程,只不過方式完全不一樣。訓練需要很高的吞吐量,因此也通常在 GPU 上完成,因為 DNN 模型的訓練通常會涉及大量的平行計算和簡單的控制流與功耗效率。而將訓練分為數百個輸入資料為一批也很常見(如計算機視覺任務中的影像、NLP 任務中的語句序列和語音識別任務中的語譜圖等),因此將每個批次作為一個單位執行前向傳播和反向傳播,這樣可以透過多個 GPU 儲存器分攤載入神經網路權重的成本。

對於推理來說,最重要的效能目標就是延遲。為了最小化網路的端到端響應時間,推理相比於訓練通常需要更小的批次大小,因為依賴於推理的自動化服務需要實時響應。例如整個 Google Autosuggest 流程的延遲需要控制在 200 毫秒之內,其中就包括了前端、負載平衡(load balancing)、詢問理解和由 DNN 驅動的自動完成建議,同時還需要完整的搜尋堆疊遍歷來顯示使用者實際搜尋的結果。自動駕駛汽車之類的任務會要求更嚴格的時間延遲限制,因為當使用者安全受到威脅時,DNN 作為在車內嵌入晶片執行的一個元件,需要在極短的時間內做出正確的響應。

模型的訓練主要用的是 GPU,但推理硬體市場有若干選擇。

GPU


英偉達以它的先進 Pascal 架構 Tesla P4、 P40 和 P100 GPU 加速器為特色,其吞吐量峰值比單個 CPU 伺服器要高 33 倍,並且同一時間內可以降低最大達 31 倍的延遲。該效能對比來源於一個英偉達的研究,該研究比較了 AlexNet、GoogleNet、ResNet-152 和 VGG-19 在單塊 CPU 伺服器(單個 Intel Xeon E5-2690 v4 @ 2.6GHz)和 GPU 伺服器(same CPU with 1XP100 PCIe)上的效能。

為了幫助開發者充分利用它的硬體,英偉達 cuDNN 庫為 GPU 提供了一系列的推理最佳化。在小批次下,cuDNN 改善了卷積演算法不能並行化足夠的執行緒以充分利用 GPU 的問題。傳統的演算法如預計算的隱式 GEMM(一般矩陣-矩陣乘法)最最佳化為大規模輸出矩陣,而它的預設並行化策略並不能啟用足夠的執行緒塊,因此批次大小在輸出矩陣的一個維度中是一個乘法因子。最新版本的 cuDNN 透過分裂出額外的維度而改進了該演算法,這也就減少了每一個執行緒塊的計算總量,並允許啟用更多的執行緒塊來提升 GPU 使用率和效能。

另外一個主要的改進就是降低精確度的浮點運算操作。近年來,研究者發現使用更低精度的浮點運算表徵(FP16)儲存層級激勵值,而更高的表徵(FP32)進行計算並不會損失分類精度。即使期間的效能提升會有頻寬限制,但也能在執行 DNN 時減少整體的記憶體佔用要求。cuDNN 為卷積演算法引進了 FP16,相對於等價的 FP32 實現了兩倍的效能提升。

Intel Processor Graphics


隨著在雲端或透過雲端訓練 AI 系統持續性地增長,工業界正目睹著推理階段從高階專業伺服器轉移到邊緣計算當中。這就趨向於在終端裝置中本地執行機器學習和深度學習而不是單單依賴於 MLaaS,這種趨勢由減少網路頻寬瓶頸上的延遲而驅動,以及需要維持超過 99.999% 的服務健康線上時間,和可以向外擴充套件終端裝置而不是增加伺服器來平攤成本,同時這也將解決首當其衝的隱私和合規問題。由這一波智慧應用、自動駕駛汽車、自動化製造業和移動平臺上的虛擬助手所驅動,Intel Processor Graphics 已經裝備到了其硬體產品陣列中來解決各類 AI 工作負載,包括 Intel HD Graphics、Intel Iris Graphics 和 Intel Iris Pro Graphics 等。

他們旨在設計能在推理加速和程式設計靈活性上達到均衡的架構,並且該均衡作為 Intel SOC 的元件從廣泛使用的 PC 到伺服器嵌入裝置中。透過靈活的指令集架構,我們可以使用豐富的資料表徵,如 16FP、32FP、16Int、32Int 和快速 SIMD 乘積-累和運算(fast SIMD multiply-accumulate operations)。這些裝置提供高效的記憶體塊載入以最佳化卷積和一般矩陣-矩陣乘法,這些對邊緣裝置上快速和高能效的推理都是極其重要的。

為了更好地利用硬體資源進行推理,英特爾的深度學習部署工具包在已訓練的 DNN 模型上執行靜態、編譯時間分析以最佳化在各端點的執行。模型最佳化器嘗試融合水平的和垂直的層級並對冗餘網路進行剪枝和層級權重量化,然後將精簡量化的模型輸入到推理引擎中,引擎會進一步強調以降低佔用來為目標硬體最佳化推理。

正因為端點目標裝置和工具包實現了去耦(decoupling),它能最佳化執行在不同硬體單元的推理,包括 CPU、GPU 和 FPGA。對於 CPU 推理加速,它使用英特爾的 MKL-DNN 外掛。而對於 GPU,其利用了 clDNN,即一個為計算機視覺計算構建的 OpenCL 核最佳化庫。對於 FPGA 來說,它是與英特爾深度學習推理加速器結合,並由 Intel Arria 10 FPGA 支援的 PCIe 外掛卡,其可以最佳化流行的 CNN 拓撲結構,包括 AlexNet、GoogleNet、CaffeNet、LeNet、VGG-16 和 SqueezeNet。

FPGA


通常來說,由於其靈活的硬體配置,在同樣的功率耗能下 FPGA 通常能夠提供比 GPU 更好的效能,特別是對於如卷積和池化(pooling)等滑動視窗(sliding-window)的計算。這使得它們對於企業級使用者特別有吸引力,因為企業級使用者最終更關心降低大規模應用的成本以及其為特定應用定製推理架構(inference architecture)的能力。傳統上,FPGA 的峰值浮點運算效能不如 GPU,因此 FPGA 側重於發展有關 DNN 推理的技術。最新的基於英特爾 14 奈米技術開發的 Intel Stratix 10 FPGA 具有超過 5000 個浮點單元,並整合了高頻寬儲存的超過 28MB 的片內 RAM,可與 Nvidia Titan X Pascal GPU 相媲美(報告顯示,對於精度 FP32,Stratix 10 峰值速度為 9.2 TFLOP,而 Pascal Titan X 為 11 TFLOP)。

DNN 的兩個研究趨勢正推動著採用 FPGA 取代 GPU:即更低精確度的資料型別和稀疏性。研究者已經證明了 2-bit 三元的和 1-bit 二元的 DNN 精度有所提升,並提出了透過剪枝、ReLU 和三元樹等技術將神經元和權重稀疏性推高到 90%。這些技術加在一起提升 DNN 演算法的效率高出密集 FP32 架構一個數量級,前提是有合適的硬體實現能夠高效地跳過零的計算。單片和大型並行化 GPU 架構在這些不規則的並行模式和自定義資料型別下並不符合標準,而為極端定製能力而設計的 FPGA 顯得更加耀眼。英特爾最近一個團隊表明 Stratix FPGA 相比於 itan X GPU 在更低精度 6Int GEMM 有 3 倍的 TOP/s 和 4 倍的 GOP/s 每瓦特效能提升,1-bit GEMM 達到了 2 到 10 倍提升,85%-sparse GEMM 達到了 4 倍的提升。

TPU


除了為 DNN 推理進行廣泛目的的硬體重塑和重程式設計(如 CPU、GPU 和 FPGA)之外,研究者和實業家還專注於 ASIC(Application Specific Integrated Circuits),他們相信專用晶片能為特定的計算工作負載型別帶來最好的效能,谷歌去年釋出的 TPU 就是這樣的一個案例。該晶片驅動了谷歌大量的實時服務,包括搜尋、街景檢視、翻譯、照片和自動駕駛汽車等。TPU 通常要比 GPU 或 CPU 推理快 15 倍到 30 倍,並且每瓦特的成本還很低。TPU 優秀的推理效能源自四個主要的設計最佳化:Int8 量化、DNN-inference-specific CISC 指令集、大型並行化矩陣處理器和最低確定性設計。

量化(Quantization)極大地降低了最重要推理計算(矩陣乘法)的硬體佔用和能耗。移動端和嵌入式系統的部署同樣也得益於記憶體佔用的減少,據谷歌報告其在一般模型(如 Inception)要減少 4 倍多。一塊 TPU 包含 60000 Int8 乘法器,幾乎是在普通 GPU FP32 乘法器的 25 倍。

TPU 的 CISC 指令集關注於直接表徵和最佳化主要的 DNN 推理數學運算,即矩陣乘法和啟用函式。指令集包括最佳化的 CISC 指令以從記憶體讀取資料塊和權值塊,同時還最佳化了矩陣乘法或資料和權重的卷積以累和中間結果,應用硬連線的啟用函式和將結果寫入記憶體。可配置的、可程式設計的三個硬體單元:矩陣乘法器單元、標準快取和啟用單元驅動了這些特殊設計的指令高效執行。矩陣乘法器單元是一個大規模並行矩陣處理器,它能在單個時鐘週期內進行成百上千次矩陣運算(乘法和加法)。透過為許多不同的運算重用輸入(資料塊和權重塊)而不儲存它們到累加暫存器中,這樣就只需要 24MB 地 SRAM 標準快取。在大規模矩陣乘法中,所有的中間結果不需要 DRAM 訪問就能在 64K ALU 中通行,因此也就大大降低了能耗和極大地提升了吞吐量。

這些 ASIC 最佳化能令 TPU 在保證嚴格的延遲保證時還有近乎晶片峰值的吞吐量。谷歌報告說在一般 MLP 架構每個預測 7ms 的延遲情況下,TPU 的吞吐量要比 CPU 和 GPU 高 15 倍到 30 倍,而對於一般的 CNN 架構,TPU 相對於 CPU 實現峰值達 70 倍的效能加速。

推理加速——演算法


演算法上,降低推理延遲和 DRAM 佔用空間的一種有潛力的方法是模型壓縮。壓縮的模型能夠簡單的適配到片上 SRAM 快取上,而不是 DRAM 儲存上,這樣就能在移動平臺或無人駕駛汽車上裝備複雜的 DNN 應用。在這些應用場景中,儲存大小、推理速度和網路頻寬都有極大的限制。

眾所周知,在大部分前沿的 DNN 架構中,全連線層會被過引數化。許多研究專注在全連線層的壓縮,要麼是使用雜湊函式隨機地桶分化(bucketizing)連線權重,要麼是透過向量量化壓縮。Network-in-Network 提出用全域性平均池化取代全連線層,然後在頂部加上一個額外的線性層進行更好的遷移學習能力。

在 CPU、桌上型電腦 GPU 和移動 GPU 基準上,Deep Compression 產生了 30 倍到 50 倍更緊湊的 AlexNet 和 VGG-16 模型,分層(layerwise) 速度加快了 3 到 4 倍,能效提升了 3 到 7 倍,而且在 ImageNet 準確率上也沒有損失。這種方法是透過一個三階段的壓縮組合完成的:神經網路剪枝、訓練量化和 Huffman 編碼。

剪枝去掉了權重比低於某個閾值的網路連線,然後 DNN 在調整剩餘的稀疏連線的權重時就會受約束。稀疏架構的位置索引,在卷積層中是 8 位元編碼、在全連線層中是 5 位元編碼,都用 CSR 或 CSC 的格式儲存。剪枝平均對 AlexNet 和 VGG-16 降低 10 倍的引數量。

為了進一步減少編碼每個權重的位元量,Deep Compression 利用 一種裝箱技術(binning technique)共享權重。對一個帶有 M 輸入神經元和 M 輸出神經元的層而言,M x M 權重被量化到 M 個箱(bins)中,每個箱中的所有權重共享同樣的值,因此每個權重只有一個索引到需要儲存的共享權重表格中。在反向傳播過程中,梯度已類似的方式分組,裝箱到 M 個桶中,然後統一更新共享的權重矩心。透過權重共享進行量化有效地降低了需要儲存的權重,精調共享的權重降低了需要更新的運算的數量。對一個剪枝過的 AlexNet 而言,卷積層被量化到 8 位元的、全連線層到 5 位元,大小被進一步壓縮了 3 倍。

在剪枝和量化之後,Huffman 編碼可以利用權重分佈(表示為稀疏矩陣指數)極為偏倚的事實,通常將一小部分峰值彼此擠在一起。Huffman 編碼平均對 AlexNet 和 VGG -16 壓縮了 20%-30%。

尤其是在移動平臺實時執行有極大延遲、能量限制的應用時,Deep Compression 基準測試基本沒有分批(批大小=1)。沒有權重共享的全連線層通常控制著模型的大小,貢獻了超過 90% 的儲存需求。它們是從 Deep Compression 受益最多的。Deep Compression 對全連線層權重的大小有超過 95% 的修剪,使得完整訓練的 DNN 可被裝載到無人駕駛汽車內嵌處理器的 SRAM 中,因此可以低能耗地提供片上儲存推理。一種相關的硬體架構 Efficient Inference Engine 也提出了在深度壓縮模型上完成推理的方法。把壓縮過的 DNN 裝載進 SRAM 為 EIE 節省了 120 倍的能量,還有稀疏性、權重供學習和跳過零函式,峰值為 102 GOPS/s 時要比 GPU 有 15 倍更快的速度。

總結


在此份報告的第一部分,我們介紹了近期一些進行 DNN 推理加速的硬體和演算法技術。在接下來的第二部分,我們會討論 DNN 的持續訓練。

References

[1] Nvidia developer blog https://devblogs.nvidia.com/parallelforall/inference-next-step-gpu-accelerated-deep-learning/

[2] Nvidia whitepaper http://www.nvidia.com/content/tegra/embedded-systems/pdf/jetson_tx1_whitepaper.pdf

[3] Intel clDNN Github repository https://github.com/01org/clDNN

[4] In-Datacenter Performance Analysis of a Tensor Processing Unit, Norman P. Jouppi et al., Apr 2017, https://arxiv.org/ftp/arxiv/papers/1704/1704.04760.pdf

[5] Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding, Song Han et al., Feb 2016, https://arxiv.org/pdf/1510.00149.pdf

[6] EIE: Efficient Inference Engine on Compressed Deep Neural Network, Song Han et al., May 2016, https://arxiv.org/pdf/1602.01528.pdf

加入機器之心 ML 系統與架構小組:

近些年人工智慧的突破不僅僅是機器學習演算法的努力,更有包含了其所依賴的系統和架構領域的進步。如果你想更加全面的瞭解機器學習這個領域,對其依賴的上下游領域的瞭解會很有幫助。系統和架構就是這樣一個下游領域。這個方向的工作極大方便了其上游演算法的開發,或許你也是現在諸多 ML 系統產品的使用者之一。但面對一個這樣重要的跨領域的方向,你可能會感到這樣一些困境:

1. 找不到合適的學習資料

2. 有學習動力,但無法堅持

3. 學習效果無法評估

4. 遇到問題缺乏討論和解答的途徑

不論你是想要獲得相關跨領域的更全面大局觀,還是你只是想對手中的 ML 系統工具更加了解,你都是機器之心想要幫助和挖掘的物件。基於這個方向現在越來越成為眾多研究人員關注的焦點,機器之心發起了一個互助式學習小組.......(可以 copy 下面的)

因此,為了幫助「強化學習新手」進入這一領域,機器之心發起了一個互助式學習小組——「人工智慧研學社· ML 系統與架構小組」。本小組將透過優質資料分享、教材研習、論文閱讀、群組討論、專家答疑、講座與分享等形式加強參與者對強化學習和深度學習的理解和認知。

  • 面向人群:有一定的機器學習演算法基礎,並且對分散式計算、平行計算等也有所瞭解,同時想掌握此方向最新成果的人
  • 學習形式:學習資料推薦、統一進度學習(教材或論文)、群組討論、專家答疑、講座等。
  • 加入方式:

1)新增機器之心小助手微信,並註明:加入系統與架構學習組

研學社·系統組 | 實時深度學習的推理加速和持續訓練

2)完成小助手傳送的入群測試(題目會根據每期內容變化),並提交答案,以及其他相關資料(教育背景 、從事行業和職務 、人工智慧學習經歷等)。

3)小助手將邀請成功透過測試的朋友進入「人工智慧研學社· ML 系統與架構學習組」。

入群測試 QUIZ 

1)教育背景 2)從事行業和職務 3)人工智慧經歷 4)人工智慧系統或架構經歷

1. List one or two major differences between DNN training and inference.

2. Why are GPUs widely considered the best hardware for DNN training, but not necessarily inference?

相關文章