來源 | 老石談芯(ID: laoshi_tanxin)
目前,全世界超過90%的數據都是在過去的兩三年之內產生的。隨著人工智慧、自動駕駛、5G、雲計算等各種技術的不斷發展,海量數據都將會繼續源源不斷的產生。預計到2025年,數據總量將比現在增長10倍。在這些技術的發展中,很大的一部分都基於對大數據的研究和分析。正因為如此,很多人就形象的將數據比喻為人工智慧時代的石油。
為了對海量的數據進行處理,基於傳統CPU的計算結構已經很難滿足需求了,我們需要更加強大的硬體和晶片,來更快、更好的完成這些工作。
此外,我們也需要更好的方法,比如使用各種人工智慧的算法和模型,來幫助我們進行數據的分析和處理,並得到有意義的結論。如果把這兩者結合起來,就產生了各種各樣的人工智慧晶片。
在這篇文章里,我們來一起看一下關於人工智慧晶片的幾個有意思的事情。我想討論的重點,是在實際的工程實踐和應用場景里,如何對人工智慧加速晶片進行合理的評價和選擇,以及各種不同的AI晶片的優缺點都有哪些。我會給大家介紹一個簡單的思維框架,幫助大家理解和思考。
討論:一個前提條件
在開始討論之前,我們首先要明確一些討論的前提條件,這些對於接下來的分析至關重要。很多人常犯的一個邏輯謬誤,就是在討論問題的時候缺少一個特定的討論範圍,這個英文叫做context,中文通常翻譯成語境,或者上下文。
說白了,這個就是我們在討論問題的時候,要圈定一個討論的範圍,大家都在這個圈圈裡討論問題。這就像拳擊或者格鬥比賽一樣,要在那個擂台上比拼,不能跑到台下打。否則的話,就會像老郭和於大爺說的那樣:
你和他講道理,他和你講法制;
你和他講法制,他和你講政治;
你和他講政治,他和你講國情;
你和他講國情,他和你講文化;
你和他講文化,他和你講道理......
同樣的,對於我們要討論的人工智慧晶片,其實有很多不同的應用領域。從這個角度來看,AI晶片可以分成移動端和伺服器端兩大類,也有很多人把兩類稱為終端和雲端。
事實上,在這兩類應用中,人工智慧晶片在設計要求上有著本質區別。比如,移動端更加注重AI晶片的低功耗、低延時、低成本,而部署在雲端的AI晶片,可能會更加注重算力、擴展能力,以及它對現有基礎設施的兼容性等等。
對於這兩類人工智慧晶片,我們很難直接進行比較。這就好像一棵大樹,它的樹幹負責支撐起這顆樹,並且還能輸送各種營養物質。它的樹葉就負責進行光合作用,並生產營養物質。但是我們很難比較樹幹和樹葉,究竟誰更有用。
在這篇文章里,我們要把討論的範圍縮小,只關注部署在伺服器端的人工智慧晶片的相關問題。
此外,我們還需要明確一下具體討論哪些AI晶片。這篇文章將主要對比四種最常見的晶片:CPU、GPU、ASIC和FPGA。其他的一些相對小眾的晶片種類,比如類腦晶片和量子晶片等等,就不列入討論的範圍了。
分析:一個思維框架
我們現在明確了討論的領域和對象,也就是部署在伺服器端的四種常見的晶片,接下來應該確定的是,通過什麼樣的方式來衡量這些AI晶片的優缺點。
在這裡給大家介紹一個我們在工程實踐里經常使用的思維框架。具體來說,當我們考慮在數據中心裡大量部署AI晶片的時候,通常需要考慮以下幾個重要的因素。
首先就是算力,也就是晶片的性能。這裡的性能有很多方面,比如這個晶片做浮點或者定點數運算的時候,每秒的運算次數,以及這個晶片的峰值性能和平均性能等等。
但是,算力或者性能其實並不是衡量AI晶片好壞的唯一標準。事實上,在很多時候它甚至不是最重要的標準。那麼,還有哪些考慮的因素呢?
在這個思維框架里,一共有五個衡量因素。除了性能之外,還有靈活性、同構性、成本和功耗四點。
其中,靈活性指的是這個AI晶片對不同應用場景的適應程度。也就是說,這個晶片能不能被用於各種不同的AI算法和應用。
同構性指的是,當我們大量部署這個AI晶片的時候,我們能否重複的利用現有的軟硬體架構和資源,還是需要引入其他額外的東西。舉個簡單的例子,比如我的電腦要外接一個顯示器,如果這個顯示器的接口是HDMI,那麼就可以直接連。但是如果這個顯示器的接口只有VGA或者DVI或者其他接口,那麼我就要買額外的轉接頭才行。這樣,我們就說這個設備,也就是顯示器,它對我現有系統的同構性不好。
成本和功耗就比較好理解了。成本指的就是錢和時間,當然如果細摳的話,還有投入的各種人力物力,以及沒有選擇其他晶片帶來的機會成本等等。不過歸根到底還是錢和時間。成本包含兩大部分,一部分是晶片的研發成本,另一部分是晶片的部署和運維成本。
功耗就更好理解了,指的就是某種AI晶片對數據中心帶來的額外的功耗負擔。
比較:4種晶片,5個維度
現在我們知道了這個思維框架里的五個重要元素,那麼我們就能對前面提到的四種晶片,也就是CPU、GPU、ASIC和FPGA做一個定性的比較了。這裡聲明一下,這些對比僅代表我個人的觀點,也歡迎大家在留言里和我交流你的想法。
CPU
對於CPU來說,它仍然是數據中心裡的主要計算單元。事實上,為了更好的支持各種人工智慧應用,傳統CPU的結構和指令集也在不斷疊代和變化。
比如,英特爾最新的Xeon可擴展處理器,就引入了所謂的DL Boost,也就是深度學習加速技術,來加速卷積神經網絡和深度神經網絡的訓練和推理性能。但是相比其他三種晶片,CPU的AI性能還是有一定差距。
CPU最大的優勢就是它的靈活性和同構性。對於大部分數據中心來說,它們的各種軟硬體基礎設施都是圍繞CPU設計建設的。所以CPU在數據中心的部署、擴展、運維,包括生態其實都已經非常成熟了。它的功耗和成本不算太低,但也還在可接受的範圍內。
GPU
GPU有著大規模的並行架構,非常適合對數據密集型的應用進行計算和處理,比如深度學習的訓練過程。和CPU相比,GPU的性能會高几十倍甚至上千倍。因此業界的很多公司,都在使用GPU對各種AI應用進行加速。
GPU的另外一個優勢,是它有著比較成熟的編程框架,比如CUDA,或者OpenCL等等,這是GPU在AI領域得到爆發最直接的推動力量之一,也是GPU相比FPGA或者ASIC的最大優勢之一。
但是,GPU的最大問題就是它的功耗。比如,英偉達的P100、V100和A100 GPU的功耗都在250W到400W之間。相比於FPGA或ASIC的幾十瓦甚至幾瓦的功耗而言,這個數字顯得過於驚人了。
而對於神經網絡的訓練來說,它往往需要大量密集的GPU集群來提供充足的算力。這樣一來,一個機櫃的功耗就可能會超過幾十千瓦。這就需要數據中心為它修改供電和散熱等結構。比如傳統的數據中心大都靠風扇散熱,但如果要部署GPU,就可能要改成水冷散熱。對於大數據中心來說,這是筆巨大的開銷。
伴隨著高功耗,更大的問題實際是高昂的電費開支。要知道,現代數據中心的運維成本里,電費開支占40%甚至更高。所以,對於GPU在數據中心裡的大規模部署,我們通常考慮的是它所帶來的性能優勢,能否抵消它帶來的額外電費。
ASIC
ASIC就是所謂的人工智慧專用晶片。這裡的典型代表,就是谷歌阿爾法狗里用的TPU。根據谷歌的數據,TPU在阿爾法狗里替代了一千多個CPU和上百個GPU。
在我們的衡量體系里,這種AI專用晶片的各項指標都非常極端,比如它有著極高的性能和極低的功耗,和GPU相比,它的性能可能會高十倍,功耗會低100倍。
但是,研發這樣的晶片有著極高的成本和風險。與軟體開發不同,晶片開發全程都需要大量的人力物力投入,開發周期往往長達數年,而且失敗的風險極大。放眼全球,同時擁有雄厚的資金實力和技術儲備以進行這類研發的公司,大概用兩隻手就能數的出來。也就是說,這種方案對於大多數公司而言並可能沒有直接的借鑑意義。
此外呢,AI專用晶片的靈活性往往比較低。顧名思義,包括谷歌TPU在內的AI專用晶片,通常是針對某種特定應用而設計開發,因此它可能很難適用於其他的應用。在使用成本的角度,如果要採用基於ASIC的方案,就需要這類目標應用有足夠的使用量,以分攤高昂的研發費用。同時,這類應用需要足夠穩定,避免核心的算法和協議不斷變化。而這對於很多AI應用來說是不現實的。
值得一提的是,我國在人工智慧專用晶片領域湧現出來了一波優秀的公司,比如寒武紀、地平線,還有之前被賽靈思收購的深鑒科技等等。受篇幅限制,關於這些公司的具體產品和技術,這裡就不再展開了。
FPGA
最後再來說一下FPGA。我個人認為,FPGA能夠在這些性能指標中達到比較理想的平衡。當然了,我目前的職業就和FPGA緊密相關,所以這個結論有屁股決定腦袋之嫌,謹供大家借鑑。
在性能方面,FPGA可以實現定製化的硬體流水線,並且可以在硬體層面進行大規模的並行運算,而且有著很高的吞吐量。
FPGA最主要的特點其實是它的靈活性,它可以很好的應對包括計算密集型和通信密集型在內的各類應用。此外,FPGA有著動態可編程、部分可編程的特點,也就是說,FPGA可以在同一時刻處理多個應用,也可以在不同時刻處理不同的應用。
在數據中心裡,目前FPGA通常以加速卡的形式配合現有的CPU進行大規模部署。FPGA的功耗通常為幾十瓦,對額外的供電和散熱等環節沒有特殊要求,因此可以兼容數據中心的現有硬體基礎設施。
在衡量AI晶片的時候,我們也經常使用性能功耗比這個標準。也就是說,即使某種晶片的性能非常高,但是功耗也非常高的話,那麼這個晶片的性能功耗比就很低。這也是FPGA相比GPU更有優勢的地方。
在開發成本方面,FPGA的一次性成本其實遠低於ASIC,因為FPGA在製造出來之後,可以通過重複編程來改變它的邏輯功能。而專用晶片一旦流片完成就不能修改了,但是每次流片都會耗資巨大。這也是為什麼包括深鑒在內的很多AI晶片的初創企業,都使用FPGA作為實現平台的原因。
所以說,相比其他硬體加速單元而言,FPGA在性能、靈活性、同構性、成本和功耗五個方面達到了比較理想的平衡,這也是微軟最終選用FPGA,並在數據中心裡進行大規模部署的主要原因,有興趣的朋友,可以看之前的文章《FPGA在微軟數據中心的前世今生》 。
結語
在這篇文章里,我們討論了人工智慧晶片的主要分類,比如按應用場景,可以分成伺服器端和移動端兩類。我們介紹了四種可以用來執行人工智慧應用的晶片,分別是CPU、GPU、ASIC和FPGA。我們還根據一個思維框架,從性能、靈活性、同構性、功耗、成本五個方面,分別衡量了這四種晶片的優缺點。
事實上,對於這個問題並沒有一個唯一的答案。我們只有根據特定的「Context」,也就是具體情況具體分析,才能找到最適用於某個應用的AI晶片。而這種理性的思維方式,其實也適用於我們日常工作和生活的各種事情,這也是本文想要傳達的最重要的內容。
(註:本文僅代表作者個人觀點,與任職單位無關。)