阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

量子位發表於2020-04-13
文 | 阿里雲異構計算團隊 
量子位 出品 | 公眾號 QbitAI

近日,史丹佛大學DAWNBench ImageNet最新成績公佈,阿里超過Google、Facebook等,摘下四個榜單的世界第一。

128卡V100上,訓練ResNet50,只需要158秒就能獲得top5 93%的精度。

在10000張圖片的驗證集進行圖片分類,top5精度不低於93%,推理效能比第二名快5倍以上。

可以說,不論是訓練的效能和成本,還是推理的效能和成本,都體現出阿里在異構計算領域具有世界級AI軟硬體一體化極致效能最佳化能力。

阿里是如何做到的?四項冠軍得主——阿里雲異構計算團隊分享了背後的技術秘密。

阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

這是一個什麼樣的成績?

史丹佛的DAWNBench,是一個端到端的深度學習模型訓練和推理效能的基準測試平臺,由史丹佛大學在2017的NIPS會議上釋出,之後得到業界廣泛支援。

Google、Facebook和VMWARE等世界知名公司先後加入。DAWNBench已成為人工智慧領域最具影響力、最權威的排行榜單之一。

對於AI計算而言,最重要的兩個指標是效能和成本。最新的成績公佈後,顯示了阿里雲在訓練和推理領域軟硬體一體化世界級效能最佳化能力。

阿里雲異構計算AI加速團隊透露,最重要的武器是阿里雲自研的飛天AI加速引擎AIACC、阿里雲自研晶片含光800(簡稱AliNPU)以及阿里雲異構計算雲服務。

AIACC是阿里雲自研的AI加速引擎,是業界首次統一加速Tensorflow、PyTorch、MxNet、Caffe、Kaldi等AI主流計算框架的加速引擎,其中包括訓練加速引擎AIACC-Training和推理加速引擎AIACC-Inference。

訓練加速引擎針對分散式的網路做了效能最佳化,能夠充分發揮分散式網路的通訊能力,推理加速引擎針對阿里雲異構計算雲服務(包括GPU雲服務和NPU雲服務)做了針對性深度的效能最佳化,能夠發揮異構加速裝置的計算能力。

以NVidia GPU為例,目前業界最快的推理引擎是TensorRT,而AIACC-Inference的計算效能比TensorRT還能獲得1.5~2.5倍的效能加速比。

含光800是阿里巴巴第一顆自研AI晶片,也是全球效能最強的AI推理晶片,主要用於雲端視覺處理場景,效能打破了現有AI晶片記錄,效能及能效比全球第一。

阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

在業界標準的ResNet-50測試中,含光800推理效能達到78563 IPS,比目前業界最好的AI晶片效能高4倍;能效比500 IPS/W,是第二名的3.3倍,而AIACC-Inference也能夠充分揮發含光800超高的計算能力,這是阿里雲軟硬體一體化極致效能最佳化的典範。

阿里雲異構計算雲服務將GPU、FPGA、NPU等異構計算裝置整合,透過雲端計算服務的方式對客戶提供異構計算服務。

隨著人工智慧浪潮的興起,越來越多的AI計算都採用異構計算來實現效能加速,而阿里雲異構計算服務,構建於雲上最豐富的加速例項基礎之上,透過AIACC的算力提升,為AI計算提供普惠、彈性和觸手可得的加速計算雲服務。

重新整理ImageNet上ResNet50的訓練記錄

在影像識別領域,最具代表性的場景是ResNet50在ImageNet上的訓練。

最新公佈的榜單上,AIACC-Training成為此場景下的效能與成本的世界雙項第一,展示了在分散式訓練領域AIACC處於國際領先水平,能夠幫助使用者提升訓練效能的同時降低所需的計算成本。

阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

訓練效能榜單新的世界紀錄,執行在128張V100(16臺異構計算雲服務例項ecs.gn6e-c12g1.24xlarge)的叢集之上,網路通訊為32G VPC,訓練ResNet50 至top5精度達到93%時間為2分38秒。

此前的世界紀錄所採用的叢集規模也是128張V100,網路通訊則為100G InfiniBand網路,是本次打破世界紀錄的32G VPC的3倍的頻寬。異構計算雲服務的典型網路配置為32Gbps頻寬的VPC網路,為了更貼近終端使用者的場景,阿里選擇的是VPC網路。

32G VPC網路與前世界紀錄的網路物理頻寬上的巨大差距是團隊面臨的重大挑戰,我們從兩個大的方向作了深入的最佳化:

第一個方向是從模型本身的最佳化上,進行超參的調整以及optimizer的改進,減少達到93%精度情況下所需要進行的迭代數,同時也要盡力提升單機的效能。

第二個方向是分散式效能最佳化,我們採用團隊自研的飛天AI加速引擎AIACC-Training(原Ali-Perseus-Training)作為分散式的通訊庫,充分挖掘32G VPC的所有潛力。

最終兩個方向的極致最佳化相疊加,超越了一個看似不可能達到的效能屏障,以較低的網路頻寬,創造了新的世界紀錄。

