我讀 «輝達之道»

這個年假原本打算讀兩本書、 校稿兩篇專利 (?)、 準備一些美金看美股有沒有便宜可以撿、最後再看一下同事介紹的 DeepSeek 在幹啥?

不料就在年假的第一個周末, DeepSeek AI 突然直接攻佔各種新聞版面, 變得幾乎無人不知無人不曉. 週一晚上的美股 – 尤其是輝達價格大跳水! 這下我的好幾件事都連結在一起了. 因為我想讀的其中一本書就是 “輝達之道".

這本書原名 “The Nvidia Way", 作者是金泰 (Tae Kim), 譯者是洪世民和鍾玉玨. 本書非常值得推薦, 雖然翻譯有幾處比較不通順 – 不知道副詞子句是在講主詞還是受詞, 但整體可讀性沒問題. 每個人看這本書的觀點可能有些不同, 它可以是勵志的新創公司成功記、可以是黃仁勳發跡故事的側寫、或是一本 GPU 簡史. 對我來說, 它就是 Q&A. 解惑了我好幾個問題.

Q1. Nvidia 為何沒有變成一代拳王? MTK 蔡明介想過這個問題, 黃仁勳也想過. 兩個人遇到的狀況不同, 解法也不一樣. 黃仁勳認為會有一代拳王的是因為大家技術差不多, 但開發一顆 IC 要一年半的時間. 所以當你暫時領先, 對手的新產品就會比你厲害! 假設產品規格並沒有太大的改變, 只要規格疊得高, 那一代新人換舊人就是理所當然的.

黃仁勳解決這個問題的方法是成立不同 project, 開發週期彼此交錯, 共用資源和資訊, 隨時調整規格, 並且準時交貨. 從外界來看, Nvidia 推出產品的時間自然而然就縮短了, 對手很難在兩代產品交接的空檔中找到切入點! 當然這是在 graphic card 大混戰的時代才適用的策略. 如果大勢已定呢? MTK 理所當然去找下一個明星產品, 而老黃則是直接把現在的產品調整到直指未來.

他怎麼做到的呢? 當然就不是兩三句話那麼簡單. 總之我認為他好好地接受了不平凡的建議, 又壓榨出了驚人的成果. 像是光追, tensor, CUDA, NPU, GPU (替代 graphic card) 這些都是底下的人想出來, 再透過老黃鋼鐵的意志實現它. 底下會提到 Nvidia 發明了 GPU 這個名詞來和 graphic card 區隔.

Q2. 為何要叫做 GPU? Nvidia 的產品經理認為他們 graphic card 可以同時處理 4 個 pixel, 能做圖形的旋轉平移, 這些都取代了原本的 CPU 程式, 所以應該叫做 GPU. 於是老黃就在 1988 年 8 月宣稱他們的 GeForce 256 是全世界第一顆 GPU, 即使那顆 GPU 還是要下 register 才能叫它做事, 還不能真的寫高階程式語言.

Q3. 為何雲端運算需要 GPU? 這要先從高速運算說起. Nivia 的團隊在設計 Geforce 3 時, 為了解決 render 上較複雜的計算, 開發者藏了一些可編程的運算單元在圖形處理之中. 當然這代表 GPU 就有了一些浮點矩陣運算的能力. 即便只能用 OpenGL 或是 Nvidia 的 Cg (C for graphic) 來 coding, 至少硬體非常強大.

高速運算原本是 CPU 的市場, 強大的 CPU array 就是超級電腦. 當學者或研究單位擁有超級電腦, 就可以快速地完成複雜的計算. 但沒有被分配到這類珍貴資源的學者, 就算有很好的想法也無法領先發表論文, 輸家就永遠是輸家. 久而久之就形成了學術壟斷.

2002 年, 有位馬克哈里斯 (Mark Harris) 研究員發現許多科學家開始用 GPU 做 “非圖形" 的研究. 狀況就跟現在很多公司、大學都用 RTX4090 而不是 DGX B200 做 AI 實驗是一樣的道理 [1]. 所以他就架了一個 GPGPU.org (generla purpose GPU) 的網站, 幫助大家活用 GPU 來代替買不起的超級電腦. 接著 Nvidia 發現了這個網站, 招募哈里斯加入 NV50 (G80) 團隊.

