Lesson 025:Local LLM 已經提過 GPU 與 VRAM:GPU 是大量平行數值運算很重要的硬體,而 VRAM 是 GPU 上用來放模型權重與中間資料的高速記憶體。
但很多人第一次真的跑 AI 時會遇到一個很奇怪的情況:
「我電腦明明有 NVIDIA 顯卡,為什麼程式還是跑在 CPU?」
因為硬體存在,不代表軟體已經知道怎麼把工作送給它。
這時就會碰到 CUDA。
CUDA 不是一張顯卡
CUDA(Compute Unified Device Architecture) 是 NVIDIA 建立的平行運算平台與程式設計模型。
可以把 GPU 想成一座有大量工作站的高速工廠。
CUDA 則像:
- 工廠的工作規則
- 軟體和 GPU 溝通的介面
- 編譯與開發工具
- 大量已經最佳化的函式庫
所以「支援 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 程式。
它通常會顯示:
- GPU 型號
- Driver 版本
- 顯示的 CUDA 相容版本資訊
- GPU 使用率
- VRAM 使用量
- 哪些 Process 正在使用 GPU
所以當 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 壞掉。可能是:
- 沒有支援的 NVIDIA GPU
- Driver 問題
- 安裝的是 CPU-only 的 PyTorch
- 版本相容性問題
- 虛擬環境裡裝錯套件
所以排錯不能只看「我有沒有顯卡」。
程式怎麼決定用 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)
逐行看:
import torch:載入 PyTorch。device = ...:如果 CUDA 可用,就把device設成cuda;否則用cpu。torch.tensor(...):建立一個 Tensor,並指定放在哪個裝置。print(x.device):印出這個 Tensor 實際在哪裡。
張量(Tensor) 可以先理解成神經網路最常處理的多維數值資料結構。
之後真正的模型也會有類似概念:模型權重與輸入資料通常必須在相容的裝置上,才能一起計算。
CUDA Version 為什麼看起來總是很亂?
你可能會同時看到:
- Driver 顯示某個 CUDA version
- 系統安裝某版 CUDA Toolkit
- PyTorch 套件又標示另一個 CUDA build
這是很多新手最痛苦的地方。
先抓一個重點:
這些版本代表不同軟體層,不一定要求字面上的版本號完全一模一樣。
真正要看的是 NVIDIA Driver、你使用的框架 build、CUDA runtime 與硬體之間是否在官方支援範圍內。
因此安裝 PyTorch 時,最安全的做法通常不是亂找一個 CUDA Toolkit 版本,而是依照 PyTorch 官方安裝頁與 NVIDIA 相容性文件選擇組合。
CUDA 和 VRAM 有什麼關係?
CUDA 讓程式能使用 GPU 計算,但它不會替你增加 VRAM。
如果模型需要 30 GB,而你的 GPU 只有 12 GB VRAM,CUDA 不會神奇地把 12 變成 30。
這時可能需要:
- 更小模型
- 量化
- CPU offload
- 多 GPU
- 不同推論框架
這也就是為什麼 Lesson 025 的 Quantization 會和 CUDA、GPU 經常一起出現。
CUDA 只拿來跑 LLM 嗎?
不是。
CUDA 廣泛用在:
- 深度學習訓練
- LLM 推論
- 圖片生成
- 科學計算
- 影片處理
- 數值模擬
- 其他大量平行計算工作
所以理解 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 這整條軟體鏈。
留言
有想法、疑問或想補充的地方,都可以留在這裡。
還沒有留言,來當 1F 吧。