天天看點

阿裡達摩院:含光NPU的算法與架構

阿裡巴巴達摩院進階研究員金榕以及含光800設計者、平頭哥研究員焦陽在2019杭州雲栖大會上,深入介紹了含光NPU的算法與架構。以下是金榕及焦陽的分享内容文字整理,經編輯。

阿裡達摩院:含光NPU的算法與架構

金榕:首先,深度學習在所有領域都發生了質的變化,一個很明顯的例子是語音識别從最初的需要依賴使用者語音到今天基本上随便做一個語音輸入都可以很成功,視覺是另外一個非常好的例子,今天深度學習可以從過去隻能幾百類或者上千類的識别到輕松幾百萬類甚至幾千萬類的識别,并且有很高的精度。

同時,今天看見在市面上有很多視覺識别公司,利用了深度學習技術,把視覺技術真正地應用在各種産品上,比如人臉識别就是非常成功的例子,非常值得一提的就是阿裡城市大腦,利用視覺技術自動監控交通和安全的行為,使得視覺分析不再依靠原先的特殊裝置,進而能夠廣泛地應用在城市的各個角落上。

自然語言和翻譯嚴格意義上是深度學習較晚進入的領域,但是今天深度學習對這兩個領域産生了質的變化。如果大家有幸用過以前的谷歌翻譯和今天的谷歌翻譯,可以看到非常本質的差別,其中最主要的原因就是由深度學習帶來的。

簡單的科普,要想把深度學習技術實用化,至少需要考慮三件重要的事情:首先要定義要學習的函數,這就是今天神經網絡做的事情;第二是需要很多資料,也就是大資料;第三就是優化的問題,需要在定義的函數空間,利用資料找到一個最合适的解,進而最佳适配資料。

今天,深度學習真正實用要至少克服兩大挑戰(從計算的角度):第一是如何讓複雜的模型更高效率和高效能運作;第二是模型需要吞吐大量資料,如何在大量資料量呑吐的情況下還能保持很好的實時性。例如,就深度語言模型而言,今天非常流行的BERT language model,幾乎成為所有自然語言處理核心的模型,而今天實際上用的Bert模型還是平均的Bert模型,但它至少有幾億的參數,如果采用大型Bert的話,至少參數要翻一個數量級。

另外一個跟自然語言處理有關的就是機器翻譯。今天機器翻譯一般都是用Deep Transformer的結構,這是一個非常深的至少60多層的結構,它為了更好捕捉上下文資訊,需要所謂的Multi-head Attention機制,這些都讓模型極其複雜,使得運作模型的計算成本非常高。

而在語音識别中,最近幾年一個大趨勢叫做End2End語音識别模型,與過去的差別是什麼呢?早期的語音識别模型都是先識别發音,形成聲音模型(Acoustic Model),然後再把發音轉變成句子(Language Model),但今天由于計算能力的大幅度增強而隻需要一個流程即可,從語音輸入直接到整個句子輸出形成End2End模型。一般來講,一個End2End的模型至少是幾十個G大小。

阿裡達摩院:含光NPU的算法與架構

說完了模型的大小,再提一下資料的問題。今天阿裡有很多場景都需要用AI技術來支撐整個業務,而今天的資料量也是過去無法比拟的。以翻譯為例,翻譯在今天阿裡很多跨界業務中都起着核心作用,包括阿裡很多海外業務都需要翻譯,就是把中國的商品翻譯成相應國家的語言。每天大概需要翻譯一億+的商品,通常需要21種語言的翻譯,每天翻譯的調用量在10億的級别,是非常大的使用量。

阿裡達摩院:含光NPU的算法與架構

諸位也許有機會用到拍立淘,這是一個非常簡單的産品,對任何有興趣的物體拍一張照片,系統會自動識别這個商品并連結到商品頁面,拍立淘大概每天有2000多萬的使用者、每天上傳圖檔至少是4億到5億,需要一個極大的計算引擎去處理這麼大量的圖檔,而且這還是線上的用量,離線處理量更大、約在百億級别的水準。

