李實
對國內的高科技企業(yè)而言,在集成電路產品上發(fā)力已經不是什么新聞了。作為這類企業(yè)代表之一的百度,近年來也在自研處理器的道路上越走越快。2020年9月15日,“萬物智能——百度世界2020大會”上,百度宣布了昆侖1 Al處理器已經量產的消息,那么這款名為昆侖1的Al處理器在性能和架構上的情況究竟是怎么樣的呢?我們就和你一起來了解這些內容。
百度在云計算和人工智能方面有深入的研究,并持續(xù)進行較高的產業(yè)投入。2018年,百度宣布將研發(fā)自家首款AI芯片,代號“昆侖”。2019年12月,百度宣布選擇三星作為代工伙伴,準備量產昆侖芯片。在2020年的“百度世界2020”大會上,百度宣布昆侖1芯片已經量產,正在研發(fā)昆侖2芯片,其中昆侖1芯片已經在百度搜索以及云計算用戶上部署了2萬片,預研的昆侖2芯片計劃采用7nm工藝,性能將達到昆侖1的3倍以上,計劃2021年上半年量產。一路走來,百度的昆侖芯片從紙面到實際,從0到2萬片,那么,百度昆侖芯片有哪些值得關注的地方呢?
從Al開始百度研發(fā)AI芯片的開始
百度在AI芯片方面的投入是從關注AI的多元化應用和多元化場景開始的。百度認為在之前的大型機和小型機時代,人們可以用定制處理器解決問題。在個人電腦時代,x86是絕對的主流。在移動計算時代,ARM和x86在一定程度上和諧共存。但是現(xiàn)在的時代應用場景更多、更為復雜,尤其是AI計算的出現(xiàn),需要大量的算力,而傳統(tǒng)的CPU和GPU完成AI類型的計算都存在效能或者速度上的問題。因此,在這種情況下,面對海量數(shù)據(jù)的AI計算,百度決定開發(fā)專門的AI通用處理器。
回顧歷史來看的話,百度在201 0年甚至更早就切入了處理器研發(fā)領域。在2010年,百度推出了FPGA平臺上的AI芯片,計算能力為300GFLOPS,并在2011年小規(guī)模部署。2014年的時候,百度推出了計算效能為1TFLOPS的芯片并在2016年提升至2TFLOPS。
百度為AI通用芯片的開發(fā)設定了三個目標,那就是面向主流市場、開拓新市場,同時盡可能支持更多的AI應用程序和場景。這就意味著百度的AI通用處理器不光是一個芯片,還要提供相應的軟件和編譯器等環(huán)境。百度認為這種通用AI芯片面臨的挑戰(zhàn)包括大量的內存和計算的訪問模式需要支持,包括主流計算框架內數(shù)千種不同的算法、混合了張量、矢量和標量的計算模式以及對內存的順序和隨機訪問等。另外,一款長壽的AI通用處理器還要考慮到算法和應用隨著時間快速變化,以及開發(fā)人員對硬件和軟件環(huán)境的熟悉程度等。
鑒于此,百度也提出了一系列的解決方案,致力于提供一個通用的、具有靈活的、可編程性相當優(yōu)秀的同時也是高性能的AI處理器產品。
昆侖K200芯片百度Al計算的一小步
本次發(fā)布的昆侖芯片的型號分別是昆侖K100和昆侖K200,兩者架構相同,但是前者K100性能和功耗等只有后者K200的一半,本文以百度昆侖K200為例進行介紹。百度昆侖K200整體架構采用了百度之前研發(fā)的XPU架構,支持INT 4、INT 8、INT 16以及FP32、FP16等不同格式的數(shù)據(jù)計算。其計算性能在INT 8數(shù)據(jù)格式下?lián)碛?56TOPS,在INT/FP 16下縮減至64TOPS,在INT/FP32格式下縮減至16TOPS。另外,芯片通過HBM和2.5D封裝技術包含了16GB、512GB的本地存儲。制造工藝方面采用三星14nm工藝,TDP功耗為150W,外部接口支持PCle 4.0 x8規(guī)范。
百度的XPU架構也是AI計算業(yè)界的老面孔了,在2017年就已經發(fā)布上線。不過當時百度和賽靈思一起合作,采用了FPGA的方式實現(xiàn)。百度當時選擇FPGA的原因主要是看中了FPGA本身的高效率和可編程性,百度宣稱XPU則關注計算密集型、基于規(guī)則的多樣化計算任務,希望提高效率和性能,并帶來類似CPU的靈活性,因此FPGA是比較合適的平臺。
在架構設計方面,XPU采用的是眾多微核心、搭配定制邏輯以及可以根據(jù)應用程序配置計算資源的方式。在一個XPU核心中,一個擁有多接口的內存控制器( Multi-PortMC)位于處理器核心位置,周圍掛接了包括DDR4內存、DMA總線在內的各種數(shù)據(jù)存儲和傳輸設備,其主要計算單元是眾多微核心( Tiny Cores),另外還有可定制的邏輯單元(Customized logic)。眾多的微核心能夠實現(xiàn)基于指令集的可編程性,并且沒有Os、緩存、域或者特定的ISA約束,能夠靈活的服務于各種不同的計算負荷。在定制邏輯方面,整個邏輯是硬件可重構的,這也是FPGA的鮮明特性之一。此外,百度還提到XPU可以根據(jù)不同的計算任務對計算核心和邏輯核心的比例進行重新定義,這樣能夠在不同的任務中都獲得較高的效能。
在XPU的微核心部分,百度將32個微核心定義為1個核心簇(Core Cluster),核心簇的數(shù)量多少取決于芯片的計算規(guī)模要求。每個核心簇通過雙向256bit的帶寬和多接口內存控制器聯(lián)系。核心簇內,除了計算核心(被稱為Core)外,還包含了一個特殊功能加速單元和所有核心共享的32KB緩存。百度特別提到,32個計算核心的數(shù)據(jù)都已經本地化并且多核心共享,這樣更加方便控制和布線。
進一步深入每個計算核心也就是Core的話,百度宣稱Core采用了類似MIPS的指令設計,擁有4級流水線,分別是前端的BTH/Fetch/l_buf,以及decode Q、decode/RF后,進入issue Q,然后進入ALU/load/store進行計算或者存取處理,隨后交由WB Q進行結果處理。整個流水線級數(shù)短、延遲低。另外,每個Core還配備了16或者32KB的私有臨時緩存,用于暫存數(shù)據(jù),提高效能。
在新的昆侖K200上,百度還是采用了之前在FPGA上使用成熟的XPU架構,但是將其升級到了XPU v2版本。百度宣稱XPU v2版本的設計思想和之前的產品是一致的,但是ASIC化后整體性能更為強大。百度還給出了一個簡單的架構圖,下面本文簡單解析—下。
XPU v2核心內部包含計算單元、PCIe總線控制器、HMB控制器和相關連接總線。一個XPU v2核心內部有2個計算單元,分別是Compute Unit 0和Compute Unit1。繼續(xù)深入的話,每個計算單元內部包含了4個XPU-SDNN核心和4個XUP-Cluster核心,還有一個16MB緩存。所謂SDNN,是指“spacedisplacement neural network”,也就是空間位移神經網絡,這種神經網絡算法通常用于圖形圖像的查找,或者在一個大型圖像中查找關鍵內容,由于其計算過程涉及空間上的位置改變,因此又被稱為空間位移神經網絡。百度特別提到,XPU-SDNN可以進行軟件定義,針對張量和矢量計算而設計。另外則是XPU-Cluster,針對標量和矢量計算設計,采用的是常見的SIMD指令,每一個XPU-Cluster中擁有前文提到的16個微核心。在數(shù)據(jù)存儲方面,每個HBM控制器對應1個計算單元,提供8GB的HBM存儲空間和256GB/s的數(shù)據(jù)帶寬。
除了硬件架構外,昆侖K200在軟件上也做出了一些優(yōu)化。昆侖K200支持不同的框架協(xié)議,包括Tensorflow、Pytorch、國產自主的Paddle Paddle等,還提供了名為XPU ClC++的編程語言,用于用戶操作編程并給出新的操作。另外,在庫文件方面,百度提供了專用于昆侖K200的深度學習庫,支持深度學習中常用的各種API等。在整個軟件架構方面,百度給出的簡圖顯示,硬件之上百度設計了昆侖驅動,再向上則是昆侖runtime/complier文件,再向上則分為庫文件、用戶自用Kernel以及圖像編譯器,最頂層則是應用程序、框架文件和開發(fā)人員界面等。
目前,昆侖K200的軟件生態(tài)已經有了一定的基礎。昆侖K200芯片目前能夠全面支持語音、圖像、NLP模型以及自定義模型等,即使是百度之外,也有了約10個客戶在使用或者部署,整體表現(xiàn)還是不錯的。性能比拼勝過英偉達T4
最后則是喜聞樂見的性能對比測試。百度昆侖K200選擇的競爭對手是英偉達T4。根據(jù)百度的數(shù)據(jù)來看,昆侖K200在百度設定的測試場景下,均以較大幅度領先英偉達T4,包括專注于目標檢測算法的YoIoV3,以及常用于自然語言處理的BERT,還有用于搜索的真實引擎模型,以及用于目標檢測和像素級分割的Mask R-CNN等,可以說基本涵蓋了百度這類用戶在日常生活中所需要的AI操作。百度還宣稱,目前昆侖K200已經在線上部署,只要用戶通過百度云申請就可以調用昆侖K200了。另外值得一提的是,2019年12月,百度宣布正在配合飛騰處理器進行產品適配,將配合飛騰處理器形成國內自主可控的AI加速平臺,這也是國內AI加速設備國產化方面比較重要的成就了。
最后,本文依舊照例來對百度昆侖K200的產品進行一些總結。從整個昆侖K200的發(fā)展歷史、架構設計以及百度對其性能的相關介紹來看,昆侖K200還是達到了百度之前確立的設計目標的,那就是成為一款通用的、具有靈活的、可編程性相當優(yōu)秀的同時也是高性能的AI處理器,其在百度各類測試和應用中也體現(xiàn)出了比較好的效果。但是,昆侖K200還有巨大的改進空間和提升空間,比如相比英偉達最先進的A100,昆侖K200在工藝、規(guī)模、計算能力、計算功能、數(shù)據(jù)格式支持、軟件支持等方面差距還比較遠,尤其是對諸如目前流行的BF類型的數(shù)據(jù)格式、混合精度支持、對稀疏性計算的支持等,都尚未在這款產品中有所體現(xiàn)。當然作為一款2018年開始研發(fā)、2020年大規(guī)模量產的產品,又是企業(yè)首款ASIC類型的芯片來說,的確沒有必要太過苛責,但是我們依舊希望百度在下一代昆侖芯片中能夠做出更大的突破和更多的技術創(chuàng)新。根據(jù)百度的消息,下一代昆侖芯片將具有高速片間互聯(lián)功能,能夠大大降低數(shù)據(jù)傳輸延遲,并且還擁有從云推理、云計算到邊緣計算的多款細分型號,有望覆蓋更多、更大的市場,值得用戶和業(yè)界期待。