G80 的 GPGPU 能力比過去更強大, 不再使用 Cg, 而是推出了 CUDA (Compute Unified Device Architecture). CUDA 呼叫 GPU 的 PTX 指令集, 讓大家不需要特別去學這個架構的組合語言, 而是有專屬的 compiler 可用. 黃仁勳說: “CUDA 讓我們的成本大為增加". 但是他們達到了目的: (1) 讓所有的人都可以用 CUDA, (2) 讓 CUDA 適用於所有領域. 於是有愈來愈多人發掘出 GPU 的用途, 從模擬新藥、挖礦 (虛擬貨幣) 到訓練 AI.

當然 Nvidia 的故事也不是都這麼正面. 他們發現科學家工程師只買電腦版 500 USD 的 GPU, 而不買他們更貴的伺服器版 2,000 USD 的 Tesla (p. 378). 於是 Nvidia 自己宣稱他們 PC 版的 floating 不太準, 伺服器版才準. 在被沃克教授證實並沒有不準後, Nvidia 改為在不影響圖形輸出的程度下把它改成不準. 沃克和它的團隊又再把它 patch 回來! 並且在他在藥廠的新工作中,買了成千上萬的電腦級 GPU 來建立 data center.

Q4. 為何大家都用 Nvidia 的 GPU 訓練 AI? 別家的卻不行? 這個問題一半的答案就是 CUDA, 它不是一張繪圖卡或是遊戲卡, 而是算力卡. 若只是要畫出滿屏的圖形, Intel 自己就可以做到了. Nvidia 預先看到這一點, 因此用 GPU 和圖形輸出做出區隔. 並且賣得超級貴. 別人的產品都是 ASP (平均銷售單價) 愈來愈低, Nvidia 主打愈賣愈高, “買愈多省愈多"!

回歸 AI 這個主題. 過去的 Machine Learning 都是先找特徵, 然後統計特徵值, 根據統計原理做分類. 直到 AlexNet 出現, 才有不找特徵, 讓系統根據 label 過的資料, 自己找出規則的 Deep Learning. 當然這就不得不歸功於當初 labeling 這些 database 的先驅李飛飛. 發明 AlexNet 的多倫多大學團隊 (當然包括其中一個學生叫做 Alex) 就是使用輝達的 GeForce 500 做訓練, 他們在第三屆 ImageNet 大賽, 成果遙遙領先其他舊演算法 10% 以上 (p.425).

從此以後, 大家都知道要用 GPU 做 Deep Learning (DL). Nvidia 也看到這個 AI 商機特別大. 因此再推出 CuDNN (CUDA Deep Neural Network) 強化對 AI 的支持度. 對於一般高速運算的市場, 硬體需要支援 FP32 或 FP64 (浮點 bit 數). 但是對於 Neural Network 的訓練來說, FP16 就夠用了. 因此 Nvidia 的 GPU 從 2016 年開始都支援 FP16. 而且還加入了 Tensor Core. 書上提到老黃臨時在 tape out 前幾個月說要加 Tensor, 大家怎麼趕工達標. 這個不是本文的重點就先略過.

Tensor Core 有什麼好處呢? 因為 DL model 裡面都是矩陣運算, 而 CUDA Core 只是浮點乘加器, 需要 CUDA compiler 來優化計算流程. 假如矩陣運算有特別的硬體, 那麼採用 CuDNN 來編 code 就可以更加地優化. P.433 說到,有 Tensor 快 3 倍. 這就解釋了為何大家都愛用 Nvidia 的 GPU 來開發 AI 軟體, 而不用市售的 NPU. 市售的 NPU 對於常用運算子的軟硬體優化差了 Nvidia 一大截. 所以做某些推論應用 (inference) 還可以, 整體而言是事倍倍功半半.