同時,因為分佈訓練部署本身的複雜性,為了提高效率,也為了方便外部使用者重現結果,阿里團隊使用了之前開發的即刻構建的工具FastGPU,將叢集的建立和分散式訓練的排程全部以指令碼的方式完成,可以一鍵啟動,大大加快了最佳化工作的效率。

未來,我們會開源基於AIACC的benchmark程式碼,方便外部使用者一鍵復現結果。

分散式訓練領域近年來發展迅猛,有多種可供選擇的解決方案,對於Tensorflow 而言,框架本身支援PS模式以及Ring allreduce風格的分散式通訊,第三方的支援有Horovod。

對於ResNet50的分散式訓練,開源方案中Horovod依然是相對最優的解決方案,因此,阿里以Horovod作為對比的baseline。

分散式訓練的邏輯框圖如下圖所示:

阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

最小計算節點為單張GPU卡,每個計算節點都會從總的資料集中劃分一份資料作為本節點的訓練資料,然後開始前向和後向的計算,在後向計算結束後會得到當前batch所產生的梯度。

然後在更新引數之前,需要在整個叢集上進行梯度通訊。Horovod API就是在梯度更新之前,在optimizer這個環節插入了一段多節點間的通訊的流程。

AIACC-Training

AIACC-Training是阿里雲自研的深度學習分散式訓練通訊引擎,統一支援Tensorflow、PyTorch、MxNet和Caffe,從IaaS層面提供可被整合且相容開源的加速庫。

現在已經有多家AI和網際網路客戶在生產環境中大量部署使用,顯著提升異構計算產品的價效比,從軟體層面為客戶提供差異化的計算服務,架構如下圖所示。

阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

AIACC-Training 作為此次Dawnbench 記錄的分散式後端,發揮了至關重要的作用。以下是我們對AIACC-Training背後的分散式最佳化作詳細的解析。

去中心化梯度協商

分散式效能的關鍵就是如何最佳化這個通訊環節的效率,對於ResNet50而言,我們需要通訊的梯度資料大約是170個,而通訊的總量大約是50MB。

這些梯度的產生時機依賴於它們各自在計算圖中的位置,計算圖中存在依賴關係的部分梯度決定了這一部分梯度被計算出來的時間先後順序。

而在計算圖中處於相互之間完全無依賴的運算元的,它們在每次計算發生的時機具有一定的隨機性。在多節點間通訊要解決的第一個問題就是需要協商梯度的同步順序。

Horovod中所採用的的方法是以0號節點為中心,與所有其它節點進行點對點的通訊確定當前所有節點上都已經就緒的梯度,然後再0號節點上確定這些就緒梯度上如何去通訊,最後將通訊策略點對點的傳送到每一個其它節點,之後根據通訊策略開始進行多機通訊。

這一點對點的協商策略,在128節點下,對0號節點,造成了一個區域性的熱點,需要通訊256次。AIACC-Training 放棄了這種中心節點的協商模式,轉而採用了去中心化的方式在128個節點間進行協商,因為128個節點實際分佈在16臺例項中,我們的最佳化可以輕易的識別這種拓撲結構,不再會在任何單個GPU卡上產生256通訊熱點。

考慮到大部分時候ready的不止一個梯度,這種最佳化還能夠同時對多個梯度進行協商,因此實際降低協商的通訊量大約一個數量級。

細粒度梯度融合

梯度協商之後,所有節點都知道了當前這個時刻可以進行通訊的梯度,接下來面臨的一個最佳化問題是,我們是要在收集到任意數量的梯度之後立刻對所有的梯度進行通訊,還是選擇某個更最佳化的組合方式來通訊。

這裡一個確定性結論是,對單個梯度進行單次通訊,通訊效率總是非常低下的,我們需要進行多個梯度的融合,然後再對融合後的更大的粒度上進行通訊。

AIACC-Training 引入了細粒度的融合策略,我們會在通訊環節去動態分析當前的通訊狀況進而選擇一種更平衡的融合策略,避免出現過大的差異。

這樣會使得每次通訊的粒度儘量均勻,減小出現大幅波動的可能。因為這種融合策略對不同的網路模型而言存在不同的最優值,因此們實現了自動最佳化的功能,會動態的調整此引數,尋找最優的融合粒度。

非同步多流通訊

底層的通訊庫還是採用NCCL來進行GPU間的資料通訊,NCCL的程式設計模型僅支援單一的通訊流進行通訊,而單一的通訊流的效率很低,單流的轉發能力往往只能達到10G bps左右。

AIACC-Training從更高的通訊引擎層面支援了多流,會分配不止一個通訊流來進行梯度通訊,每個流服務於切分出來的某個融合梯度,而後續切分的融合粒度並不依賴於當前切分的融合梯度。

因此即使多流之間的通訊是完全非同步執行,即使多流之間的速度不均衡,也不會嚴重影響整體的效率,在規模擴大的時候,能更好的維持最佳的網路頻寬利用率。

