← 返回首頁
LESSON 028AI 開發12 分鐘

CUDA 是什麼?為什麼有 NVIDIA GPU 還不夠,AI 軟體還需要一整套加速平台

第 28 篇把 GPU、VRAM 與 CUDA 串起來,解釋 Driver、CUDA Toolkit、PyTorch 與 GPU 加速的關係,並用 nvidia-smi 與 torch.cuda.is_available() 看懂自己的環境是否真的能用 GPU。

今天用這個比喻GPU 像一座高速工廠,CUDA 則是讓軟體知道怎麼把工作送進工廠、分配機器並把結果拿回來的整套作業系統

Lesson 025:Local LLM 已經提過 GPU 與 VRAM:GPU 是大量平行數值運算很重要的硬體,而 VRAM 是 GPU 上用來放模型權重與中間資料的高速記憶體。

但很多人第一次真的跑 AI 時會遇到一個很奇怪的情況:

「我電腦明明有 NVIDIA 顯卡,為什麼程式還是跑在 CPU?」

因為硬體存在,不代表軟體已經知道怎麼把工作送給它。

這時就會碰到 CUDA。

CUDA 不是一張顯卡

CUDA(Compute Unified Device Architecture) 是 NVIDIA 建立的平行運算平台與程式設計模型。

可以把 GPU 想成一座有大量工作站的高速工廠。

CUDA 則像:

所以「支援 CUDA」通常不是在說某一個單一程式,而是在說這套 NVIDIA GPU 計算生態。

為什麼 GPU 適合 AI?

CPU 很強,但它通常更擅長處理複雜、分支多、順序性高的工作。

GPU 則設計成能同時處理大量相似數值運算。

大型神經網路裡有非常多矩陣乘法與向量運算,這些工作剛好很適合大量平行處理。

所以現代深度學習框架會盡可能把這些數值工作交給 GPU。

但你通常不需要自己從零寫 GPU 指令。

PyTorch、TensorFlow 等框架已經把很多底層工作包起來。

Driver、CUDA Toolkit、PyTorch 到底誰是誰?

最容易搞混的是這三層。

NVIDIA Driver

驅動程式(Driver) 是作業系統和 GPU 溝通的基礎軟體。

沒有正確的 Driver,作業系統連 GPU 都可能無法正常使用。

CUDA Toolkit

CUDA Toolkit 是一組開發工具、編譯器、函式庫與相關元件,讓開發者建立與分析 GPU 加速程式。

PyTorch

PyTorch 是高階深度學習框架。

你通常在 Python 裡寫 PyTorch,而 PyTorch 底下再透過 CUDA 相關能力使用 NVIDIA GPU。

可以先畫成:

你的 Python 程式
↓
PyTorch
↓
CUDA 相關函式庫 / Runtime
↓
NVIDIA Driver
↓
GPU

這是一張簡化圖,但方向很重要:

Python 不是直接拿手碰 GPU,中間有很多軟體層。

第一個必看指令:nvidia-smi

在有 NVIDIA Driver 的系統上,常見檢查是:

nvidia-smi

這是在 Terminal / CLI 執行的命令,不是 Python 程式。

它通常會顯示:

所以當 AI 程式很慢時,nvidia-smi 常是第一個快速檢查工具。

如果你看到:

Memory-Usage: 12000MiB / 24576MiB

MiB 是 Mebibyte,是一種二進位容量單位。這裡可以先理解成 GPU 記憶體目前用了大約 12 GB、總共大約 24 GB 等級。

但 nvidia-smi 有輸出,不代表 PyTorch 一定能用 CUDA

下一步要問的是:

你現在這個 Python 環境裡的 PyTorch,能不能真的看見 CUDA?

可以寫:

import torch

print(torch.cuda.is_available())

這三行在做什麼?

第一行:

import torch

載入 PyTorch 套件。

第二行:

torch.cuda.is_available()

詢問 PyTorch:「目前這個環境是否有可使用的 CUDA 裝置?」

第三部分 print(...) 把結果印出來。

如果結果是:

True

代表 PyTorch 目前可以使用 CUDA。

如果是:

False

不代表 GPU 壞掉。可能是:

所以排錯不能只看「我有沒有顯卡」。

程式怎麼決定用 GPU?

一個最小概念範例:

import torch

device = "cuda" if torch.cuda.is_available() else "cpu"
x = torch.tensor([1.0, 2.0, 3.0], device=device)
print(x.device)

逐行看:

  1. import torch:載入 PyTorch。
  2. device = ...:如果 CUDA 可用,就把 device 設成 cuda;否則用 cpu。
  3. torch.tensor(...):建立一個 Tensor,並指定放在哪個裝置。
  4. print(x.device):印出這個 Tensor 實際在哪裡。

張量(Tensor) 可以先理解成神經網路最常處理的多維數值資料結構。

之後真正的模型也會有類似概念:模型權重與輸入資料通常必須在相容的裝置上,才能一起計算。

CUDA Version 為什麼看起來總是很亂?

你可能會同時看到:

這是很多新手最痛苦的地方。

先抓一個重點:

這些版本代表不同軟體層,不一定要求字面上的版本號完全一模一樣。

真正要看的是 NVIDIA Driver、你使用的框架 build、CUDA runtime 與硬體之間是否在官方支援範圍內。

因此安裝 PyTorch 時,最安全的做法通常不是亂找一個 CUDA Toolkit 版本,而是依照 PyTorch 官方安裝頁與 NVIDIA 相容性文件選擇組合。

CUDA 和 VRAM 有什麼關係?

CUDA 讓程式能使用 GPU 計算,但它不會替你增加 VRAM。

如果模型需要 30 GB,而你的 GPU 只有 12 GB VRAM,CUDA 不會神奇地把 12 變成 30。

這時可能需要:

這也就是為什麼 Lesson 025 的 Quantization 會和 CUDA、GPU 經常一起出現。

CUDA 只拿來跑 LLM 嗎?

不是。

CUDA 廣泛用在:

所以理解 CUDA,不只是為了 Local LLM。

它其實是進入現代 GPU 計算世界的一張地圖。

你現在需要會寫 CUDA Kernel 嗎?

大多數剛進 AI 開發的人,不需要。

你可以先會:

nvidia-smi

以及:

print(torch.cuda.is_available())

再知道 GPU、Driver、CUDA、PyTorch 是不同層,就已經能解決很多「為什麼模型沒吃到 GPU」的問題。

真正要做到極致效能時,才需要更深入理解 CUDA Kernel、Memory、Stream、Compiler 等概念。

一句話帶走

GPU 是計算硬體;CUDA 是 NVIDIA 讓軟體能有效使用 GPU 做通用平行運算的一整套平台。看到 AI 程式『有 GPU 卻沒加速』時,要檢查的不只是顯卡,而是 Driver、框架與 CUDA 這整條軟體鏈。

正式資料來源

比喻是理解入口;正式定義與細節請以原始資料為準。

  1. NVIDIA CUDA Programming Guide ↗
  2. NVIDIA CUDA Toolkit Documentation ↗
  3. PyTorch — CUDA semantics ↗
← 上一章027CLI、Git、GitHub 是什麼?看懂 cd、pull、commit、push 之後,AI 開發流程就不再像黑魔法
下一章 →029Hugging Face 是什麼?為什麼找模型、資料集、Tokenizer 與範例程式時大家都會去那裡
COMMUNITY

留言

有想法、疑問或想補充的地方,都可以留在這裡。

0 / 1200