NVidia最近因為兩件事情經常上新聞,一是收購ARM,二是RTX 30顯卡推出。這家公司主要幹兩件事,一是賣玩遊戲的顯卡GPU(2C生意),二是賣AI和HPC(高性能計算)用途的計算GPU(數據中心生意)。今天我們就談一下這個數據中心生意。
數據中心生意在NVidia的重要性正越來越高。所有用過NVidia産品做過深度學習工作的人,對其中包含的基礎軟件——CUDA——都是非常熟悉的。這裡我們簡單聊下CUDA在生意中所處的關鍵位置、CUDA的競争對手在幹什麼、以及開發者、創業者應該如何選擇。
1. CUDA帶來的供應商鎖定
下圖是NVidia CEO黃仁勳在GTC 2019上的一頁slide:
這一頁很關鍵,因為它描述了NVidia數據中心業務的全貌,重要的模塊,以及背後的關鍵想法。我們可以看到CUDA,以及更高一層的CUDA-X,是連接所有上層AI框架、服務與應用,以及下層工作站、服務器和雲端硬件的基礎軟件。從2007年CUDA推出以來,經過13年的發展,CUDA/CUDA-X已經變成了一個規模巨大的基礎軟件庫,覆蓋異構計算編程語言(CUDA C/C )、編譯器(nvcc)、指令集(PTX)、單源代碼異構計算API(CUDA Runtime API),以及大量的編程庫,例如:cuBLAS(高性能線性代數)、cuFFT、CUDA Math Lib、cuDNN(深度神經網絡)、TensorRT(深度學習推理)、Jarvis(對話)、DeepStream(視頻理解)、Dali(圖像解碼)、等等。
這麼大量的技術背後,是巨大的投入(每年數億到10億美元計)。NVidia為什麼願意堅持這麼多年做這麼大量的投資?可以簡單地用技術經濟領域的“微笑曲線”理論來解釋。
“微笑曲線”是台灣宏基電腦董事長施振榮在1992年提出的,曲線分成左中右三段,左段為技術、專利,中段為組裝、制造,右段為品牌、服務。而Y軸是附加價值,可以看到中段附加值較低,而左右兩段附加值高。這個理論我認為适用性很強,很值得學習。NVidia就是通過CUDA和GPU硬件技術,把自己牢牢定位在曲線左側,通過強大的核心技術來取得競争先機。
NVidia的核心技術是硬軟件一體的,GPU的架構和芯片設計是硬件核心技術,CUDA就是軟件的核心技術。這和通用計算領域知名的Wintel聯盟形成鮮明的對照(Wintel聯盟正是微笑曲線理論提出的背景),在Wintel中,Intel掌握硬件核心技術,而微軟掌握軟件核心技術,而到了大規模并行計算産業中,這兩套核心技術都掌握在了NVidia一家公司手上。
NVidia采用硬件高價、軟件免費(但不開源)的方式實現商業變現。整個CUDA的軟件和文檔都是可以免費下載的,但這個的前提,一是CUDA隻支持NVidia自己的硬件,二是軟件并不開源。從這點上說,NVidia采取了和Apple很類似的商業化策略,Mac硬件高價 MacOS/iWorks免費。從更廣的範圍來看,NVidia的業務模式和Apple也是很類似的,當然這是另外的話題。
CUDA是NVidia實現供應商鎖定(Vendor Lock-in)的關鍵環節。很容易理解,CUDA的免費,以及遊戲GPU的普及性使得開發者上手非常容易;而大量成熟的庫的存在,使得使用CUDA開發AI應用效率更高,效果更好;而當開發者已經在CUDA架構下進行了較長時間的投入積累之後,也就無法輕易轉換到其它不兼容的軟件架構上面去了,這就保證了NVidia GPU在AI領域長期的低營銷成本、高利潤的銷售。
2. 創造非CUDA生态的努力
在任何領域,供應商鎖定都是購買者和競争對手不喜歡的。因此從CUDA誕生開始,就有其它供應商開發競争的生态。而實際上,在大部分技術領域,都不是像GPU領域有這麼強的市場集中性和技術的不兼容。比如桌面CPU領域,Intel和AMD的x86 CPU,在幾十年的時間範圍内都是互相兼容的。在數據庫領域,也有SQL這樣的查詢語言标準,實現了相當高程度的不同供應商之間的互操作。
但是競争生态不是那麼容易建立起來的,作為後來者,“選擇比努力重要”,光靠投入是不夠的(畢竟NVidia每年還在不斷大幅投入CUDA研發),必須有聰明的辦法。到目前為止,行業嘗試了兩條不同的路。
第一條路,是建立産業聯盟與标準。這裡最重要的項目是OpenCL,1.0版本2009年推出,最早的推動者是Apple,也有AMD, IBM, Intel等一衆公司參與。今年正好有OpenCL 3.0标準的推出。OpenCL 1.x的支持還是比較廣泛的,AMD Radeon和NVidia的GPU在Windows, Linux, Mac平台基本都支持,而大部分手機GPU也有OpenCL driver的支持。但是OpenCL有幾個較大的問題,當前很難成為CUDA的替代品:
第二條路,是想辦法和CUDA兼容。這是AMD的ROCm/MIOpen項目采用的策略。AMD的編程模型叫HIP,基本上是一個類似CUDA的東西。AMD提供了一套代碼到代碼轉換的工作(Hipify),讓程序員可以轉換CUDA代碼到HIP代碼。
不能說AMD的辦法不好,但一來AMD業務重點還是在CPU上,在GPU軟件上投入不夠大,二來兼容一個領先廠商而又做想做得更好,還是難度非常大的,看看AMD在CPU領域和Intel在過去30年中打得有多辛苦就知道了。所以最後結果是ROCm用得人很少。
所以總體來看,到2019年,這兩條路都走的不太順利。
3. 2020年的新進展
到了今年,基于标準的OpenCL生态有不少動作。一個是6月份SYCL 2020推出,另一個是8月份OpenCL 3.0推出。SYCL基本上等價于CUDA C ,就是單一源代碼的C 并行編程的标準。所謂“單一源代碼”的意思,就是在GPU上跑和代碼和在CPU上跑的代碼,可以寫在同一個源代碼文件裡,而且都用C 來寫,這個已經被證明是一個并行編程環境好用的基本要求了,所以很重要。有了SYCL之後,一方面并行編程的代碼寫法實現了标準化,各個廠商可以逐步支持,就能解決開發者寫出來的代碼隻能在NVidia卡上跑的問題,自己的硬件才能賣得出去。另一方面,有了統一編程标準,各軟件廠商和開源組織就可以在SYCL上面構建越來越豐富的軟件庫的生态。
這個方向,本質上是要實現AI基礎軟件領域,從單一供應商的垂直整合(Vertical Integration),走向多供應商的标準化和模塊化(Modularization)的過程。這一過程在很多産業都發生了,比如PC就是計算機的标準化和模塊化,在PC以前,不同品牌的計算機上面的軟件是不能通用的。
下圖是SYCL/OpenCL的一個基本生态圖,可以看到很多東西已經到位了,SYCL-BLAS, SYCL-DNN這些庫,以及TensorFlow這些框架支持也都存在了。
SYCL這個并不是新東西,在OpenCL 2.x時代的時候,就已經有類似的。但是因為各種原因,沒有被廣泛采納。所以OpenCL 3.0的一個主要變化,就是把SYCL這樣的模塊單獨成為标準,而不再是OpenCL大标準本身的一部分。這樣模塊化的标準,應該可以更好、更靈活地被采納。以下是一些已經存在的SYCL實現:
目前看起來,OpenCL/SYCL的支持正在逐漸變得豐富,未來幾年還是可以期待的。
4. 應用開發者、AI框架開發商、AI硬件開發商的選項
應用開發者:目前來看,如果你是使GPU進行雲端AI模型訓練和推理的開發者,暫時CUDA依然是唯一的選擇。除了買N卡,沒有别的選擇,否則就是自己找罪受。
對于AI框架開發商、AI硬件開發商來說,當下可能問題就會更複雜一些。非CUDA的基礎軟件還比較弱小,支持他們看起來是投資回報率不高的事情;但另一方面,NVidia的供應商鎖定的确讓其它人的機會都變小了,而且長期會更小。所以支持非CUDA的生态,可能是謀求變化的長期的好機會。而2020年的非CUDA生态,可能值得再看一眼,是否值得投資。
作者:周楓 關于教育、深度學習、創業和有道的思考。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!