和融合粒度一樣,切分的流數,也會和訓練模型,以及當前的實際網路頻寬有很強的相關性,因此無法離線的給出一個最優設定。

我們設計了自動tuning機制,將通訊流數目加入了自動tuning環節,融合粒度以及切分的流數,會聯合自動tuning出最佳的引數組合。

模型最佳化

演算法層面的最佳化主要可以分為資料、模型、超參和最佳化器四個方面。

資料上,我們採用了多解析度影像漸進訓練。這種方式不僅可以在前期利用小解析度影像大大提升前後向計算速度、又可以弱化訓練和推理時採用不同尺寸帶來的準確率損失。

模型上,我們吸收了近期一些網路變體的優勢,也根據最新的一些研究對BatchNorm做了微弱的調整。

超參方面我們做了很多探索,如在學習率衰減的方式上,我們沒有用很流行的step decay或是cosine decay,而是採用了更直接的linear decay,另外我們也發現warmup的步數非常重要。

最佳化器上,我們重新設計了最佳化器方案,同時吸收了SGD的泛化性優勢和自適應最佳化器快速收斂,使得改進後的最佳化器訓練速度更快且準確率更高。

基於上述最佳化工作,我們在28個epoch 共1159次迭代下完成訓練並達到top5 93%的精度要求,而原來訓練則需要90個epoch才能達到相同的精度。

效能結果

結合以上所有效能最佳化,我們在128卡V100上,達到了158秒就能獲得top5 93%的精度,創造了新的世界紀錄。

重新整理推理效能記錄:比第二名快5倍以上

在推理專案中,DawnBench競賽要求推理框架針對ImageNet的10000張圖片的驗證集進行圖片分類,分類模型的top5精度不低於93%。

在batch size=1的配置下,計算推理每一張圖片的平均時間和平均成本。在上一個效能紀錄中,平均推理時間只有不到1ms,已經遠遠超過了人類視覺的反應速度。

在最新公佈的榜單上,我們基於異構計算AliNPU雲服務例項(ecs.ebman1.26xlarge)奪得了推理效能專案的第一名,比第二名快5倍以上。

同時,之前提交的推理成本第一的成績(基於異構計算GPU雲服務例項ecs.gn6i-c8g1.2xlarge)目前還沒有人超越,因此在效能和成本兩個專案上均排名第一。

阿里公開核心技術:如何摘下4項世界冠軍,推理效能比第二名快5倍

AIACC-Inference

在服務客戶和不斷衝擊DawnBench第一的過程中, 我們也在不斷打磨異構計算服務場景下的推理最佳化技術, 並根據客戶的實際需求研發了AIACC-Inference模型加速引擎,幫助客戶解決主流AI框架TensorFlow、PyTorch、MXNet、Kaldi等框架下的模型最佳化問題。

最佳化方法包括對模型的計算圖進行分析,將其中計算節點進行融合,減少模型中計算節點的個數,提升計算圖的執行效率。

同時提供了FP32和FP16及Int8精度的模型最佳化選項,可以生成多種精度下的最佳化模型,其中FP16和Int8精度模型可以利用NVIDIA Volta和Turing架構下的Tensor core硬體支援,進一步提升模型推理在V100, T4 GPU卡上的效能。

目前 AIACC-Inference 既支援常用的影像分類和目標檢測模型,也支援Bert,StyleGAN這樣的NLP模型和GAN網路模型。

此外,我們還深度最佳化了1x1、3x3、7x7卷積kernel,在AIACC-Inference中增加了新op的融合機制,比目前業界最快的TensorRT還能獲得1.5-2.5倍的效能加速比。

模型與框架最佳化

在上一次提交的版本中,我們將base模型換為更為精簡的ResNet26d,引領了一波風潮。

這一次為了進一步提高模型的精度並精簡模型,我們對超引數進行了調整,引入了更多的資料增強方式。透過使用了AugMix和JSD loss疊加RandAugment的組合方式,將ResNet26d模型的精度提升至93.3%,收穫0.13+%的精度收益。

基於含光800(AliNPU)的最佳化

我們針對AliNPU的架構特點,對推理引擎進行了相應的最佳化。由於AliNPU使用uint8作為儲存格式用於上傳和下載資料。

因此需要在進入engine前後插入量化和反量化操作用於恢復資料,但是Quant和Dequant這些操作在CPU上,無法使用AliNPU加速,佔據了一大部分的推理時間,透過在預處理和後處理中執行這些操作將推理延遲降低至0.117ms的水平。

考慮到我們使用的推理模型較小,依照GPU的經驗頻寬4GB/s,輸入一張圖片需要將147KB的資料上傳至AliNPU中需要花費0.03ms。因此我們在框架中引入了preload機制,將資料預取入AliNPU中,將平均推理延遲進一步降低至0.0739ms。

作者系網易新聞·網易號“各有態度”簽約作者


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69971123/viewspace-2685808/,如需轉載,請註明出處,否則將追究法律責任。

相關文章