確認顯示卡計算能力與 CUDA 版本對應關係
開發者應透過指令 nvidia-smi --query-gpu=name,compute_cap --format=csv 檢查顯示卡的計算能力(Compute Capability),而非僅確認是否有 NVIDIA GPU。不同計算能力對應不同架構:7.5 為 Turing,8.0/8.6 為 Ampere,8.9 為 Ada,9.0 為 Hopper。
CUDA 13 已停止支援 Maxwell、Pascal 和 Volta 架構的顯示卡,使用這些舊卡的用戶必須安裝 CUDA 12 工具包才能繼續開發。此外,GTX 16 系列雖屬 Turing 架構但不具備 Tensor Core,進行 Tensor Core 相關工作需 RTX 20 系列或更新型號(或 T4)。
特定功能對硬體有嚴格要求:Ampere 專屬指令需 Ampere 或更新架構;FP8 精度運算需 Ada 或 Hopper 架構;Hopper 專屬特性如 TMA 和 WGMMA 則僅限 H100,多數用戶可能需透過租賃方式取得。
驅動程式、工具包與 PyTorch 執行環境的區別
nvidia-smi 標題欄顯示的 CUDA 版本代表驅動程式支援的最高版本,並非系統中實際安裝的工具包版本。透過 pip 安裝的 PyTorch 會自帶 CUDA 執行時環境,因此 torch.cuda.is_available() 回傳 True 僅表示 PyTorch 能使用 GPU,並不代表 nvcc 編譯器已正確安裝。
在 WSL 2 環境中,不應在 Linux 發行版內部安裝驅動程式,因為實際使用的是 Windows 端的驅動。用戶應使用僅包含工具包的 WSL-Ubuntu 安裝程式,以避免驅動衝突或配置錯誤。
GPU 非同步執行導致的計時誤差與正確測量方法
由於 GPU 啟動是非同步的,直接在 Python 中對 x @ y 等運算進行計時,主要測量的是指令發送到佇列的時間,而非實際計算耗時。這意味著測量結果主要反映啟動開銷而非計算時間。
正確的基準測試應包含預熱(warm up)、同步(synchronize)以及使用 CUDA Events 記錄時間。建議執行多次迭代並取平均值,以減少波動影響。範例程式碼顯示需先執行幾次空操作讓 GPU 進入穩定狀態,再透過 torch.cuda.Event 精確記錄計算區間。
計算矩陣乘法吞吐量時,應使用約 2*M*N*K FLOPs 除以時間的公式。記錄數據時務必標註資料類型(dtype),因為 FP32 與 BF16 的基準效能差異巨大,混用會導致比較結果無效。
效能分析器計數器權限問題與解決方案
預設情況下,非管理員用戶無法讀取 GPU 效能計數器,導致 Nsight Compute(ncu)執行時出現 ERR_NVGPUCTRPERM 錯誤。解決方法包括以 sudo 執行 ncu(需注意 sudo 通常會重置 PATH,需使用完整路徑),或由系統管理員啟用所有用戶的計數器存取權限。
在 Windows 或 WSL 環境中,此權限需在 Windows 端進行設定。若透過雲端服務租用 GPU,應在簽約前測試計數器存取功能,因為某些託管容器平台可能會阻擋對硬體效能計數器的讀取權限,影響效能分析工作。
環境驗證與前置準備建議
在進行複雜開發前,建議先執行一個簡單的「加一」核心測試,並在每個 CUDA 呼叫後檢查錯誤。使用 nvcc -arch=native 編譯後,分別透過 nsys 和 ncu 執行一次。若此流程成功,代表驅動、工具包、GPU 及兩個分析器均配置正確。
該教學系列還涵蓋了前置知識,包括指標操作、矩陣扁平化索引、矩陣乘法及其 FLOP 計算、PyTorch 基礎等內容,並比較了取得 GPU 資源的不同方式。整個設置課程時長約 40 至 45 分鐘,相關程式碼與影片連結已提供於原始來源中。




