GPU 觀念

為什麼 AI 離不開 GPU:平行運算與 CUDA 觀念一次搞懂

因為深度學習的本質是海量的矩陣運算,而這種運算可以拆成成千上萬個彼此獨立的小任務同時做。CPU 只有少數幾個核心、擅長一件一件按順序處理;GPU 有數百個核心、能同時跑上千條執行緒,天生就是為平行運算而生。CUDA 則是 NVIDIA 提供的平行運算平台,讓開發者能用程式指揮 GPU 的千軍萬馬,這正是現代 AI 訓練與推論都建立在 GPU 上的原因。
為什麼 AI 離不開 GPU:平行運算與 CUDA 觀念一次搞懂:文章重點卡

為什麼 AI 離不開 GPU:平行運算與 CUDA 觀念一次搞懂

每次 AI 的新聞都繞著 NVIDIA 轉:模型要搶 GPU、資料中心要蓋 GPU、連筆電都在標榜 AI 晶片。但很少有人把最根本的問題講清楚:AI 為什麼非要 GPU 不可?CPU 不行嗎?

我整理了 NVIDIA 官方部落格與 CUDA 入門教材的解釋,發現答案其實只有一句話:深度學習的運算剛好長成 GPU 擅長的形狀。這篇就把這句話拆開講:CPU 與 GPU 差在哪、什麼是平行運算、CUDA 又是什麼角色。

你將學到什麼

CPU 與 GPU

少數強核心對上成百上千的小核心。

平行運算

把大問題拆成上萬個小任務同時做。

CUDA 觀念

kernel、thread、block 三層架構。

Tensor Core

專為矩陣運算而生的加速單元。

從畫面到 AI:GPU 本來是做什麼的

GPU 的全名是圖形處理器,最初的工作是把遊戲畫面算出來。畫面由上百萬個像素組成,每個像素的顏色、光影可以各自獨立計算,所以顯示晶片從一開始就被設計成同時做很多件小事的架構。

後來研究者發現:這種架構不只會算像素,任何「可以拆成大量獨立小任務」的問題它都在行。科學模擬、影像處理,以及後來的主角:深度學習,全都是這種形狀的問題。

CPU 與 GPU:大腦與靈魂

NVIDIA 官方部落格有個很傳神的說法:CPU 是電腦的大腦,GPU 是它的靈魂。兩者的架構哲學完全相反:CPU 是少數幾個很強的核心配上大量快取,把一件事做得又快又靈活;GPU 是成百上千個較小的核心,同時跑上千條執行緒。

CPU:少數強核心核心核心核心核心GPU:大量小核心
CPU 少數強核心跑序列任務;GPU 用大量小核心把問題拆開同時算。

所以兩者的分工是:CPU 擅長序列處理,一步接一步、需要靈活反應的工作,例如作業系統與你的每一次點擊;GPU 擅長平行處理,把複雜問題拆成成千上萬個獨立任務一次算完。不是誰取代誰,而是各管一種形狀的問題。

還有一個常被忽略的重點:能源效率。同樣的平行工作量,GPU 每單位能源能做的工遠多於 CPU。在摩爾定律放緩、單晶片塞電晶體越來越難的年代,把工作攤給大量處理器平行做,成了效能繼續成長的主要出路。

深度學習剛好長成 GPU 的形狀

神經網路聽起來玄,底層數學卻很樸素:絕大多數是矩陣乘法。訓練時把海量資料灌進網路、反覆調整權重,推論時把輸入一層層乘過去,全都是矩陣運算。

而矩陣運算有個美好的性質:結果矩陣裡每個位置的計算彼此獨立,可以同時進行。上百萬個獨立小任務,正好餵飽 GPU 上千條執行緒。這就是為什麼深度學習的爆發與 GPU 綁在一起:不是巧合,是問題形狀與硬體架構剛好咬合。

NVIDIA 後來更進一步,在 GPU 裡加入 Tensor Core:專門加速矩陣運算的特化硬體單元。一般核心是通用平行工人,Tensor Core 是專攻 AI 數學的特種部隊,讓訓練與推論的效率再上一層。