阿裡達摩院:含光NPU的算法與架構

另外一個值得一提的資料就是遙感影像資料,例如進行某地遙感資料分析,包括路網資訊、建築資訊、地貌資訊等等,浙江一個省可能就需要2個GPU、8天的時間才能把所有需要處理和識别的任務處理好,即使是一個小園區也需要好幾分鐘才能把其中的建築、地貌以及地圖識别出來。是以,可以想象如果擴充到整個地圖,将是一個海量工程。

阿裡達摩院:含光NPU的算法與架構

今天作為阿裡的AI核心團隊,面對這樣的計算挑戰,面對大資料的問題,我們做了不少工作,包括大量的推理加速工作,一個主要努力是模型壓縮,例如對Fully Connected Network(FCN)可以試着去掉一些連接配接等,進而減少計算量,提高計算的吞吐能力。

我們還在做所謂的低功耗圖像識别,這時候需要設計design神經網絡架構的搜尋方式,找到更合适的神經網絡架構,進而更好的完成低功耗識别。所有這些都有一個問題,那就是所有的改變都發生在軟體層和算法層,而如果沒有底層硬體層的支援,這些改變也不會發揮最大效果,一個最突出的例子就是Sparse Connectivity,大家可以看到如果把神經網絡算法從全連接配接Full Connected變成稀疏連接配接Sparse Connectivity的話,從理論上應該可以得到很大的加速,但是如果沒有底層硬體的支援,這樣一個加速将會受限。

由于這些原因,我們跟焦陽的團隊合作,希望能夠把上面最好的神經網絡算法結構與底層最好的硬體支援結合起來,進而傳遞一個最強大的計算引擎。是以下面請焦陽介紹含光800晶片。

阿裡達摩院:含光NPU的算法與架構

焦陽:我們團隊在設計這款NPU的時候,能夠在比較短的時間有比較大的進步,實際上在很大程度上是與阿裡巴巴達摩院算法團隊合作(金榕、華先勝、王剛等),團隊在人工智能領域有多年的積累,如果沒有這種積累就很難想象NPU會在很短的時間迅速找到方向,包括到底要怎樣的設計、要解決什麼樣的問題、要設計什麼樣的架構才能突破傳統的CPU和GPU優勢,以及怎麼樣通過軟硬體一體化的方法找到一條新的道路。

我剛加入阿裡的時候,實際上一段時間比較苦惱,就是做什麼樣晶片以及怎麼做的問題,在達摩院算法團隊的幫助下,比較快地渡過學習曲線。

算法角度不僅是一種對人工智能算法的理論研究,也做了很多實踐上的探索。入手的時候,要對神經網絡本身以及業務算法有很深入的了解,這種了解如果沒有阿裡達摩院團隊在之前的時間積累是不可能達到的。

當初在做這款NPU的時候幾個重要的思考點:一是為什麼要做一個雲上的大晶片,雲上大晶片的考慮是什麼呢?阿裡巴巴雲計算是快速增長的業務,在國内是屬于非常領先的位置,雲計算是我們的強項。是以,通過硬體設計如果能幫助雲快速地拓展業務、降低計算成本、提供海量計算能力,實際上是非常核心的一步。尤其在今天雲計算業務的前提下,需要硬核往下走,否則很難在算力提升和成本下降方面有很大的突破,這是當時考慮的一個點。

大晶片考慮是這樣的,我們希望在一個很高算力的水準上做一款NPU,而不是做一款中端或者低端的晶片,這個考慮是什麼呢?最重要的目的是阿裡巴巴的晶片不是短期的商業化或者銷售片,更多是要賦能将來真正實作技術突破,把雲計算的成本降下來。

而與算法團隊的合作,讓我們也意識到真正能把算法和軟硬體一體進行設計,必須要解決算法中的一些痛點,這些痛點是什麼呢?包括剛才金榕老師提到的像Bert這種大模型,在算力和存儲等各方面的要求非常高,傳統的計算平台很難滿足這樣的需求,是以必須要通過一個較大算力的晶片,才能真正能幫助業務往前走。