Q5. Nvidia 怎麼搭上 DPU? Mellanox 這家公司把 InfiniBand 這個標準做成高速網卡, 在數據中心可以 offload CPU 對網路封包處理的算力消耗. 雖然生意不錯, 但這家公司太小, 負擔不起高昂的研發費用, 最後只好賣公司. Nvidia, Intel, Xilinx 三家競標之下, Nvidia 看到它在數據中心的綜效, 因此花了每股 125 美元 (共 69 億美金) 標下股價 76.9 的 Mellanox.

接下來, 老黃又出來說我們發明了第一個 DPU. 當然, Nvidia 敢這樣講, 就是他們又投資了更多加速的軟硬體, 跟一般的 SmartNIC 做出區隔. 想要再重演一次“GPU 不等於繪圖卡”的劇本。

這本書的內容當然不只於此。或許可以用創業和經營事業的觀點再重新詮釋一次。像是保持扁平團隊,保証訊息一致,還有老黃偏執地好學等等。這部分就等我看完張忠謀自傳再來匯整好了。畢竟兩大管理者可以互相輝映。

[REF]

  1. https://www.cool3c.com/article/218920

3D graphic 的演進

昨天聽了台大簡韶逸教授的演講, 對 3D graphic 又多了一點認識. 先前我自修了幾個小時的 3D,  但是還是比不上聽 2 個小時的演講.

3D Graphic 的技術基本上是硬體愈做愈多, 但軟體卻也沒有愈做愈少. 假設 3D 技術可分為 Transform and Lighting ( T&L – 幾何轉換及光源), Rasterize, Texture, Blend and Z-buffer 這幾個單元的話, 早期的 3D graphic card 只包含 Texture 和 Z-buffer 這兩部分 (1998 年以前).

Milestone 1:

3dfx 的巫毒卡 (VOODOO), 我聽說它效能很讚, 也去敗了一張. 這張卡的特色就是把整張圖切細, 比方說用 4 個 sub-frame 來計算整個畫面, 最後再接起來. 因為這個技巧的確有效, 所以它也紅了一陣子.

Milestone 2:

1999 年的下半年, NVIDIA 的GeForce 256,首次支援硬體的 T&L. 這樣一來,  CPU 就不用算很多浮點數了, 效能自然是大大地增強. 可惜 Voodoo 不知道在堅持什麼? 始終都不支援 T&L, 最後就被 NVIDIA 給併購了.

2001 年, NVIDIA 引進 programmable vertex / pixel shader 的觀念. 所謂 vertex shader 就是 T&L 的進階版,  pixel shader 或是 fragment shader 就是 texture 的進階版. 怎樣進階呢? 就是把原本寫死的硬體, 做成可以程式化的巨量運算單元, 再以程式來控制想要輸出的 vertex 或 pixel 運算. 這個概念影響了 Direct X 8 的方向, 使得新版的 Direct X 都伴隨著 shader model 的更新.

老師的講法, programmable pixel shader 在 2002-2003 才出現. 但網路上的說法, pixel shader 和 vertex shader 應該都是 2001 年的 Geforce 3 的發明.

Milestone 3:

2002 年, ATI 推出 Radeon 9700 這顆 IC. 裡面用到的新技術還頗不少, 比方說這是第一顆 flip chip 的 IC, 對於散熱問題有了不少改善. 在驅動程式方面也產生了很大的突破, 由於可程式化的技術已經相進步; Wiki 上說它執行抗鋸齒(AA)和各異向性過濾(AF)運算時,在所有情況下,它能比 GeForce 4 的 Ti 4600快上40-100%。這顆 IC 因為效能遠勝 NVIDIA 而大賣了 3 年.


Milestone 4:

2006 年 11 月, NVIDIA 再度推出具有 unified shader 概念的 GeForce 8800. 所謂 unified shader 就是把 vertex shader 和 pixel shader 整合在一起. 同一個 shader 既可以做 vertex shader, 也可以做 pixel shader.