CUDA:指揮千軍萬馬的程式模型

硬體有了,還需要一套讓程式指揮它的方法,這就是 CUDA:NVIDIA 的平行運算平台與程式模型。它讓開發者用接近 C++ 的語法,寫出同時在數千條執行緒上執行的程式。

CUDA 的世界觀是三層的:在 GPU 上跑的函式叫 kernel;每次執行由大量執行緒(thread)分工,每條執行緒用自己的編號認領一小塊資料;執行緒組成 block,block 再排成 grid 蓋滿整個資料集。

// CUDA kernel: each thread adds one element
__global__ void add(int n, float *x, float *y) {
  int i = blockIdx.x * blockDim.x + threadIdx.x;
  if (i < n) y[i] = x[i] + y[i];
}

上面這段是 CUDA 入門教材的經典範例:兩個陣列相加。CPU 版本要用迴圈一個一個加;CUDA 版本讓每條執行緒認領一個位置,整個陣列同時加完。看懂這五行,平行運算的精髓就抓到了。

一般人需要會寫 CUDA 嗎?不需要。PyTorch、TensorFlow 這些框架早就把 CUDA 包在底層,你寫的每一行模型程式,最後都會被翻譯成 GPU 上的平行運算。但懂了這層觀念,「為什麼要挑有 CUDA 支援的顯卡」「為什麼 AI 軟體綁 NVIDIA 生態系」這些問題就都有了答案。

把三個名詞收進同一張圖

最後幫你把觀念收攏:GPU 是擅長平行運算的硬體,CUDA 是指揮它的軟體平台,Tensor Core 是專為 AI 矩陣運算再特化的硬體單元。三者疊起來,就是「AI 離不開 GPU」的完整答案。

想更深入的話,NVIDIA Deep Learning Institute 有加速運算的入門課程,附雲端 GPU 環境可以直接動手;官方開發者部落格上的 CUDA 入門文也值得一讀。理解了硬體這一層,再看任何 AI 產品的規格表,你都能看出門道。

本文源起本文取材自 NVIDIA Deep Learning Institute 的「An Even Easier Introduction to CUDA」相關資源,由酒Ann 消化後以自己的視角重新編寫成中文。原版課程可在 NVIDIA DLI 修習。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

CPU 和 GPU 到底差在哪?
CPU 只有少數幾個核心,配大量快取記憶體,擅長按順序處理一件接一件的序列任務,例如回應你的每一次鍵盤輸入。GPU 則有數百個核心、能同時處理上千條執行緒,擅長把複雜問題拆成成千上萬個獨立小任務一次算完。NVIDIA 的說法是:CPU 是電腦的大腦,GPU 是它的靈魂。
為什麼深度學習特別適合 GPU?
因為神經網路的訓練與推論,底層絕大多數是矩陣運算,而矩陣裡每個位置的計算彼此獨立,可以同時進行。這種「可以拆開同時做」的性質正好對上 GPU 的平行架構,所以同樣的訓練工作,GPU 能用遠高於 CPU 的效率完成,每單位能源做的工也更多。
CUDA 是什麼?一定要會寫才能用 AI 嗎?
CUDA 是 NVIDIA 的平行運算平台與程式模型,讓開發者用類似 C++ 的語法指揮 GPU 上的大量執行緒。一般 AI 使用者不需要會寫 CUDA:PyTorch、TensorFlow 這些框架已經幫你把 CUDA 包好了。但懂它的基本觀念,你會更清楚「跑在 GPU 上」到底是什麼意思。
Tensor Core 跟一般 GPU 核心有什麼不同?
Tensor Core 是 NVIDIA 在 GPU 裡加入的專用硬體單元,專門加速矩陣運算,而矩陣運算正是 AI 工作負載的核心。可以理解成:一般核心是通用的平行工人,Tensor Core 是專攻 AI 那類數學的特化工人,兩者搭配讓 GPU 對深度學習的效率再上一層。