商業模式是非常重要的一個思考,我們不是單純做技術,更多是商業模式的考慮。商業模式就是怎樣通過技術帶給業務一種新的能力,這個能力是什麼呢?就是能夠實作新的功能或别人沒有做的功能或者以前因為硬體限制等種種原因沒有做的功能,要通過晶片技術幫助到業務,這是我們的想法。

另外再就是第一顆晶片為什麼要做一個推理(inference)晶片,而不是訓練(training)晶片,我們當時跟算法團隊一起讨論下來的結論是說無論從阿裡巴巴還有整個業界來看,一個很強的趨勢是當training到一定程度時,真正下一步實際上更多的是inference,尤其在雲上的inference,我們認為是非常重要的一個開發領域。

第一款NPU的主要目标業務,像城市大腦這種業務,包括視覺、視訊分析等,這些業務有一個重要的特點是在提供算力後能大幅提高計算效力,讓業務量達到一個突破,進而給雲計算增加更多的流量,無論是使用者流量還是計算量的增長,這才是真正解決通過硬體設計來幫助業務發展的目标。

第三,我們當初考慮到底做什麼樣的加速,阿裡巴巴與其它網際網路公司不一樣的地方,像傳統的網際網路公司都會做搜尋、廣告等業務,是比較傳統的網際網路模式,而阿裡巴巴除了有搜尋和廣告業務之外還有更多豐富的其它視覺類的業務,比如淘寶圖檔搜尋、智能城市、智能工廠等應用,是更多CNN類應用、視覺類的應用場景。

這些算法牽扯到CNN算法以及DNN加速,我們通過業務上的了解之後,決定了CNN的加速可能對NPU是一個重點方向,同時要保證比較好的通用性,能把晶片擴充到将來新模型的适配。

阿裡達摩院:含光NPU的算法與架構

那麼,這款晶片結合業務上的思索,主要的特點是什麼呢?

針對CNN類的,我們加速所有的卷積類,包括各種各樣的卷積、反卷積、孔洞卷積、3D卷積等,還包括插值和ROI等;這些無論在分類網絡、分割網絡還是檢測網絡,都是常用的算子,我們對這些算子做了特殊的優化。

同時我們觀察CNN網絡,從ResNet逐漸發展到一個更複雜的網絡結構,包括後來出現的Mask-RCNN和DeepLab這樣的分割網絡,從整個網絡架構做深入分析,提煉出來架構上的特定優化政策。

我們的架構裡還提到了重要的一點就是低延時和高能效,這個通過什麼實作的呢?通過資料結構進行了特定分析,讓資料在存儲和通路的時候有非常高的效率,減少對記憶體I/O的需求。這塊尤其對CNN類的卷積操作進行了很深入的優化,對資料進行複用,存取後進行指令算子融合,這樣保證在機關記憶體通路下可以大幅提升計算密度,這是主要的創新。

第二,結合與算法團隊合作的模型壓縮和量化處理,這部分基本上用一種比較創新的辦法,就是對整個全神經網絡做了量化處理,對神經網絡中間的激活函數等計算,在保持比較高精度的基礎上,在存儲上把精度降下來,這樣可以減少記憶體帶寬,這些都是我們在架構上的嘗試。

第三,在通用可程式設計上做了嘗試。當初設計架構的時候有一些新的網絡算法還沒有出現,包括後期看到的Mask-RCNN、DeepLab等,還是後來搜尋用到的新型網絡;我們在設計階段經過算法上的嘗試,保證了整個架構有一定的擴充性。

在高精度部分,混合精度也是一個主要的特色,混合精度8比特量化加速,主要處理CNN類的網絡,對其它的非CNN神經網絡需要比較高精度,我們增加了INT16的量化加速,同時有一個比較高精度的浮點向量處理器,包括激活函數、向量處理等都是用比較高的浮點運算支援的,這樣保證架構在設計完成之後,對非CNN網絡的适配,精度都可以達到需求。

阿裡達摩院:含光NPU的算法與架構

