實時深度學習的推理加速和持續(xù)訓練
一、引言
深度學習變革了許多計算機視覺和自然語言處理(NLP)領域內(nèi)的任務,它為越來越多的消費者和工業(yè)產(chǎn)品提供更強大的智能,并潛在地影響了人們在日常經(jīng)驗和工業(yè)實踐上的標準流程。從理論上來說,深度學習和其他基于統(tǒng)計機器學習方法的自動化系統(tǒng)十分類似,它們都可以采用兩個過程描述。首先,深度神經(jīng)網(wǎng)絡(DNN)模型明確地指向為問題領域和可用數(shù)據(jù)而訓練,通常訓練會在 GPU 或高性能 CPU 集群上花費大約十多小時到幾周的時間。然后它才能部署到產(chǎn)品環(huán)境中,并持續(xù)輸入數(shù)據(jù)流且產(chǎn)生實時推理,而產(chǎn)生的輸出會直接作為端結(jié)果或繼續(xù)饋送到下游系統(tǒng)中。無論哪種方式,具有嚴格延遲要求的應用都需要進行輕量且快速的深度學習推理(如自動駕駛汽車或搜索引擎),通常每個樣本數(shù)據(jù)需要在幾十毫秒內(nèi)響應。因此,相對于學術上關注于更快地訓練,產(chǎn)業(yè)上往往更關注于更快地推理,推動更快的加速成為了很多硬件和軟件解決方案的焦點和核心。
深度學習系統(tǒng)另外一個重要的方面就是需要處理輸入和輸出數(shù)據(jù)隨時間的分布變化。像任何統(tǒng)計機器學習模型一樣,深度神經(jīng)網(wǎng)絡的有效性極其依賴于假設輸入和輸出數(shù)據(jù)的分布并不會隨時間地變化而產(chǎn)生明顯的改變,從而最初學習到的復雜模型和模式可以在以后繼續(xù)使用。然而,這類假設在現(xiàn)實中是很少成立的,特別是在信息安全等領域,快節(jié)奏潛在數(shù)據(jù)生成機制的變化屬于常態(tài)(在信息安全案例中,攻擊和防御參與雙方都在不斷調(diào)整策略而盡力勝過對手,因此它們都在挖掘?qū)κ值臐撛诼┒?。因此隨著使用深度學習能解決更多以前無法解決的問題,深度神經(jīng)網(wǎng)絡的持續(xù)性訓練問題和如何在不損害產(chǎn)品質(zhì)量前提下訓練,就受到了機器學習服務提供商(Machine-Learning-as-a-Service /MLaaS)和大量應用程序架構師的關注。
在本報告中,我們將介紹深度神經(jīng)網(wǎng)絡推理加速和產(chǎn)品場景下的持續(xù)性訓練近期的一些技術、趨勢和研究。我們報告的目標并不是鉆研幾個具體的技術,而是對解決這兩個問題的硬件和軟件解決方案進行調(diào)查和概覽。我們希望提供給讀者繼續(xù)研究的出發(fā)點,并希望能激發(fā)更多不同專業(yè)的人才參與到我們的討論和知識的交流中。
二、推理加速
1. 推理加速-硬件
DNN 訓練和推理都是計算密集型過程,只不過方式完全不一樣。訓練需要很高的吞吐量,因此也通常在 GPU 上完成,因為 DNN 模型的訓練通常會涉及大量的并行計算和簡單的控制流與功耗效率。而將訓練分為數(shù)百個輸入數(shù)據(jù)為一批也很常見(如計算機視覺任務中的圖像、NLP 任務中的語句序列和語音識別任務中的語譜圖等),因此將每個批量作為一個單位執(zhí)行前向傳播和反向傳播,這樣可以通過多個 GPU 存儲器分攤加載神經(jīng)網(wǎng)絡權重的成本。
對于推理來說,最重要的性能目標就是延遲。為了最小化網(wǎng)絡的端到端響應時間,推理相比于訓練通常需要更小的批量大小,因為依賴于推理的自動化服務需要實時響應。例如整個 Google Autosuggest 流程的延遲需要控制在 200 毫秒之內(nèi),其中就包括了前端、負載平衡(load balancing)、詢問理解和由 DNN 驅(qū)動的自動完成建議,同時還需要完整的搜索堆棧遍歷來顯示用戶實際搜索的結(jié)果。自動駕駛汽車之類的任務會要求更嚴格的時間延遲限制,因為當用戶安全受到威脅時,DNN 作為在車內(nèi)嵌入芯片運行的一個組件,需要在極短的時間內(nèi)做出正確的響應。
模型的訓練主要用的是 GPU,但推理硬件市場有若干選擇。
2. GPU
英偉達以它的先進 Pascal 架構 Tesla P4、 P40 和 P100 GPU 加速器為特色,其吞吐量峰值比單個 CPU 服務器要高 33 倍,并且同一時間內(nèi)可以降低最大達 31 倍的延遲。該性能對比來源于一個英偉達的研究,該研究比較了 AlexNet、GoogleNet、ResNet-152 和 VGG-19 在單塊 CPU 服務器(單個 Intel Xeon E5-2690 v4 @ 2.6GHz)和 GPU 服務器(same CPU with 1XP100 PCIe)上的性能。
為了幫助開發(fā)者充分利用它的硬件,英偉達 cuDNN 庫為 GPU 提供了一系列的推理優(yōu)化。在小批量下,cuDNN 改善了卷積算法不能并行化足夠的線程以充分利用 GPU 的問題。傳統(tǒng)的算法如預計算的隱式 GEMM(一般矩陣-矩陣乘法)最優(yōu)化為大規(guī)模輸出矩陣,而它的默認并行化策略并不能啟用足夠的線程塊,因此批量大小在輸出矩陣的一個維度中是一個乘法因子。最新版本的 cuDNN 通過分裂出額外的維度而改進了該算法,這也就減少了每一個線程塊的計算總量,并允許啟用更多的線程塊來提升 GPU 使用率和性能。
另外一個主要的改進就是降低精確度的浮點運算操作。近年來,研究者發(fā)現(xiàn)使用更低精度的浮點運算表征(FP16)儲存層級激勵值,而更高的表征(FP32)進行計算并不會損失分類精度。即使期間的性能提升會有帶寬限制,但也能在運行 DNN 時減少整體的內(nèi)存占用要求。cuDNN 為卷積算法引進了 FP16,相對于等價的 FP32 實現(xiàn)了兩倍的性能提升。
3. Intel Processor Graphics
隨著在云端或通過云端訓練 AI 系統(tǒng)持續(xù)性地增長,工業(yè)界正目睹著推理階段從高端專業(yè)服務器轉(zhuǎn)移到邊緣計算當中。這就趨向于在終端設備中本地執(zhí)行機器學習和深度學習而不是單單依賴于 MLaaS,這種趨勢由減少網(wǎng)絡帶寬瓶頸上的延遲而驅(qū)動,以及需要維持超過 99.999% 的服務健康在線時間,和可以向外擴展終端設備而不是增加服務器來平攤成本,同時這也將解決首當其沖的隱私和合規(guī)問題。由這一波智能應用、自動駕駛汽車、自動化制造業(yè)和移動平臺上的虛擬助手所驅(qū)動,Intel Processor Graphics 已經(jīng)裝備到了其硬件產(chǎn)品陣列中來解決各類 AI 工作負載,包括 Intel HD Graphics、Intel Iris Graphics 和 Intel Iris Pro Graphics 等。
他們旨在設計能在推理加速和編程靈活性上達到均衡的架構,并且該均衡作為 Intel SOC 的組件從廣泛使用的 PC 到服務器嵌入設備中。通過靈活的指令集架構,我們可以使用豐富的數(shù)據(jù)表征,如 16FP、32FP、16Int、32Int 和快速 SIMD 乘積-累和運算(fast SIMD multiply-accumulate operations)。這些設備提供高效的內(nèi)存塊載入以優(yōu)化卷積和一般矩陣-矩陣乘法,這些對邊緣設備上快速和高能效的推理都是極其重要的。
為了更好地利用硬件資源進行推理,英特爾的深度學習部署工具包在已訓練的 DNN 模型上執(zhí)行靜態(tài)、編譯時間分析以優(yōu)化在各端點的執(zhí)行。模型優(yōu)化器嘗試融合水平的和垂直的層級并對冗余網(wǎng)絡進行剪枝和層級權重量化,然后將精簡量化的模型輸入到推理引擎中,引擎會進一步強調(diào)以降低占用來為目標硬件優(yōu)化推理。
正因為端點目標設備和工具包實現(xiàn)了去耦(decoupling),它能優(yōu)化運行在不同硬件單元的推理,包括 CPU、GPU 和 FPGA。對于 CPU 推理加速,它使用英特爾的 MKL-DNN 插件。而對于 GPU,其利用了 clDNN,即一個為計算機視覺計算構建的 OpenCL 核優(yōu)化庫。對于 FPGA 來說,它是與英特爾深度學習推理加速器結(jié)合,并由 Intel Arria 10 FPGA 支持的 PCIe 插件卡,其可以優(yōu)化流行的 CNN 拓撲結(jié)構,包括 AlexNet、GoogleNet、CaffeNet、LeNet、VGG-16 和 SqueezeNet。
4. FPGA
通常來說,由于其靈活的硬件配置,在同樣的功率耗能下 FPGA 通常能夠提供比 GPU 更好的性能,特別是對于如卷積和池化(pooling)等滑動窗口(sliding-window)的計算。這使得它們對于企業(yè)級用戶特別有吸引力,因為企業(yè)級用戶最終更關心降低大規(guī)模應用的成本以及其為特定應用定制推理架構(inference architecture)的能力。傳統(tǒng)上,F(xiàn)PGA 的峰值浮點運算性能不如 GPU,因此 FPGA 側(cè)重于發(fā)展有關 DNN 推理的技術。最新的基于英特爾 14 納米技術開發(fā)的 Intel Stratix 10 FPGA 具有超過 5000 個浮點單元,并集成了高帶寬存儲的超過 28MB 的片內(nèi) RAM,可與 Nvidia Titan X Pascal GPU 相媲美(報告顯示,對于精度 FP32,Stratix 10 峰值速度為 9.2 TFLOP,而 Pascal Titan X 為 11 TFLOP)。
DNN 的兩個研究趨勢正推動著采用 FPGA 取代 GPU:即更低精確度的數(shù)據(jù)類型和稀疏性。研究者已經(jīng)證明了 2-bit 三元的和 1-bit 二元的 DNN 精度有所提升,并提出了通過剪枝、ReLU 和三元樹等技術將神經(jīng)元和權重稀疏性推高到 90%。這些技術加在一起提升 DNN 算法的效率高出密集 FP32 架構一個數(shù)量級,前提是有合適的硬件實現(xiàn)能夠高效地跳過零的計算。單片和大型并行化 GPU 架構在這些不規(guī)則的并行模式和自定義數(shù)據(jù)類型下并不符合標準,而為極端定制能力而設計的 FPGA 顯得更加耀眼。英特爾最近一個團隊表明 Stratix FPGA 相比于 itan X GPU 在更低精度 6Int GEMM 有 3 倍的 TOP/s 和 4 倍的 GOP/s 每瓦特性能提升,1-bit GEMM 達到了 2 到 10 倍提升,85%-sparse GEMM 達到了 4 倍的提升。
5. TPU
除了為 DNN 推理進行廣泛目的的硬件重塑和重編程(如 CPU、GPU 和 FPGA)之外,研究者和實業(yè)家還專注于 ASIC(Application Specific Integrated Circuits),他們相信專用芯片能為特定的計算工作負載類型帶來最好的性能,谷歌去年發(fā)布的 TPU 就是這樣的一個案例。該芯片驅(qū)動了谷歌大量的實時服務,包括搜索、街景視圖、翻譯、照片和自動駕駛汽車等。TPU 通常要比 GPU 或 CPU 推理快 15 倍到 30 倍,并且每瓦特的成本還很低。TPU 優(yōu)秀的推理性能源自四個主要的設計優(yōu)化:Int8 量化、DNN-inference-specific CISC 指令集、大型并行化矩陣處理器和最低確定性設計。
量化(Quantization)極大地降低了最重要推理計算(矩陣乘法)的硬件占用和能耗。移動端和嵌入式系統(tǒng)的部署同樣也得益于內(nèi)存占用的減少,據(jù)谷歌報告其在一般模型(如 Inception)要減少 4 倍多。一塊 TPU 包含 60000 Int8 乘法器,幾乎是在普通 GPU FP32 乘法器的 25 倍。
TPU 的 CISC 指令集關注于直接表征和優(yōu)化主要的 DNN 推理數(shù)學運算,即矩陣乘法和激活函數(shù)。指令集包括優(yōu)化的 CISC 指令以從內(nèi)存讀取數(shù)據(jù)塊和權值塊,同時還優(yōu)化了矩陣乘法或數(shù)據(jù)和權重的卷積以累和中間結(jié)果,應用硬連接的激活函數(shù)和將結(jié)果寫入內(nèi)存。可配置的、可編程的三個硬件單元:矩陣乘法器單元、標準緩存和激活單元驅(qū)動了這些特殊設計的指令高效執(zhí)行。矩陣乘法器單元是一個大規(guī)模并行矩陣處理器,它能在單個時鐘周期內(nèi)進行成百上千次矩陣運算(乘法和加法)。通過為許多不同的運算重用輸入(數(shù)據(jù)塊和權重塊)而不儲存它們到累加寄存器中,這樣就只需要 24MB 地 SRAM 標準緩存。在大規(guī)模矩陣乘法中,所有的中間結(jié)果不需要 DRAM 訪問就能在 64K ALU 中通行,因此也就大大降低了能耗和極大地提升了吞吐量。
這些 ASIC 優(yōu)化能令 TPU 在保證嚴格的延遲保證時還有近乎芯片峰值的吞吐量。谷歌報告說在一般 MLP 架構每個預測 7ms 的延遲情況下,TPU 的吞吐量要比 CPU 和 GPU 高 15 倍到 30 倍,而對于一般的 CNN 架構,TPU 相對于 CPU 實現(xiàn)峰值達 70 倍的性能加速。
三、推理加速——算法
算法上,降低推理延遲和 DRAM 占用空間的一種有潛力的方法是模型壓縮。壓縮的模型能夠簡單的適配到片上 SRAM 緩存上,而不是 DRAM 存儲上,這樣就能在移動平臺或無人駕駛汽車上裝備復雜的 DNN 應用。在這些應用場景中,存儲大小、推理速度和網(wǎng)絡帶寬都有極大的限制。
眾所周知,在大部分前沿的 DNN 架構中,全連接層會被過參數(shù)化。許多研究專注在全連接層的壓縮,要么是使用哈希函數(shù)隨機地桶分化(bucketizing)連接權重,要么是通過矢量量化壓縮。Network-in-Network 提出用全局平均池化取代全連接層,然后在頂部加上一個額外的線性層進行更好的遷移學習能力。
在 CPU、臺式機 GPU 和移動 GPU 基準上,Deep Compression 產(chǎn)生了 30 倍到 50 倍更緊湊的 AlexNet 和 VGG-16 模型,分層(layerwise) 速度加快了 3 到 4 倍,能效提升了 3 到 7 倍,而且在 ImageNet 準確率上也沒有損失。這種方法是通過一個三階段的壓縮組合完成的:神經(jīng)網(wǎng)絡剪枝、訓練量化和 Huffman 編碼。
剪枝去掉了權重比低于某個閾值的網(wǎng)絡連接,然后 DNN 在調(diào)整剩余的稀疏連接的權重時就會受約束。稀疏架構的位置索引,在卷積層中是 8 比特編碼、在全連接層中是 5 比特編碼,都用 CSR 或 CSC 的格式存儲。剪枝平均對 AlexNet 和 VGG-16 降低 10 倍的參數(shù)量。
為了進一步減少編碼每個權重的比特量,Deep Compression 利用 一種裝箱技術(binning technique)共享權重。對一個帶有 M 輸入神經(jīng)元和 M 輸出神經(jīng)元的層而言,M x M 權重被量化到 M 個箱(bins)中,每個箱中的所有權重共享同樣的值,因此每個權重只有一個索引到需要存儲的共享權重表格中。在反向傳播過程中,梯度已類似的方式分組,裝箱到 M 個桶中,然后統(tǒng)一更新共享的權重矩心。通過權重共享進行量化有效地降低了需要存儲的權重,精調(diào)共享的權重降低了需要更新的運算的數(shù)量。對一個剪枝過的 AlexNet 而言,卷積層被量化到 8 比特的、全連接層到 5 比特,大小被進一步壓縮了 3 倍。
在剪枝和量化之后,Huffman 編碼可以利用權重分布(表示為稀疏矩陣指數(shù))極為偏倚的事實,通常將一小部分峰值彼此擠在一起。Huffman 編碼平均對 AlexNet 和 VGG -16 壓縮了 20%-30%。
尤其是在移動平臺實時運行有極大延遲、能量限制的應用時,Deep Compression 基準測試基本沒有分批(批大小=1)。沒有權重共享的全連接層通??刂浦P偷拇笮?,貢獻了超過 90% 的存儲需求。它們是從 Deep Compression 受益最多的。Deep Compression 對全連接層權重的大小有超過 95% 的修剪,使得完整訓練的 DNN 可被裝載到無人駕駛汽車內(nèi)嵌處理器的 SRAM 中,因此可以低能耗地提供片上存儲推理。一種相關的硬件架構 Efficient Inference Engine 也提出了在深度壓縮模型上完成推理的方法。把壓縮過的 DNN 裝載進 SRAM 為 EIE 節(jié)省了 120 倍的能量,還有稀疏性、權重供學習和跳過零函數(shù),峰值為 102 GOPS/s 時要比 GPU 有 15 倍更快的速度。
作者 Yanchen 畢業(yè)于普林斯頓大學機器學習方向,現(xiàn)就職于微軟Redmond總部,從事大規(guī)模分布式機器學習和企業(yè)級AI研發(fā)工作。
【本文是51CTO專欄機構“機器之心”的原創(chuàng)文章,微信公眾號“機器之心( id: almosthuman2014)”】