EMZETT.
Login

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