前幾天和一個在英偉達的老同事兼老同學(xué)一起吃飯時,,聊到了許多老同事,,很是感慨,;我們這些人各有各的成功,共同的是都是在英偉達GPU計算這個平臺上,,在HPC的業(yè)務(wù)上開啟了職業(yè)第一站,。回想起2007年底英偉達第一次發(fā)布了CUDA,,今天正好是12年,,在中國的天干地支計年法中,12年是一個輪回,,中國的電視劇中往往在輪回之時回首往事。
我2008年開始使用CUDA做GPU計算方面的工作,,2011年加入英偉達,,之后也基本一直從事HPC行業(yè)工作,經(jīng)歷了英偉達的GPU計算業(yè)務(wù)幾乎從開始到現(xiàn)在的全過程,,我想對于這個題目還是有一定發(fā)言權(quán)的,。
我把英偉達GPU計算的成功總結(jié)為四個關(guān)鍵要素:戰(zhàn)略前瞻、核心能力構(gòu)建,、專注細分市場和重視生態(tài),,每個關(guān)鍵要求下面包含四五個小因素。
戰(zhàn)略前瞻,,領(lǐng)導(dǎo)決定一切
2008年我剛在中科院過程所讀碩士,,第一次接觸到GPU時很是吃驚,在當(dāng)時4核CPU只有100GFLOPS計算能力的時候,,英偉達的Tesla C1060已經(jīng)過T了,,并且推出GPU上的通用計算編程體系CUDA,相比友商的方案,,顯著降低了編程難度,。在那個時候稍早,在GPU上寫通用計算程序是要用OpenGL的,,找某CPU廠商優(yōu)化應(yīng)用程序性能是要另外花錢的,。在相近的價格下,能夠獲得近一個數(shù)量級的性能提升,,并且硬件還可以用來玩高端游戲,,這為GPU計算的擴張奠定了硬件基礎(chǔ)。
2008年AMD已經(jīng)推出了16核的CPU,公眾開始意識到再在單板上堆更多的CPU核心有點不太現(xiàn)實,,而通過CPU頻率提升來進一步提升單核性能這條路也難以為繼,;在這樣的大形勢下,英偉達把之前用于圖形渲染的流水線GPU架構(gòu)更新為統(tǒng)一架構(gòu),,讓計算任務(wù)和圖形渲染任務(wù)使用共同的硬件單元運行,,對圖形渲染來說這雖然浪費了一些GPU資源,但是他開啟了GPU通用計算的新時代,,而統(tǒng)一架構(gòu)使得在GPU上面運行通用的任務(wù)變得更為容易,,可以基于CPU的通用的編譯器和工具鏈技術(shù)發(fā)展GPU技術(shù),之前的知識和技術(shù)可以相對比較容易的遷移到GPU上,,擴大了潛在的開發(fā)者數(shù)量,。以后的歷史證明了,英偉達領(lǐng)導(dǎo)人的戰(zhàn)略眼光,。
在大家都意識到摩爾定理難以為繼的時候,,HPC領(lǐng)域并無太多潛在選擇,使用新架構(gòu)是一個可能性,,但是量子計算,、生物計算都新架構(gòu)還遠未達到可用水平,當(dāng)時唯一的選擇只能是異構(gòu)計算,。通過把不同特性的計算任務(wù)交給不同的硬件執(zhí)行,,異構(gòu)計算能夠獲得遠高于通用CPU的性能和效率,但是當(dāng)時對于異構(gòu)計算有許多選擇,,比如DSP,、FPGA以及各種ASIC,它們之間互不兼容,,誰能夠最終笑傲江湖,,依舊是未定之?dāng)?shù)。在NVIDIA 推出CUDA之后,,一切就已經(jīng)確定了,,CUDA使用C語言擴展并行編程,通過共享存儲器來通信,,兩個層次的并行都方式簡化了編程,,使得本科生也能夠使用CUDA來寫大規(guī)模高性能計算程序;AMD的brook++一下子就黯然失色,,brook是斯坦福一個實驗室開發(fā)的,,Ian Buck當(dāng)時正在那里實習(xí)。brook++是brook的升級版本,,而那時Ian Buck已經(jīng)在開發(fā)CUDA了,,某種意義上說,,CUDA從一個全新的路徑上揚棄了brook,而brook++只對brook做了修補,,之后的發(fā)展大家就都知道了,。這段歷史告訴我們,拋棄“歷史”可能意味著全新的可能和機會,,當(dāng)然這需要時機,、領(lǐng)導(dǎo)者的勇氣、決心和擔(dān)當(dāng),。
2012年一代不世出的天才alex 和 其導(dǎo)師Hinton使用CUDA在NVIDIA GPU上編寫了CUDA-CONVNET框架,,在ImageNet競賽中一鳴驚人,開啟了深度學(xué)習(xí)的全新時代,,英偉達敏銳的觀察到了其潛在的可能性,,開始向世界的互聯(lián)網(wǎng)大企業(yè)推銷GPU,并且專門設(shè)立了互聯(lián)網(wǎng)行業(yè)銷售,,我也是在那個時候開始關(guān)注BP算法,,并且在一年后決定離開英偉達加入了當(dāng)時如日中天的百度IDL。加入百度IDL后,,著手開發(fā)深度學(xué)習(xí)基礎(chǔ)庫,,當(dāng)時在英偉達GPU上開發(fā)的深度學(xué)習(xí)基礎(chǔ)計算,性能遠超CUDA-CONVNET和Caffe,,在此期間和alex在google code上有過討論,其學(xué)術(shù)天才氣質(zhì)讓我自慚形穢,;在一次內(nèi)部Hi討論中,,我論斷:如果英偉達在Deep Learning領(lǐng)域做成功,他在深度領(lǐng)域的成就將會遠超在傳統(tǒng)HPC領(lǐng)域,,當(dāng)時在那個群中的朋友依舊活躍在各大公司,,但各人成就差距漸大,這是后話了,。在向互聯(lián)網(wǎng)公司推銷GPU的同時,,英偉達就開始了其深度學(xué)習(xí)基礎(chǔ)庫CUDNN的開發(fā),并且在不到一年后推向市場,。而我在轉(zhuǎn)正時決定離開百度IDL,,后來追隨湯曉歐教授創(chuàng)立商湯,走向了另外一段旅程,。
在CUDA推出的一段時間內(nèi),,英偉達的HPC業(yè)務(wù)收入相比其它業(yè)務(wù)還是小頭,但是英偉達還是為了GPU計算開發(fā)了一代“熱卡”Fermi,,F(xiàn)ermi進一步降低了CUDA編程的難度,,但是在游戲市場上差點被AMD打敗,,F(xiàn)ermi引發(fā)了是否應(yīng)該為計算單獨設(shè)計一個GPU架構(gòu)的討論。幾年后,,當(dāng)我獨自在各種限制和壓力下事實上負責(zé)一個業(yè)務(wù)的時候,,我意識到“大黃”的聰明睿智,如果當(dāng)年真的為計算獨立設(shè)計GPU,,今天英偉達的GPU計算業(yè)務(wù)可能已經(jīng)失敗,,離開英偉達的幾年里,我漸漸深刻的認識到“大黃”是真正的戰(zhàn)略天才,,這也漸漸讓我和商湯漸行漸遠,,最終分道揚鑣。
因為業(yè)務(wù)體量小,,英偉達的GPU計算還是掛在其它業(yè)務(wù)下面,,這潛在的影響了GPU計算業(yè)務(wù)的發(fā)展,大約在2013年,,英偉達成立了相關(guān)的BU,,并且任命 Ian Buck作為負責(zé)人。Ian Buck是一員猛將加福將,,在他負責(zé)之后,,英偉達的GPU計算業(yè)務(wù)快速發(fā)展,很快迎來了深度學(xué)習(xí)時代,。我記得:在潛在負責(zé)英偉達的GPU計算業(yè)務(wù)的候選人中,,Ian Buck的職位并不高,但是任命他時,,我沒有聽說有人質(zhì)疑,。這件事教會我不拘一格降人才的重要性,后來在我負責(zé)業(yè)務(wù)時,,大力提拔和培養(yǎng)了許多人才,,使得我的團隊成為商湯最強團隊之一,而我在負責(zé)的多個領(lǐng)域里也建立了自己的聲望,。在我離開商湯后,,我進一步意識到什么是真正頂尖的人才。
從2008年到2014年,,在深度學(xué)習(xí)工業(yè)界大量應(yīng)用之前,,GPU計算給英偉達帶來的利潤并不高,客戶局限在一些知名大國企,,但是每年的GTC “大黃”都會花大量的時間介紹GPU計算,,出了什么新卡和新庫,CUDA新版本有那些特性等等,,參會時經(jīng)常忘記這是一家賣顯卡的公司,。
核心能力構(gòu)建,,持續(xù)學(xué)習(xí)
當(dāng)GPU從流水線架構(gòu)轉(zhuǎn)向統(tǒng)一架構(gòu)時,這意味著英偉達要開始轉(zhuǎn)型了,,因為流水線架構(gòu)的GPU只是一個圖形渲染的“加速器”,,而統(tǒng)一架構(gòu)的GPU已經(jīng)可以稱為處理器了,這標志著英偉達從圖形渲染領(lǐng)域進入了HPC領(lǐng)域,。
HPC業(yè)務(wù)需要的核心能力和GPU圖形渲染所需要的核心能力有非常大的區(qū)別,,在英偉達進入HPC領(lǐng)域的時候,面臨了非常大的核心能力構(gòu)建的挑戰(zhàn),;一個典型的例子就是:早期cublas和cufft的性能一而再再而三的被 HPC 領(lǐng)域人士吊打,,但是英偉達很快就在相關(guān)領(lǐng)域建立了自己的核心能力,之后再也很少有人能夠提出吊打 cublas 和 cufft 的計算方法了,。在被吊打期間,,英偉達負責(zé)的團隊承受了非常大的壓力,但是英偉達內(nèi)部并沒有給多的責(zé)備,,更多的是提出期望,,而基礎(chǔ)庫團隊也展現(xiàn)出了良好的風(fēng)度,邀請相關(guān)人員去GTC上做講座,,去交流,,然后把學(xué)習(xí)到的成果更新到基礎(chǔ)庫中。從這段經(jīng)歷里,,我學(xué)習(xí)到了兩個受用至今并一直堅持的核心能力:一個是學(xué)習(xí)和迭代,,另一個是解決問題而非責(zé)備。我每年至少讀十幾本書,,找?guī)资畟€不同的人聊天,,從書和他人身上學(xué)習(xí)好的方面。在帶團隊之后,,在下屬沒有很好的解決問題時,我經(jīng)常說:我發(fā)怒是因為我覺得你可以做得更好但是你沒有,,這是一種期望而非責(zé)備,。
在英偉達核心能力的構(gòu)建過程中,按時間來看,,主要有兩個部分:高性能計算能力和AI算法能力,,其構(gòu)建方法基本上是通過調(diào)用優(yōu)秀人才組建初始團隊,然后再通過校招和社招補充領(lǐng)域頂尖人才,。在具體的對外成果輸出上面,,通過螺旋式提升來增強競爭力,幾個迭代下來,,幾乎變成了業(yè)界最優(yōu)的實現(xiàn),,cublas,、cufft、cudnn和今天的許多新庫基本上都是同樣的方式完成的,。在獨自成軍后,,我也基本上借用了這個邏輯來創(chuàng)建新的團隊,調(diào)集一位有意向,、學(xué)習(xí)能力,、理解能力很強且具有自我成就感和追求的新人來負責(zé),同時給他配備最優(yōu)秀的新人,,通過我的能力和威望讓團隊很快凝聚起來,,形成集體建立共同目標;在產(chǎn)品開發(fā)上,,第一版專注于應(yīng)用場景的走通而非數(shù)字指標,,之后再通過數(shù)字指標來引領(lǐng)進展,迭代提升,。在解決問題的過程,,強調(diào)全力追求最好的進展而非完美,在一個挑戰(zhàn)性的課題中,,設(shè)計的越好可能就意味著失敗的可能性越大,,因為在這個不確定性占主導(dǎo)的時代絕大多數(shù)時候沒人清楚的知道最終的結(jié)果全貌,我們只有一個模糊的形象或認知,,而我們需要做的是一頭扎進去,,在這種情況下維納斯才是完美。
專注細分市場,,攻敵所不守
在CUDA推出時,,高性能計算市場英特爾基本上一統(tǒng)天下,英偉達想無論是渠道,、生態(tài)還是技術(shù)都遠遠落后,,在這種情況下要從Intel嘴里搶肉吃,談何容易,,選擇合適的細分市場和合作伙伴就很重要,。孫子兵法所攻其所不守,“大黃”又一次展示了其戰(zhàn)略天賦,,很明智的,,英偉達從一個英特爾不能競爭的角度出發(fā),英偉達說用上GPU你的程序就快了多少倍,,你買的服務(wù)器就少了多少,,你的維護成本就更低了,這個邏輯本身并不那么吸引人,,因為客戶沒必要冒險從一個已經(jīng)被無數(shù)人證明的平臺遷移到另一個平臺,;但是這個戰(zhàn)略聰明的地方在于:英特爾沒法反擊,,因為英特爾不能說我優(yōu)化一下代碼,你用GPU的相對速度就沒那么快了,,因為一旦客戶的程序快了,,他買的機器就少了,這相當(dāng)于斷自己的收入,?!按簏S”真正實現(xiàn)了“攻敵所不守”。
“攻敵所不守”并不能保證人們一定會用GPU計算,,因為沒有應(yīng)用,,英偉達沒有一下子就從工業(yè)界出發(fā),而是發(fā)現(xiàn)了從學(xué)術(shù)界出發(fā)的這條路,,相比工業(yè)界,,學(xué)術(shù)界更愿意試用新技術(shù),畢竟那么多學(xué)生要發(fā)論文畢業(yè),。英偉達通過多種方式鼓勵高校和研究所從事CUDA相關(guān)的研究工作,,設(shè)立CUDA研發(fā)中心,發(fā)CUDA大師證書,,做CUDA技術(shù)認證,,讓學(xué)術(shù)界為CUDA背書。通過學(xué)術(shù)界為工業(yè)界做預(yù)研,,通過學(xué)術(shù)界為工業(yè)界培養(yǎng)人才,。
超算是一個國家的核心競爭力之一,世界主要大國在這個領(lǐng)域競爭了幾十年,,在可見的時間下依舊會競爭下去,,這一領(lǐng)域有幾個典型的賽場:top500和green500,全球的多個國家都在這些賽場上展示自己的實力,,而英偉達GPU超強的計算能力正好適合這個賽場,,英偉達為各國的超算中心和國企在此賽場上的競爭提供彈藥。由于對國家來說,,超算是核心競爭力,,而國家并不缺乏“小錢”,更不缺乏人才,,而在超算賽場上拿到第一對民眾的自豪感有極大的振奮作用,主導(dǎo)這些競賽的個人也獲得了巨大的政治收益,,他們千方百計的使用各種技術(shù)來提升超算的競爭力,,GPU為他們提供了最好的彈藥。英偉達通過支持各國的超算中心勇奪第一,,既獲得了經(jīng)濟收益,,又作了很好的宣傳,。
深度學(xué)習(xí)大火后,英偉達為互聯(lián)網(wǎng)大公司提供GPU用于深度學(xué)習(xí)訓(xùn)練,,這一領(lǐng)域基本上已經(jīng)占據(jù)絕對優(yōu)勢,,并且為英偉達貢獻了大量收入和近十倍的市值提升。當(dāng)英偉達意識到深度學(xué)習(xí)是一個潛在的大市場并為之大力投入時,,其競爭對手幾無察覺,。
重視生態(tài),有所為有所不為
在推出CUDA后,,如何建立生態(tài),,吸引開發(fā)者使用CUDA決定了英偉達是否能夠生存下去,英偉達推出了一系列的措施來建立生態(tài),,其中一些起到?jīng)Q定的性的作用,。
在CUDA剛推出的時候,英偉達便宜的Geforce游戲卡就支持 CUDA,,這一下子把CUDA的入門設(shè)備投入降低到千元級了,,基本上那個學(xué)校的老師都買得起,完全去掉了設(shè)備這個限制,,提高了開發(fā)者的覆蓋面,。一些讀者可能要問:那英偉達怎么賺錢?答案是英偉達有企業(yè)級的Tesla卡,,相比Geforce,,Tesla為企業(yè)計算提供了更多支持,而且價格貴了許多,。筆者CUDA開發(fā)的第一塊GPU卡就是 Geforce 系列,,后來在前東家時,決策為集群使用了大量的 Titan 導(dǎo)致英偉達的同事責(zé)怪,,據(jù)稱因為 Google 和 facebook聽說我們在用 Titan,,因此他們也決定用Titan。2017年英偉達GPU驅(qū)動協(xié)議要求不能在數(shù)據(jù)中心使用 Titan,,這是一個很有意思的舉動,。
通過支持學(xué)生和老師發(fā)論文,英偉達為CUDA培養(yǎng)了大量的潛在開發(fā)者,,而發(fā)論文和開發(fā)者因為興趣學(xué)習(xí)的最大區(qū)別是:發(fā)論文是必須要學(xué),,總不能因為不學(xué)習(xí)而畢不了業(yè),而要畢業(yè)更要讓應(yīng)用的性能足夠好,。
英偉達通過inception計劃支持創(chuàng)業(yè)公司采用CUDA做項目,,進入Inception計劃的項目能夠得到英偉達的資金和宣傳支持,這對許多創(chuàng)業(yè)公司來說還是有一定吸引力的。對于英偉達來說,,通過 Inception 項目,,他能夠了解世界上最領(lǐng)先的創(chuàng)業(yè)公司在做什么,同時通過投資等手段把這些創(chuàng)業(yè)公司吸引到自己的生態(tài)中,。
英偉達開源了許多庫,,如支持常見并行原語的cub,支持多GPU之間通信的NCCL,,英偉達優(yōu)化的nvcaffe等等,,這些庫降低了各個領(lǐng)域使用英偉達GPU開發(fā)應(yīng)用的難度。但是對于現(xiàn)有行業(yè)成功軟件和中間件,,英偉達基本上沒有推出替代品,,英偉達沒有自己的MPI實現(xiàn),沒有自己的深度學(xué)習(xí)框架,,英偉達通過開發(fā)能夠優(yōu)化這些中間件的性能的基礎(chǔ)庫給這些廠商使能,,通過這種“多交朋友”的方式,英偉達擴大了生態(tài)觸角,;又避免了自己去做的潛在失敗可能,,實際上大企業(yè)進入一個新的領(lǐng)域遇到挫折是常見的,一旦失敗,,既被對方視為敵人又強化了對方的領(lǐng)域影響力,。