本文最初發布于 Medium 網站,經原作者授權由 中文站翻譯并分享。
John Hennessy 和 David Patterson 在 2018 年 6 月 4 日以 2017 年圖靈獎(相當于計算機科學諾貝爾獎)的獲得者身份發表了他們的圖靈講座《計算機架構新的黃金時代》。講座的三個關鍵見解分別是:
-
軟件進步可以激發架構創新。
-
硬件 / 軟件接口的進化為架構創新創造了機會。
-
市場最終會解決架構爭論。
我想再補充第四點,補全這個循環:
自從 Hennessy/Patterson 的演講以來,市場可以說已經在 AI 領域中實現了見解 #3,將圖形處理單元(GPU)推舉為推動 AI 革命的架構勝出者。在本文中,我將探討 AI 革命是如何激發架構創新和重新發明 GPU 的。我希望本文能回答我自己的一個重要問題:
Henessy 和 Patterson 提出了領域特定架構(DSA)的概念,旨在為計算機架構帶來創新,努力邁向新的黃金時代。
顧名思義,GPU 是 3D 圖形領域的 DSA。它的目標在 3D 虛擬世界中渲染照片般逼真的圖像;然而,幾乎所有人工智能研究人員都在使用 GPU 來探索超越 3D 圖形領域的想法,并在人工智能的“軟件”,也就是神經網絡架構方面取得了一系列突破。
GPU 在 3D 世界仍然是不可或缺的,同時它已成為人工智能世界的“CPU”,因為它促進了 AI 的軟件創新。除了 3D 用途之外,GPU 架構師一直在努力將 GPU 的計算資源用于非 3D 用例。我們將這種設計理念稱為通用 GPU(GPGPU)。
如今,我們看到行業中涌現了大批 AI DSA 而非 GPGPU,前者試圖憑借更好的性能來取代 GPU。甚至 GPU 本身也掙扎在它的雙重屬性,AI DSA 和 3D DSA 之間。原因是 AI DSA 需要加速張量運算,這在 AI 中是很常見的運算,但在 3D 世界中是沒有的。同時,為 3D 用途準備的固定功能硬件對 AI 來說一般是不需要的。
于是,架構爭論的主題應該集中在以下幾個方面:
-
GPU 能否保住人工智能世界“CPU”的寶座?
-
GPU 是否會分成兩種 DSA,一種用于 AI,另一種用于 3D?
我的預測如下:
-
GPU 硬件 / 軟件接口將維持 GPU 作為 AI 世界“CPU”的地位。
-
基于 AI 的渲染會讓張量加速成為 GPU 的一大支柱。
虛擬世界和現實世界互相映射的數字孿生理念將主導市場,最終解決架構爭論。
我們可以將 GPU 在 3D 領域中的主導地位和在 AI 世界中取得的巨大成功歸功于它的硬件 / 軟件接口,這種接口是 GPU 和 3D 圖形軟件架構師努力推行的。這種接口是解決以下悖論的關鍵。雖然 GPU 社區在繼續提升 GPU 的通用性,但業界的其他人已轉向更專業的硬件,以應對摩爾定律終結的困境。
GPU 流水線
從概念上講,GPU 是一個處理很多階段的較長線性流水線。不同類型的工作項目在流經這個流水線時被一一處理。在早期,每個處理階段都是一個功能固定的塊。程序員對 GPU 能做的唯一控制就是調整每個塊的參數。
如今,GPU 硬件 / 軟件接口讓程序員可以自由地處理每個工作項目,無論它們是頂點還是像素。開發者無需在每個頂點或像素循環中處理循環頭,因為 GPU 架構師在一個固定函數中實現了它。這種架構選擇讓程序員負責關注循環體,或稱“著色器”,它通常以工作項目的類型命名,例如用于處理頂點的“頂點著色器”和用于處理像素的“像素著色器”。
現代游戲是如何通過這種線性流水線生成令人驚嘆的畫面的呢?除了通過流水線在一個 pass 中控制不同類型的著色器之外,程序員還可以通過流水線的多個 pass 逐步生成多張中間圖像,最終生成屏幕上看到的圖像。程序員快速創建了一個計算圖,描述了中間圖像之間的關系。圖中的每個節點代表通過 GPU 流水線的一個 pass。
一個中心化的通用計算資源池被不同的處理階段之間共享,用來完成繁重的工作。這種方案的最初動機是為了負載平衡。在不同的使用場景中,各個處理階段可能具有截然不同的負載。被稱為著色器核心的計算資源逐漸變得更具通用性,以實現靈活性和產品差異化。
某一天,GPU 架構師嘗試將中心化著色器池作為 GPGPU 提供給了非 3D 應用程序。這種設計方案讓 GPU 在 AI 任務方面取得了突破,甚至將 AI 任務作為了自己的兼職工作。
GPU 架構師時不時會在不改變硬件 / 軟件接口的情況下,通過添加協處理單元來“加速”或“對領域定制”著色器池。紋理單元就是這樣一個協處理單元,紋理貼圖中的紋素通過它在到達著色器池的途中被提取和過濾。特殊函數單元(SFU)是負責執行超越數學函數的另一種協處理單元,處理對數、平方根倒數等函數。
雖然這聽起來很像 CPU 中的超標量設計,但它們有一個顯著區別:GPU 架構師根據著色器程序使用協處理單元的“平均”頻率來分配協處理單元的吞吐量。例如,我們可以為紋理單元提供著色器池吞吐量的八分之一,因為我們假設紋理操作出現在基準測試或游戲中的時間平均為八分之一。當協處理單元處于繁忙狀態時,GPU 會切換任務以讓自己的資源被充分利用。
在前文中,我指出了 GPU 在 3D 用途中難以利用張量加速。我們看看如果我們改變 GPU 渲染典型游戲幀的方式,這種狀況能否改變。GPU 首先為每個像素生成為像素著色所需的所有信息,并存儲在 G-buffer 中。從 G-buffer 中,我們會計算如何點亮一個像素,然后是幾個處理步驟,包括:
-
去除鋸齒邊緣(抗鋸齒,AA)
-
將低分辨率圖像放大到更高精度的圖像(超分辨率,SR)
-
向整個幀添加一些特定視覺效果,例如環境光遮蔽、運動模糊、布隆過濾或景深。
我們稱這種渲染方案為 延遲著色,因為對像素的著色是“延遲”的,直到每個像素都獲得所需的信息后才開始。我們將照明之后的處理步驟稱為后處理。今天,后處理消耗了大約 90% 的渲染時間,這意味著 GPU 的屏幕時間主要用在 2D 而非 3D 上!
NVIDIA 已經展示了用來做 AA 和 SR,基于 AI 的 DLSS 2.0,這項技術聲稱可以生成比沒有 DLSS 2.0 的原生渲染圖像更好看的畫面。
此外,NVIDIA 還為光線追蹤提供了基于 AI 的蒙特卡羅去噪算法,這樣我們就可以使用很少的光線來實現原本需要更多光線才能做到的畫面質量。另外,人工智能技術為其他許多后處理類型提供了一類新的解決方案,例如用于環境遮蔽的 NNAO 和用于景深的 DeepLens。
為了解決架構爭論,我們要解決最后一個難題:我們最后是否應該移除 3D 渲染中的固定功能硬件,尤其是在用于 AI 用途時這樣做?請注意,通過 GPGPU,GPU 可以將 3D 渲染作為純“軟件”來實現,而無需使用任何固定功能的硬件。
嚴格意義上講,給定場景參數,3D 渲染模擬的是光子如何從光源穿過空間,與 3D 虛擬世界中的對象交互。GPU 的傳統 3D 渲染過程是這個過程的一個非常粗略的近似。
因此,微軟將光線追蹤宣傳為“未來的完整 3D 效果”時表示,“[基于傳統光柵化的]3D 圖形是一個謊言”。然而,一位 3D 渲染純粹主義者可能仍然不會理會光線追蹤技術,因為在光線追蹤過程中,我們是將光線從像素向后追蹤到 3D 虛擬世界來實現 3D 渲染的,這也是不真實的。
這兩種方法都是基于模擬的 3D 渲染的近似方案。在兩種方案下,我們都會將 3D 虛擬世界的建模,或者說內容創建與渲染分離開來。
在第一種方案下,對 3D 虛擬世界建模需要工程師和藝術家進行大量艱苦而富有創造性的工作,來描述每個對象及其與燈光交互方式的物理屬性。
在第二種方案下,通過渲染做到完全真實是不可能的,因為我們需要大幅簡化 3D 渲染以在資源預算內達成多個性能目標。
相比使用最著名的科學知識和數學理論為給定問題尋找解決方案,人工智能方法是從數據中“學習”計算模型,或者說神經網絡。我們通過反復試驗迭代地調整網絡參數。我們通過先前的參數估計向前運行網絡并測量失配或稱“損失”。
然后我們根據梯度調整參數以減少損失,有效地向梯度的相反方向引導損失圖景。這種機制稱為反向傳播,要求沿前向路徑的所有計算都是可微的,以參與梯度計算。
神經渲染是一個新興的人工智能研究領域,它使用上述方法來研究 3D 渲染。下面是我用來跟蹤神經渲染進展的思維導圖:
因此,在人工智能解決問題的范式下,3D 渲染的目標不僅是生成 3D 虛擬世界的逼真圖像,而且還是根據現實世界來構建虛擬世界。此外,新的框架通過以下方式重新定義了 3D 和 AI:
數字孿生理念要求將龐大且不斷變化的現實世界帶到其尚未開發的孿生虛擬世界中,并不斷維持兩者之間的對應關系。通過神經渲染獲得的虛擬對象需要與通過經典方法構建的虛擬對象共存。
因此,我相信神經渲染和傳統渲染將在 GPU 上融合,充分利用其成熟和高性能的 3D 流水線。數字孿生的需求將由未來的 GPU 負責實現。我們還需要在 GPU 端做很多工作來實現“可微”,以參與 AI 訓練循環的梯度計算,。
假設 GPU 因響應 3D 世界中的 AI 進展而獲得原生可微和張量加速能力,我預計 GPU 的雙重人格將化為一體。
原文鏈接:
https://towardsdatascience.com/will-the-gpu-star-in-a-new-golden-age-of-computer-architecture-3fa3e044e313
??
【新聞新知】 女人睡過的男人多了,有3個痕跡太明顯,說出來你可能不信!【專家講評】 賽年皮膚突變,婉兒玩家狂喜,5款皮膚優化巨帥,嫦娥建模重做【時事探索】 一份新手減肥計劃,幫你減掉贅肉,恢復苗條身材!673
留言列表