含光NPU的闆卡散熱設計,将來在阿裡雲的部署上會采用被動散熱的闆卡,這樣可以減少闆卡的體積,進一步降低成本。在伺服器裡面,展區有插着8卡NPU的伺服器已經跑起來了。含光NPU的整個版圖,可以看到是4個核的設計,整個面積接近170億半導體,是TSMC12納米的工藝,采用PCle 4.0。

我們通過比較有效的片上壓縮處理和流水線的處理,目前在PCle 3.0已經達到今天78000的ResNet成績,說明帶寬還沒有用完,還有一倍的帶寬可以用,目前已經用PCle 3跑到了峰值性能了。

大家看到含光800是4核設計,中間有指令處理器和高速互聯的4核之間的網絡,4核完全是同樣的設計,這樣設計的好處是可以在設計之後,由于良率提升的需求,可以任意四個核心有一個或者多個核心出現壞損的情況下,還不會影響整個晶片的工作,這也是我們在架構設計時特别處理的。

阿裡達摩院:含光NPU的算法與架構

每個核的設計有什麼呢?包括有本地記憶體local memory,非常接近Tensor計算核,也就是計算盡量位于存儲邊上,每次讀出來的data可以被高度複用,再做融合算子的計算,這就是為什麼含光NPU可以把功耗降到比較低的重要原因。

Tensor Array是非常有效的,我們是INT8和INT16實作的,是以它的功耗非常低,而且設計結構與Systolic Array不一樣,用FLOP數量非常少,這樣對功耗也有很大的幫助。

中間是向量處理器(Vector Engine),向量處理器實際上可以提供多到Floating 24bit的精度,是非常高的精度,中間的sequencer還帶有各種各樣的Special Function Unit(特殊函數單元),指各種各樣的激活函數,比如Sigmod、LogEXP等豐富的特殊函數,這實際上有點類似于GPU的特殊函數,是以有一定的擴充性,将來可以支援新的激活函數。

這個sequencer講一下,它是由一個高效的硬體決定,這個實際上在軟體Schedule的基礎上做了硬體的Scheduling,是一個多方式的機制,可以看到在做Tensor Core Operation的同時還會做Bias Normalization,以及Special Function激活函數,這樣可以用pipeline的方式并行處理。

阿裡達摩院:含光NPU的算法與架構

看一下Resnet50的分數,強調一下我們有兩種模式,一種叫高性能模式,一種叫高能效或者低功耗模式,圖中是在高性能模式下跑出來的成績,在這個模式下跑分數的功耗是276W,實際上比英偉達的還算低了,其它的兩個是GPU、後面兩個是比較新的AI晶片。

去年我們在設計的時候有一個小的故事,我們設立了多少倍的目标,那個目标就是最左邊的那個,是以已經達到去年說的目标了。

阿裡達摩院:含光NPU的算法與架構

我覺得更重要是機關功耗性能。一般來做高性能的晶片,往往能效比較差。這張圖告訴我們,實際上架構的有效性非常好,機關功耗下産生的性能還是比其它的幾家公司晶片有很大的優勢,這個是在高性能模式下跑出的成績。

阿裡達摩院:含光NPU的算法與架構

我們應用的場景有資料中心,将來也希望覆寫邊緣伺服器,甚至一些大型端上的應用。我們設計晶片的特點跟其它晶片公司不太一樣,我們不能有很多型号一次量産出來,是以隻有一次流片的機會,盡量把同樣的一塊晶片用到多個不同的場景,這是我們當初設計的一個理念。

解釋一下,四個核的跑在資料中心裡,如果一個核、兩個核、三個核的晶片怎麼辦呢?也可以用,就用到端上、邊緣伺服器的場景産品,實際上功耗可以降下來,如果沒有那麼多核或者不需要多核的話,可以并出來那種單核、雙核的配置,這樣可以實作很低的功耗,75W、50W甚至25W,但是算力還是相當好的,是以還是非常吸引人的。

