隨著人工智慧發展如火如荼,我們看到Nvidia的GPU成為了人工智慧時代的基礎設施,為人工智慧服務提供必不可少的算力。本文為大家回顧Nvidia走上人工智慧加速硬體主導者位置的歷程,希望能給大家帶來一些啟示。Nvidia的誕生還要追溯到多媒體PC機時代。在上世紀90年代,PC機走向了多媒體時代,其中3D遊戲又是多媒體時代最閃耀的明星。為了能加速3D遊戲的執行,影像處理晶片就成了多媒體PC時代的一種熱門新品類。最初,加速3D遊戲執行在常規的顯示卡之外還需要一張3D加速卡,而3D加速卡的首創者——3dfx也憑藉著其Voodoo系列加速卡成為了當時的3D加速引領者。看到了3D顯示這個巨大機會的並不只3dfx一家公司。Nvidia於上世紀90年代中成立,公司的目標市場就是顯示市場。1998年,Nvidia推出了TNT系列顯示卡,擁有了與3dfx同臺競技的資格。之後,3dfx的後幾代顯示卡產品存在各種問題,而Nvidia卻在2000年順勢拿出了同時支援3D加速和transformation and lighting (T&L,指一系列影像處理中需要的座標和光照變幻運算)的GeForce系列顯示卡,在效能上大幅領先3dfx,並最終奠定了其遊戲顯示卡領域的霸主地位。事實上,在GeForce之前,顯示卡並不負責繁重的T&L計算,而必須由CPU來做這些運算;GeForce是第一個用顯示卡支援T&L來大幅提升系統效能的顯示卡,並且Nvidia認為顯示卡支援了之前必須由CPU來完成的工作,因此提出了GPU這個概念。可以說GeForce是Nvidia最重要的產品之一,同時我們也可以從GeForce的誕生看到Nvidia並不是拘泥於產品傳統品類定義的公司,而是會積極地拓寬其產品的應用範圍。這樣的公司基因也直接造就了之後Nvidia在人工智慧領域的領先地位。在推出GPU之後,Nvidia順利地佔領了遊戲顯示卡市場的主導地位。遊戲市場雖然不小,但是其增長天花板也較低。因此,Nvidia也在嘗試各種不同的市場機會。在2000年左右,學術界對於使用GPU做通用計算(GPGPU)產生了興趣。當時,主要面向執行通用演算法的CPU是執行科學計算的主力,但是CPU為了能在通用演算法上都有較好的效能,因此很多晶片面積事實上用在了片上記憶體和分支預測等控制邏輯,而真正用於計算的單元並不多。相反,GPU架構中的控制邏輯較為簡單,絕大多數晶片面積都用於渲染、多邊形等計算。學術界發現,科學運算中的矩陣等計算可以很簡單地對映到GPU的處理單元,因此能實現非常高的計算效能。
當時,GPGPU最主要的瓶頸在於難以使用。由於GPU是面向影像應用而開發,因此要在其程式設計模型中支援通用高效能運算並不容易,需要許多手工除錯和編碼,因此造成了很高的門檻,能熟練使用的人並不多。另一方面是廠商對於GPGPU應用的態度。事實上,當時GPGPU的研究主要在學術界,在工業界並沒有很多人清楚GPGPU未來能有多少價值,不少公司雖然也有研究GPGPU的團隊,但是大多僅僅是做一些評估和嘗試性的工作,並沒有認真打算大規模應用。Nvidia對於GPGPU卻是抱著另一種態度。在2006年,Nvidia推出了Tesla架構。在這個架構中,Nvidia一改之前使用向量計算單元做渲染的做法,而是把一個向量計算單元拆成了多個標量計算渲染單元,並稱之為“unified shader”。這樣一來,Tesla GPU的渲染單元除了在渲染效能更強之外,也更適合做通用計算了。在2007年,Nvidia順勢推出了CUDA系列程式設計環境。CUDA是GPGPU領域的一個創舉,透過CUDA可以大大降低用GPU做通用計算的難度,因此大大降低了GPGPU應用的門檻。
究竟是Nvidia之前就策劃要做GPGPU,因此才推出Tesla架構以及CUDA,還是Nvidia在推出Tesla架構之後為了充分發揮其潛力而順便推出CUDA,我們今天不得而知。但是,我們能看到的是,CUDA首先在GPGPU領域引起了很大的反響,因此在第二年有了開源版本的OpenCL來在其他GPU上實現類似的功能;另一方面,我們看到Nvidia在GPU領域最大的競爭對手AMD在當時對於GPGPU並沒有太多動作,以至於一年後的OpenCL事實上是蘋果而非由AMD發起的。在當時,蘋果希望能在各種裝置(尤其是移動裝置)上充分利用GPU來完成計算,因此發起了OpenCL組織,參與的公司除了蘋果之外還有ARM、AMD、Nvidia等。然而,為了相容性考量,OpenCL並無法在所有GPU上都實現最優的效能,因此相比於專注於給自家GPU做最佳化的CUDA來說效能差了一截。AMD在當時並沒有自己提出一個與CUDA爭鋒相對的協議而只是選擇加入OpenCL組織也證明了當時AMD對於GPGPU的觀望態度。AlexNet + Nvidia GPU引領了人工智慧風潮
時間走到了2012年,Nvidia在經過移動市場的失望後,迎來了新的藍海市場。2012年的重要性在於,深度學習開山鼻祖之一的Geoff Hinton的學生Alex Krizhevsky成功訓練出了深度卷積神經網路AlexNet,並憑藉該網路在影像分類識別領域大幅提升了效能(15%的錯誤率,比第二名真正高出了十個絕對百分點),從而成為人工智慧的標誌性事件。在2012年之前,絕大多數影像分類任務都是使用類似支援向量機(SVM)這樣的經典演算法實現。SVM這樣的演算法非常適合應用在資料量較少的應用中。然而,隨著網際網路時代的來臨,人們積累的資料量遠遠大於之前的時代,而在擁有大量資料的情況下,神經網路就成了理論上更好的選擇。然而,在當時訓練一個深層神經網路還存在一個挑戰,就是算力問題。使用普通的CPU在ImageNet上訓練一個深度學習網路需要數年的時間,因此無法實用。而Alex Krizhevsky的創舉在於使用Nvidia GPU成功訓練了一個效能有突破性提升的深度神經網路,從而開啟了新的人工智慧時代。
AlexNet效能的大幅提升使得人工智慧在影像分類等有大量實際應用的場景達到了可用的效能,而Nvidia GPU則伴隨著深度學習模型訓練和推理所需要的大量算力成為了人工智慧時代的新基礎設施。這也可以說是Nvidia數年前在GPGPU領域投資所收穫的回報:如果沒有CUDA這樣的高效能GPGPU程式設計工具,或許AlexNet就無法被訓練出來,而人工智慧時代可能就無法被開啟。而在之後,隨著深度學習網路熱潮的興起,高校和工業界在越來越多的場景使用深度學習——目前在影像、語音、自然語言處理、推薦系統等大量場景深度學習都已經落地。隨之而來的是對於GPU算力的進一步需求,而Nvidia也是順勢而為,在最近幾年接連推出為了人工智慧而最佳化的GPU以及相關配套軟體資源(用於推理的TensorRT,基於CUDA的高效能深度學習加速庫CuDNN,CuBLAS等等),從而讓自己在人工智慧時代的地位更加穩固。反觀AMD,事實上由於AMD一直處於追趕階段,因此遲遲不敢下決心去做一些新的嘗試。當年GPGPU領域AMD投入不足,導致Nvidia的CUDA佔據了先機。在效能上,AMD所依賴的通用OpenCL效能據調查比起CUDA要差30%以上。更關鍵的是AMD的人工智慧開發者生態一直做不起來,因為OpenCL效能差且使用不方便,導致使用OpenCL的開發者少,開發者少就更少人能為OpenCL開發方便的介面和共享設計資源,這進一步導致OpenCL開發社群人氣不足,有GPGPU開發需求的開發者都會把Nvidia的CUDA作為其第一選擇。在GPU硬體上,直到Nvidia已經推出專門針對人工智慧最佳化的TensorCore之後,AMD對於要不要在GPU上加入對人工智慧的支援仍然遲疑不決,一直到2018年才推出對人工智慧的相關支援,因此導致在人工智慧領域遠遠落後了。最後必須指出的是,一直以來AMD的思路都是價效比,而人工智慧的主要客戶卻是對於價格不怎麼敏感的企業客戶,因此AMD之前的低價戰術也沒辦法打動這些客戶。目前,Nvidia已經佔據了人工智慧算力領域的主導位置。在資料中心領域,即使有一些初創公司推出訓練和推理加速晶片,但是想要取代Nvidia需要相當長的時間。首先,大規模部署晶片對於產品的可靠性有相當高的需求,而且分散式系統是一個系統工程,需要晶片在各類指標上(不只是算力,還包括通訊,介面頻寬等)都達到優秀的指標,光這一點就需要初創公司相當多的時間去打磨。此外,Nvidia更高的壁壘在於開發者生態,需要開發出一個易用的程式設計模型和相關編譯器的難度並不亞於設計晶片,而要孵化開發者生態則需要更多的時間。我們認為,至少在未來3-5年內,Nvidia在資料中心的地位難以被撼動。但這並不意味著Nvidia在人工智慧時代就可以高枕無憂。Nvidia 的軟肋仍然在於其移動端——隨著人工智慧從雲端逐漸走向邊緣和終端,邊緣和終端類的AI加速晶片或許是其他公司的機會。Nvidia之前推出的終端/邊緣類產品並不算特別領先或成功,例如Jetson系列終端GPU的能效比並不領先,晶片架構也是沿用數年前的設計。我們認為,AI加速在終端的市場份額可能會佔據總體AI晶片市場不小的份額,如果Nvidia無法抓住終端AI市場,那麼其最終在整個AI市場的份額可能會被侷限在雲端資料中心。