近日,斯坦福大學DAWNBenchImageNet很新成績公布,阿里超過Google、Facebook等,摘下四個榜單的世界第一。
128卡V100上,練習ResNet50,只需要158秒就能獲得top593%的精度。
在10000張圖片的驗證集進行圖片分類,top5精度不低于93%,推理性能比第二名快5倍以上。
可以說,不論是練習的性能和成本,還是推理的性能和成本,都體現出阿里在異構計算領域具有很高級AI軟硬件一體化極致性能優化能力。
阿里是如何做到的?四項冠軍得主——阿里云異構計算團隊分享了背后的技術秘密。
斯坦福的DAWNBench,是一個端到端的深度學習模型練習和推理性能的基準測試平臺,由斯坦福大學在2021的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云服務)做了針對性深度的性能優化,能夠發揮異構加速設備的計算能力。
以NVidiaGPU為例,目前業界很快的推理引擎是TensorRT,而AIACC-Inference的計算性能比TensorRT還能獲得1.5~2.5倍的性能加速比。
含光800是阿里巴巴第一顆自研AI芯片,也是全球性能很強的AI推理芯片,主要用于云端視覺處理場景,性能打破了現有AI芯片記錄,性能及能效比全球第一。
在業界標準的ResNet-50測試中,含光800推理性能達到78563IPS,比目前業界很好的AI芯片性能高4倍;能效比500IPS/W,是第二名的3.3倍,而AIACC-Inference也能夠充分揮發含光800超高的計算能力,這是阿里云軟硬件一體化極致性能優化的典范。
阿里云異構計算云服務將GPU、FPGA、NPU等異構計算設備整合,通過云計算服務的方式對客戶提供異構計算服務。
隨著人工智能浪潮的興起,越來越多的AI計算都采用異構計算來實現性能加速,而阿里云異構計算服務,構建于云上很豐富的加速實例基礎之上,通過AIACC的算力提升,為AI計算提供普惠、彈性和觸手可得的加速計算云服務。

在圖像識別領域,很具代表性的場景是ResNet50在ImageNet上的練習。
很新公布的榜單上,AIACC-Training成為此場景下的性能與成本的世界雙項第一,展示了在分布式練習領域AIACC處于國際領先水平,能夠幫助用戶提升練習性能的同時降低所需的計算成本。
練習性能榜單新的世界紀錄,運行在128張V100(16臺異構計算云服務實例ecs.gn6e-c12g1.24xlarge)的集群之上,網絡通信為32GVPC,練習ResNet50至top5精度達到93%時間為2分38秒。
此前的世界紀錄所采用的集群規模也是128張V100,網絡通信則為100GInfiniBand網絡,是本次打破世界紀錄的32GVPC的3倍的帶寬。異構計算云服務的典型網絡配置為32Gbps帶寬的VPC網絡,為了更貼近很終用戶的場景,阿里選擇的是VPC網絡。
32GVPC網絡與前世界紀錄的網絡物理帶寬上的巨大差距是團隊面臨的重大挑戰,我們從兩個大的方向作了深入的優化:
第一個方向是從模型本身的優化上,進行超參的調整以及optimizer的改進,減少達到93%精度情況下所需要進行的迭代數,同時也要盡力提升單機的性能。
第二個方向是分布式性能優化,我們采用團隊自研的飛天AI加速引擎AIACC-Training(原Ali-Perseus-Training)作為分布式的通信庫,充分挖掘32GVPC的所有潛力。
很終兩個方向的極致優化相疊加,超越了一個看似不可能達到的性能屏障,以較低的網絡帶寬,創造了新的世界紀錄。
同時,因為分布式練習部署本身的復雜性,為了提高效率,也為了方便外部用戶重現結果,阿里團隊使用了之前開發的即刻構建的工具FastGPU,將集群的創建和分布式練習的調度全部以腳本的方式完成,可以一鍵啟動,大大加快了優化工作的效率。
未來,我們會開源基于AIACC的benchmark代碼,方便外部用戶一鍵復現結果。
分布式練習領域近年來發展迅猛,有多種可供選擇的解決方案,對于Tensorflow而言,框架本身支持PS模式以及Ringallreduce風格的分布式通信,第三方的支持有Horovod。
對于ResNet50的分布式練習,開源方案中Horovod依然是相對很優的解決方案,因此,阿里以Horovod作為對比的baseline。
分布式練習的邏輯框圖如下圖所示:
很小計算節點為單張GPU卡,每個計算節點都會從總的數據集中劃分一份數據作為本節點的練習數據,然后開始前向和后向的計算,在后向計算結束后會得到當前batch所產生的梯度。
然后在更新參數之前,需要在整個集群上進行梯度通信。HorovodAPI就是在梯度更新之前,在optimizer這個環節插入了一段多節點間的通信的流程。
AIACC-Training是阿里云自研的深度學習分布式練習通信引擎,統一支持Tensorflow、PyTorch、MxNet和Caffe,從IaaS層面提供可被集成且兼容開源的加速庫。
現在已經有多家AI和互聯網客戶在生產環境中大量部署使用,顯著提升異構計算產品的性價比,從軟件層面為客戶提供差異化的計算服務,架構如下圖所示。
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的編程模型僅支持單一的通信流進行通信,而單一的通信流的效率很低,單流的轉發能力往往只能達到10Gbps左右。
AIACC-Training從更高的通信引擎層面支持了多流,會分配不止一個通信流來進行梯度通信,每個流服務于切分出來的某個融合梯度,而后續切分的融合粒度并不依靠于當前切分的融合梯度。
因此即使多流之間的通信是完全異步運行,即使多流之間的速度不均衡,也不會嚴重影響整體的效率,在規模擴大的時候,能更好的維持很佳的網絡帶寬利用率。
和融合粒度一樣,切分的流數,也會和練習模型,以及當前的實際網絡帶寬有很強的相關性,因此無法離線的給出一個很優設定。
我們設計了自動tuning機制,將通信流數目加入了自動tuning環節,融合粒度以及切分的流數,會聯合自動tuning出很佳的參數組合。
算法層面的優化主要可以分為數據、模型、超參和優化器四個方面。
數據上,我們采用了多分辨率圖像漸進練習。這種方式不僅可以在前期利用小分辨率圖像大大提升前后向計算速度、又可以弱化練習和推理時采用不同尺寸帶來的正確率損失。
模型上,我們吸收了近期一些網絡變體的優勢,也根據很新的一些研究對BatchNorm做了微弱的調整。
超參方面我們做了很多探索,如在學習率衰減的方式上,我們沒有用很流行的stepdecay或是cosinedecay,而是采用了更直接的lineardecay,另外我們也發現warmup的步數非常重要。
優化器上,我們重新設計了優化器方案,同時吸收了SGD的泛化性優勢和自適應優化器快速收斂,使得改進后的優化器練習速度更快且正確率更高。