大家看到276W可以跑到78000,但是通過降電壓降頻的話,100W多一點還可以跑到53000,這是非常有效的一個模式。是以,建議大部分的應用場景是用高能效的模式。

阿裡達摩院:含光NPU的算法與架構

講一下各種落地的業務。第一個最重要的就是城市大腦,目前在交通場景有很多交通攝像頭,大家看到一個城市或者小區裡面有上千甚至上萬個攝像頭,這樣對處理視訊的能力和算力要求非常高,含光NPU非常适用這種場景。這裡主要的業務算法是什麼呢?包括這麼幾個部分,第一部分先做目辨別别,就是目标檢測,這部分算法一般是基于SSD和Fast R-CNN、YOLO這些算法,主要是檢測圖像裡的移動物體,比如機動車、非機動車等,從圖中找出來。第二部分再做Tracking,Tracking是跟蹤物體跑到哪裡,運作軌迹是什麼樣的。目前這部分還是用CPU在做,我們現在與達摩院城市大腦團隊合作,把這一部分轉成CNN的網絡,一旦成功的話就可以把算力充分地用起來,解決CPU的瓶頸。第三部分,找到對象之後做特征提取,這部分一般是用DenseNet或者比較深的ResNet網絡,特征提取後去做ReID重新識别和分類,這部分業務算法流程基本上是這樣的。

第二個也是重要的落地業務,拍立淘。拍立淘使用者上傳商品照片,照片經過AI的處理,首先做類目檢測,判斷出它大概屬于哪一類産品,可能是鞋子帽子之類,根據類目推測的結果做主體識别,主體識别類似于剛才講的目标檢測算法,一般都是SSD或者是基于ResNet的算法。這部分做完主體檢測之後,摳圖産生出搜尋目标,搜尋目标處理後當做搜尋的主體進行特征抽取,特征抽取之後形成特征向量進行檢索,與資料庫裡的海量商品資料做比對,找到最接近的商品,然後把商品傳回給使用者,大概是這樣的流程。這裡涉及的算法,主要三步都是用CNN類神經網絡實作的,這一部分在業務上完全可以适配了,目前大概有400M(4億)的參數,現在完全可以在一個NPU闆卡上跑起來了,這是拍立淘。

廣告推薦和搜尋是下一步想去做的業務,這是兩個很典型的MLP網絡,實際上不是我們主要的優化網絡,但這一步可以驗證精度各方面是否達到當初的設計要求,這是我們在積極嘗試的兩個業務。

智能服裝設計是做潮流分析,通過海量資料分析出服裝的流行趨勢,可以做服裝設計。這用到的是一種對抗生成式的網絡GAN,GAN網絡現在用得比較火的是換臉遊戲,裡面用到的也是相同的算法。我們當初在設計的時候也不知道有這樣類型的神經網絡,我們最近進行适配的時候發現基本上都沒有什麼問題,都可以跑起來,而且性能已經達到對應GPU的大概十幾倍,我們原來設計的是ResNet這樣類型,基本上在GAN網絡上也可以達到類似的性能了。

其它幾個包括盒馬,這些都是智能店的應用,智能醫療也就是大量圖檔處理、進行醫療的分析,這些都是一些典型的圖像處理應用。

最後一個就是彈性裸金屬,把NPU放到雲上去,通過雲售賣NPU技術。

阿裡達摩院:含光NPU的算法與架構

這個是我們的軟體棧,目前的應用包括視覺類、自然語言處理、推薦、搜尋這樣的應用,主流神經網絡架構都支援了;離線做編譯、優化、量化處理;以及非常高效的驅動程式,對主流架構對接做執行。

阿裡達摩院:含光NPU的算法與架構

總結一下Resnet的成績,特别想提到一點是Mask R-CNN的demo(非常酷),可以跑4個video stream的Mask R-CNN,可以全速在跑,是非常不容易的,大家都知道其他GPU,要達到這個是很不容易的。

我們現在在落地,希望在今年年底的時候能開始量産,大概給大家介紹一下這個情況。謝謝大家!(文/甯川)

繼續閱讀