CUDA und GPU-Programmierung: Wie KI auf Grafikkarten rechnet
Kurz: GPUs führen tausende einfache Rechnungen parallel aus; mit CUDA (NVIDIA) oder ROCm (AMD) schreibt man Kernel-Funktionen, meist aber nutzt man Frameworks wie PyTorch, die sie bereits mitbringen.
Genauer: Eine CPU hat wenige, schnelle Kerne für komplexe Abläufe; eine GPU hat tausende kleine Kerne für massiv parallele Rechnungen mit gleicher Operation auf vielen Daten (SIMT). Matrixmultiplikationen in neuronalen Netzen passen perfekt.
Im Detail
Das Modell
- Kernel: Funktion, die tausendfach parallel auf der GPU läuft.
- Thread → Block → Grid: Threads sind in Blöcken gruppiert (teilen Shared Memory), Blöcke bilden ein Grid; Hardware gruppiert 32 Threads zu einem Warp (laufen im Gleichschritt, Verzweigungen kosten).
- Speicherhierarchie: Register → Shared Memory/L1 → L2 → VRAM (HBM/GDDR); Hostspeicher (RAM) getrennt: Kopien über PCIe/NVLink sind teuer.
- Tensor Cores: Spezialeinheiten für Matrixmultiplikation (FP16/BF16/FP8).
- Engpässe: Rechenbegrenzt vs. speicherbandbreiten-begrenzt; Occupancy, Kohärenz.
CUDA-Beispiel
__global__ void add(const float* a, const float* b, float* c, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) c[i] = a[i] + b[i];
}
// Aufruf: add<<<(n + 255) / 256, 256>>>(d_a, d_b, d_c, n);Ablauf: Speicher auf der GPU anlegen (cudaMalloc), Daten kopieren (cudaMemcpy), Kernel starten, Ergebnis zurückkopieren. Aus Python: Numba, CuPy, Triton (OpenAI) und PyTorch (tensor.to('cuda')) kapseln das.
Ökosystem
- CUDA (NVIDIA): Marktführer, Bibliotheken cuBLAS, cuDNN, NCCL (Multi-GPU-Kommunikation), TensorRT.
- ROCm/HIP (AMD), oneAPI/SYCL (Intel), Metal (Apple), Vulkan Compute, OpenCL, WebGPU (Browser).
- Frameworks: PyTorch, JAX, TensorFlow nutzen diese Backends; Treiber/Toolkit-Versionen passend halten (häufige Fehlerquelle:
CUDA out of memory, falsche Version). - Mehrere GPUs: Daten-/Modell-/Pipeline-Parallelität (siehe Training im Großen).
- Cloud-GPUs mieten statt kaufen; Kosten pro Stunde, Auslastung beachten.
Praxis und Fehlersuche
nvidia-smi: Auslastung, VRAM, Temperatur.CUDA out of memory: Batchgröße verkleinern, Mixed Precision (bf16), Gradient Checkpointing, Modell quantisieren,torch.cuda.empty_cache().- Langsamer als CPU? Zu kleine Aufgaben, viele Host↔GPU-Kopien, Python-Schleifen: batchen/vektorisieren.
- Profiling: PyTorch Profiler, Nsight.
- Energie/Kühlung: GPUs ziehen 200–700 W: Netzteil und Airflow beachten.
- Lernpfad: erst PyTorch auf GPU nutzen, dann Numba/Triton, dann CUDA C++.
- Verwandt: Warum GPUs für KI, KI-Chips (TPU/NPU), Inferenz-Server.
Siehe auch: Warum GPUs für KI, KI-Chips im Vergleich, KI-Frameworks, Grafikkarten