基于上述優化工作,我們在28個epoch共1159次迭代下完成練習并達到top593%的精度要求,而原來練習則需要90個epoch才能達到相同的精度。
結合以上所有性能優化,我們在128卡V100上,達到了158秒就能獲得top593%的精度,創造了新的世界紀錄。
在推理項目中,DawnBench競賽要求推理框架針對ImageNet的10000張圖片的驗證集進行圖片分類,分類模型的top5精度不低于93%。
在batchsize=1的配置下,計算推理每一張圖片的平均時間和平均成本。在上一個性能紀錄中,平均推理時間只有不到1ms,已經遠遠超過了人類視覺的反應速度。
在很新公布的榜單上,我們基于異構計算AliNPU云服務實例(ecs.ebman1.26xlarge)奪得了推理性能項目的第一名,比第二名快5倍以上。
同時,之前提交的推理成本第一的成績(基于異構計算GPU云服務實例ecs.gn6i-c8g1.2xlarge)目前還沒有人超越,因此在性能和成本兩個項目上均排名第一。
AIACC-Inference
在服務客戶和不斷沖擊DawnBench第一的過程中,我們也在不斷打磨異構計算服務場景下的推理優化技術,并根據客戶的實際需求研發了AIACC-Inference模型加速引擎,幫助客戶解決主流AI框架TensorFlow、PyTorch、MXNet、Kaldi等框架下的模型優化問題。
優化方法包括對模型的計算圖進行分析,將其中計算節點進行融合,減少模型中計算節點的個數,提升計算圖的執行效率。
同時提供了FP32和FP16及Int8精度的模型優化選項,可以生成多種精度下的優化模型,其中FP16和Int8精度模型可以利用NVIDIAVolta和Turing架構下的Tensorcore硬件支持,進一步提升模型推理在V100,T4GPU卡上的性能。
目前AIACC-Inference既支持常用的圖像分類和目標檢測模型,也支持Bert,StyleGAN這樣的NLP模型和GAN網絡模型。
此外,我們還深度優化了1x1、3x3、7x7卷積kernel,在AIACC-Inference中增加了新op的融合機制,比目前業界很快的TensorRT還能獲得1.5-2.5倍的性能加速比。
在上一次提交的版本中,我們將base模型換為更為精簡的ResNet26d,引領了一波風潮。
這一次為了進一步提高模型的精度并精簡模型,我們對超參數進行了調整,引入了更多的數據增強方式。通過使用了AugMix和JSDloss疊加RandAugment的組合方式,將ResNet26d模型的精度提升至93.3%,收獲0.13+%的精度收益。
我們針對AliNPU的架構特點,對推理引擎進行了相應的優化。由于AliNPU使用uint8作為存儲格式用于上傳和下載數據。
因此需要在進入engine前后插入量化和反量化操作用于恢復數據,但是Quant和Dequant這些操作在CPU上,無法使用AliNPU加速,占據了一大部分的推理時間,通過在預處理和后處理中執行這些操作將推理延遲降低至0.117ms的水平。
考慮到我們使用的推理模型較小,依照GPU的經驗帶寬4GB/s,輸入一張圖片需要將147KB的數據上傳至AliNPU中需要花費0.03ms。因此我們在框架中引入了preload機制,將數據預取入AliNPU中,將平均推理延遲進一步降低至0.0739ms。
上一篇:如何有效提升手機淘寶首頁流量
下一篇:淘寶店鋪首頁裝修初級使用教程
文章地址:http://www.brucezhang.com/article/online/12132.html