網路上的講法說, unified shader 就是 steam processor. 但是簡教授認為的 stream processor 至少要有 register 的概念, 才比較像 processor. 這是發生在 2007 年.

Milestone 5:

2008年2月, NVIDIA 收購 AGEIA, 推出 CUDA 語言, 使得顯示卡變身為平行處理電腦. 這邊就算是 GPGPU (general purpose GPU) 的起點吧!

綜合以上資料, 應該有一個 milestone 是把所有的 buffer (Vertex buffer, Texture buffer, Z-buffer) 整合成 unified buffer. 但是哪一顆 IC 率先推出這個改進就不得而知了.

總之, 搞繪圖卡的這些人頭腦還挺不錯的. 在激烈的競爭之下, 大家接力地推出可以徹底打敗敵人的招數. 目前 ATI, NVIDIA, Intel 雖然表現出三雄鼎立的架勢, 但誰可以在下一個階段勝出呢? 真是很有趣的一個問題. 繪圖卡愈來愈像小型 super computer, 到時候應該要比誰對軟體的支援最強吧?

另一個觀察的角度是: 當局者迷. 事後看來, 後面發展的路徑好像是顯而易見的, 但是十年前的人也都那麼聰明, 為何他們都想不到呢? 最好的解釋或許是人們不喜歡質變, 由量變過渡到質變的話則可以逐漸接受. 有誰一次想太遠的話, 只會被當作瘋子~~

Ref:

[1] 物竞天择适者生存!显卡10年技术漫谈

[2] http://zh.wikipedia.org/zh-tw/Radeon_R300

我是卡奴 – 顯示卡更新記

前陣子玩了幾個講究畫質的 game 之後, 覺得自己的顯示卡有點遜, 因此考量到要換一張顯卡這件事. 不過, 這個念頭, 最後為我帶來了不少的小麻煩.

首先, 當然是在網路上 survey, 想要找一張夠高級, 又不會太貴的顯卡. 看來看去, 現在的主流顯卡大概就是在 Nvidia 9600GT 那個等級. 雖然也有 ATI 或是他牌的東西可以選, 不過我原來就是用 N 系列的卡片, 這樣很容易就可以根據數字的大小, 來分辨效能的差異. 而不致於買了另外一個牌子, 結果等效於我現在的顯卡或是更低一級, 那就實在無言了.

在諸多 9600GT 的顯卡當中, 我挑了memory 最多的一張卡, 那就是旌宇的 SX96GT2048D2-HP. 它號稱有 2GB 的 DDR, 好像還滿炫的. 以我過去的印象, 記憶體愈多, 好像等級就愈高. 如果記憶體高達  2GB, 豈不就等於是: 買不起法拉利跑車, 至少買到速霸陸的 “硬皮鯊" 了嗎?!

為了買這張卡, 我還特別去燦坤續會員約 (網路上的售價比店面便宜了好幾百塊, 大家切記). 等到買回來之後, 才赫然發現我沒有大腦. 這張卡可不是我以前的小可愛, 而是身高丈二, 腰粗膀圓. 它要被塞進機殼裡的話, 要拆掉好多條訊號線、電源線, 才能勉強進駐.

重新開機之後, 本以為可以從此邁入新的紀元. 想不到在 Windows log in 的畫面, 硬是出現兩行小小的英文字, 說是電源不足, 必須降低頻率以保護電路. 開機之後, 很明顯地感覺到電腦慢了許多. 這….

只好再檢查一下手冊. 旌宇的手冊不能算太薄. 可是中文的部分只有兩頁, 其他的部分是我用不到的語文. 從圖形上來推斷, 好像我少插了一個顯示卡的 5V/12V 輔助電源. 再去翻電源供應器的手冊, 原來還有一根 6 pin 的 PCI-E 電源我沒用到. 但旌宇手冊上說的, 某些型號的顯示卡需要外接電源, 又畫了錯圖, 也實在有誤導的嫌疑.

本來這張卡就已經很占空間了. 再多接一個 PCI-E 接頭, 瞬間又長長了 1 cm (為何廠商不讓它往上發展呢?). 這樣我就只好拆掉兩顆硬碟了. 比較小顆的犧牲掉, 比較大顆的穿上 5 吋的外套, 住到光碟機的樓上去. 花了些時間, 把所有的線拆掉重接一次, 我再次準備迎接新顯卡的時代.

不過呢…開啟電源之後, 顯卡風扇的聲音超大不說, 根本就無法登入, Windows 載入到半途就藍色畫面、重新開機了.

從安全模式進去看, 電腦也沒抓錯顯卡的驅動程式, 的確是 9600GT. 不過電腦就是開不起來, 噪音又非常非常地大. 至此我已經有點灰心了, 上網搜尋 “燦坤 退貨" 等關鍵字, 順便找一找 “低功耗 顯示卡". 心裡想著, 只要能夠成功在燦坤退貨, 我一定改買 Asus 那一張沒有風扇的顯示卡, 沒有風扇就不會有噪音了吧!

第二天興沖沖去燦坤退換貨, 不過對方也非常合乎應對進退標準地, 把我的顯示卡拿去測試了一次, 證明它是可以開機的. 店員說道: “通常都是電源供應器瓦數不足的問題, 這張卡很吃電." 我問明了他的測試機只有 400W 之後, 心裡將信將疑. 我已經用了 500W 的電源供應器, 難道我應該去買 600W 的嗎?

不過既然可以開機成功, 至少這張卡還能夠用. 只要想辦法增加電源的收入或是削減開支就好了.於是我改道去順發看看有何解法? 因為順發的換貨很方便, 在和燦坤相比之後, 我覺得以後還是去順發買比較有彈性. 燦坤只有產品有瑕疵才能退換, 順發買錯就可以退換. 畢竟我拿到換貨單只會買更貴的東西, 退還的產品也包裝完整, 店家的損失有限. 

順發有一整櫃的電源供應器, 但 600W 的電源供應器只有一個牌子, 售價 6000 多 NTD. 我想我應該不會花那個錢, 只好想一些比較便宜的替代方案. 畢竟我的電腦裡面有 7 顆硬碟也實在是多了一點點. 如果買一顆 1.5TB 的新硬碟, 那麼 7 顆至少可以減到 3 顆. 然後再買個 SATA RAID 的硬碟外接盒, 這樣應該就可以幾乎充分 re-use 了.

經濟不景氣, 算盤還是要打的精一點. 我忽然發現一個很好用的伽利略硬碟抽取盒, 可以取代外接盒. 它只要賣 650 NTD, 卻可以讓我的大部分硬碟都可以活到為國捐軀、馬革裹屍, 只要把 ATA 硬碟弄到外接盒就行了. 有了這個發現之後, 我就捨棄了那個 29xx NTD 的 SATA RAID 外接盒, 再次成為伽利略公司的忠實客戶. (我發現我買過他們不少東西, 都是便宜又實用的, 像是 PC to PC 的 USB 連接線之類的).

回到顯示卡這個話題, 花了我不少寶貴的時間之後, 我終於發現是 driver 在作怪, 而不是電源供應不足. 如果用顯示卡所附的光碟片 driver, 就可以解決開機藍屏的問題. 不過為了節能減碳, 我還是把 5 顆硬碟拿出來了. 他們的資料都存在 1.5TB 那一顆硬碟, 並且放在抽取盒裡面. 最後就是可憐的 4 顆 ATA 變得無家可歸了, 因為我已經懶得去買他們的外接盒.

旌宇的顯卡在開機的過程中, 固然會發出比較大的噪音, 但是進入 Windows 之後, 聲音就小了很多, 進入可以接受的範圍. 效能方面我還沒有感受到, 可能要看看進入以前那些遊戲才知道虛實. 比方說, 我以前只要玩 GTA 就會頭昏眼花. 扣除本人太有道德或良心的因素之外, 顯示卡的張數不足可能才是主因. 所以, 如果我有一天把 GTA 玩下去了, 再來跟大家推薦旌宇的這張顯示卡.