NVIDIA CUDA bildet die Grundlage dafür, dass Gra­fik­kar­ten nicht nur Bilder berechnen, sondern auch komplexe wis­sen­schaft­li­che und KI-bezogene Be­rech­nun­gen mit hoher Ge­schwin­dig­keit ausführen können. Ohne CUDA und ver­gleich­ba­re Be­schleu­ni­gungs­öko­sys­te­me wären viele Fort­schrit­te im Bereich ge­ne­ra­ti­ver KI in ihrer heutigen Ge­schwin­dig­keit und Ska­lie­rung kaum denkbar.

Cloud GPU VM
Maximale KI-Per­for­mance mit Ihrer Cloud GPU VM
  • Exklusive NVIDIA H200 GPUs für höchste Re­chen­leis­tung
  • Ga­ran­tier­te Per­for­mance durch voll­stän­dig de­di­zier­te CPU-Kerne
  • 100 % Hosting in Deutsch­land für maximale Da­ten­si­cher­heit und DSGVO-Kon­for­mi­tät
  • Einfaches, kal­ku­lier­ba­res Preis­mo­dell mit festem Preis pro Stunde

Was ist CUDA?

Das Akronym CUDA stand ur­sprüng­lich für „Compute Unified Device Ar­chi­tec­tu­re“, wird von NVIDIA heute aber nur noch als Eigenname für die haus­ei­ge­ne pro­prie­tä­re Plattform für par­al­le­les Rechnen auf Gra­fik­kar­ten geführt. Sie er­mög­licht es Ent­wick­le­rin­nen und Ent­wick­lern, die Re­chen­leis­tung von NVIDIA-GPUs für all­ge­mei­ne Be­rech­nun­gen zu nutzen. Dabei handelt es sich nicht mehr um klas­si­sche Gra­fik­be­rech­nun­gen, sondern um so­ge­nann­tes General-Purpose GPU Computing (GPGPU).

Im Gegensatz zu einer CPU, die für eine geringe Anzahl komplexer Aufgaben optimiert ist, besteht eine GPU aus Tausenden kleiner Re­chen­ein­hei­ten. Diese können viele ähnliche Be­rech­nun­gen gleich­zei­tig durch­füh­ren und eignen sich daher sehr gut für hoch­gra­dig parallele Aufgaben. CUDA stellt die not­wen­di­gen Pro­gram­mier­schnitt­stel­len, Compiler und Lauf­zeit­um­ge­bun­gen bereit, damit Software diese Par­al­le­li­tät nutzen kann.

Pro­gram­mie­ren­de können CUDA über Pro­gram­mier­spra­chen wie C++, Python oder Fortran verwenden. Der ei­gent­li­che Re­chen­code wird dabei als so­ge­nann­te Kernel-Funktion auf der GPU aus­ge­führt, während die CPU die Steuerung des Programms übernimmt. CUDA stellt APIs und Lauf­zeit­funk­tio­nen bereit, um Daten zwischen CPU- und GPU-Speicher zu über­tra­gen oder Spei­cher­be­rei­che über Funk­tio­nen wie Unified Memory einfacher zu verwalten.

Mitt­ler­wei­le hat CUDA sich von einer reinen Ent­wick­ler­platt­form zu einem um­fas­sen­den Software-Ökosystem ent­wi­ckelt. Viele bekannte Werkzeuge wie PyTorch, Ten­sor­Flow oder NVIDIA RAPIDS nutzen CUDA im Hin­ter­grund, um Be­rech­nun­gen auf NVIDIA-GPUs zu be­schleu­ni­gen. Dadurch können An­wen­de­rin­nen und Anwender GPU-Be­schleu­ni­gung nutzen, ohne jede Be­rech­nung selbst in CUDA pro­gram­mie­ren zu müssen.

Hinweis

CUDA ist eng an NVIDIA-Hardware gebunden: Als pro­prie­tä­re Plattform wird CUDA aus­schließ­lich für CUDA-com­pa­ti­ble NVIDIA-GPUs ent­wi­ckelt und un­ter­stützt. An­wen­dun­gen, die direkt CUDA verwenden, können daher nicht ohne Weiteres auf GPUs anderer Her­stel­ler wie AMD oder Intel aus­ge­führt werden. Diese enge Ver­zah­nung von Hardware und Software gilt als einer der Gründe für die hohe Leis­tungs­fä­hig­keit und die breite Ver­brei­tung von CUDA im Bereich KI und High Per­for­mance Computing.

Tech­ni­sche Grund­la­gen: Die CUDA-Hier­ar­chie

Das zentrale Konzept von CUDA ist die Auf­tei­lung einer großen Be­rech­nung in viele kleine Aufgaben. Statt eine Operation nach­ein­an­der aus­zu­füh­ren, wird sie auf Tausende parallele Aus­füh­rungs­ein­hei­ten verteilt. Diese Struktur wird durch die CUDA-Hier­ar­chie or­ga­ni­siert.

Die kleinste Einheit ist ein Thread. Threads führen denselben Kernel-Code aus, arbeiten jedoch auf un­ter­schied­li­chen Daten und können bei Ver­zwei­gun­gen un­ter­schied­li­che Aus­füh­rungs­pfa­de nehmen. Bei­spiels­wei­se kann jeder Thread ein einzelnes Element einer Matrix be­ar­bei­ten.

Mehrere Threads werden zu einem so­ge­nann­ten Block zu­sam­men­ge­fasst. Threads innerhalb eines Blocks können mit­ein­an­der kom­mu­ni­zie­ren und gemeinsam einen schnellen Spei­cher­be­reich, den so­ge­nann­ten Shared Memory, nutzen. Dies er­mög­licht eine ef­fi­zi­en­te Zu­sam­men­ar­beit innerhalb des Blocks.

Mehrere Blöcke bilden wiederum ein Grid. Ein Kernel-Aufruf startet stets ein voll­stän­di­ges Grid aus vielen Blöcken. Die CUDA-Laufzeit verteilt diese Blöcke au­to­ma­tisch auf die ver­füg­ba­ren Re­chen­ein­hei­ten der GPU.

Auf Hardware-Ebene werden die Blöcke von so­ge­nann­ten Streaming Mul­tipro­ces­sors (SMs) aus­ge­führt. Jeder SM kann mehrere Blöcke gleich­zei­tig be­ar­bei­ten. Dadurch wird die ver­füg­ba­re Hardware möglichst effizient aus­ge­las­tet. Innerhalb eines SMs werden Threads zu­sätz­lich in Gruppen von 32 Threads or­ga­ni­siert, die als Warps be­zeich­net werden. Diese Warps werden gemeinsam geplant und bei gleichem Aus­füh­rungs­pfad synchron aus­ge­führt. Die Warp-Struktur ist ein wichtiger Grund dafür, warum CUDA-An­wen­dun­gen häufig sehr hohe Re­chen­leis­tun­gen erreichen können.

Relevanz für KI und LLMs

Der Fort­schritt im Bereich KI basiert we­sent­lich auf Deep-Learning-Modellen, die enorme Mengen ma­the­ma­ti­scher Ope­ra­tio­nen ausführen müssen. Das Training und die Inferenz von LLMs bestehen größ­ten­teils aus Ma­trix­mul­ti­pli­ka­tio­nen, Vek­tor­ope­ra­tio­nen und Ten­sor­be­rech­nun­gen. Genau für solche hoch­gra­dig par­al­le­len Aufgaben wurden GPUs und NVIDIA CUDA optimiert.

CUDA sorgt dabei nicht nur für hohe Re­chen­leis­tung, sondern stellt auch die Soft­ware­grund­la­ge bereit, auf der nahezu alle wichtigen KI-Frame­works aufbauen. Dadurch können Ent­wick­le­rin­nen und Ent­wick­ler komplexe Modelle trai­nie­ren, ohne jede GPU-Operation selbst im­ple­men­tie­ren zu müssen.

Massive Par­al­le­li­sie­rung für neuronale Netze

Neuronale Netze bestehen aus Millionen oder sogar Mil­li­ar­den von Pa­ra­me­tern. Während des Trainings müssen enorme Mengen ma­the­ma­ti­scher Ope­ra­tio­nen durch­ge­führt werden. Viele dieser Be­rech­nun­gen sind un­ab­hän­gig von­ein­an­der und können parallel aus­ge­führt werden. Genau hier liegt die Stärke von CUDA. Statt einige wenige CPU-Kerne zu verwenden, können Tausende GPU-Kerne gleich­zei­tig an derselben Aufgabe arbeiten. Ma­trix­mul­ti­pli­ka­tio­nen, Ak­ti­vie­rungs­funk­tio­nen und Gra­di­en­ten­be­rech­nun­gen lassen sich dadurch massiv be­schleu­ni­gen. Dies reduziert die Trai­nings­zeit von KI-Modellen von Monaten auf Tage oder Wochen.

Tensor Cores und KI-Be­schleu­ni­gung

Seit der Volta-Ar­chi­tek­tur in­te­griert NVIDIA spezielle Re­chen­ein­hei­ten namens Tensor Cores. Diese wurden speziell für KI-Workloads ent­wi­ckelt und können Ma­trix­ope­ra­tio­nen deutlich schneller ausführen als klas­si­sche CUDA-Kerne. CUDA er­mög­licht es Soft­ware­bi­blio­the­ken, diese Hardware au­to­ma­tisch zu nutzen. Ent­wi­ckeln­de müssen Tensor Cores in vielen Fällen nicht direkt an­spre­chen. Statt­des­sen verwenden Frame­works wie PyTorch oder Ten­sor­Flow die ent­spre­chen­den CUDA-Bi­blio­the­ken im Hin­ter­grund. Vor allem bei Deep Learning, ge­ne­ra­ti­ver KI und LLMs liefern Tensor Cores einen er­heb­li­chen Leis­tungs­ge­winn.

Hinweis

Mit CUDA Toolkit 13.0 wurden Offline-Kom­pi­lie­rung und Bi­blio­theks­un­ter­stüt­zung für Maxwell, Pascal und Volta entfernt. Für diese Ar­chi­tek­tu­ren bleibt die CUDA-12.x-Reihe relevant.

Ska­lie­rung über mehrere GPUs

Die größten LLMs passen längst nicht mehr auf eine einzelne GPU. Modelle mit Hunderten Mil­li­ar­den Pa­ra­me­tern werden deshalb über viele GPUs verteilt. NVIDIA CUDA stellt die Grundlage für diese Ska­lie­rung bereit. Spezielle Bi­blio­the­ken er­mög­li­chen eine schnelle Kom­mu­ni­ka­ti­on zwischen mehreren GPUs innerhalb eines Servers oder sogar über ganze GPU-Cluster hinweg. Dadurch können Da­ten­sät­ze, Modelle und Be­rech­nun­gen auf viele Be­schleu­ni­ger verteilt werden.

Fundament aktueller KI-Frame­works

Die meisten Ent­wick­le­rin­nen und Ent­wick­ler arbeiten nicht direkt mit CUDA-Code. Statt­des­sen nutzen sie Frame­works wie PyTorch oder Ten­sor­Flow. Diese Frame­works über­set­zen viele Be­rech­nun­gen au­to­ma­tisch in CUDA-Ope­ra­tio­nen. Dadurch pro­fi­tie­ren An­wen­den­de von GPU-Be­schleu­ni­gung, ohne sich mit den Details der Hardware be­schäf­ti­gen zu müssen. Trotzdem bleibt CUDA die ei­gent­li­che tech­ni­sche Grundlage. Wenn ein Tensor in PyTorch auf eine NVIDIA-GPU ver­scho­ben wird, laufen die Be­rech­nun­gen letztlich über CUDA-Bi­blio­the­ken und -Kernel.

Das CUDA-Ökosystem: Libraries und Tools

CUDA besteht nicht nur aus einer Pro­gram­mier­schnitt­stel­le. Im Laufe der Jahre hat NVIDIA ein um­fang­rei­ches Ökosystem aus Bi­blio­the­ken, Ent­wick­lungs­werk­zeu­gen und Op­ti­mie­rungs­frame­works aufgebaut. Dieses Ökosystem ist einer der wich­tigs­ten Gründe für die Dominanz von NVIDIA CUDA im KI-Bereich. Die Mehrheit der Pro­gram­mie­re­rin­nen und Pro­gram­mie­rer schreibt kaum noch eigenen CUDA-Code. Statt­des­sen greifen sie auf spe­zia­li­sier­te Bi­blio­the­ken zurück, die bereits für moderne NVIDIA-GPUs optimiert wurden. Dadurch lässt sich eine hohe Leistung erzielen, ohne jede GPU-Op­ti­mie­rung selbst durch­füh­ren zu müssen.

Wichtige CUDA-Bi­blio­the­ken

Ein Be­stand­teil des CUDA-Öko­sys­tems sind spe­zia­li­sier­te Bi­blio­the­ken, die häufig benötigte Re­chen­ope­ra­tio­nen bereits hoch­op­ti­miert für CUDA-com­pa­ti­ble GPUs be­reit­stel­len und dadurch die Ent­wick­lung deutlich ver­ein­fa­chen. Zu den wich­tigs­ten Bi­blio­the­ken zählen:

  • cuBLAS: cuBLAS ist das Akronym für CUDA Basic Linear Algebra Sub­rou­ti­nes; hierbei handelt es sich um eine GPU-op­ti­mier­te Im­ple­men­tie­rung der BLAS-Bi­blio­thek für lineare Algebra. Sie bietet Funk­tio­nen für Ma­trix­mul­ti­pli­ka­tio­nen, Vek­tor­ope­ra­tio­nen und andere ma­the­ma­ti­sche Stan­dard­auf­ga­ben.
  • cuDNN: cuDNN steht für CUDA Deep Neural Network Library. Die Bi­blio­thek enthält hoch­op­ti­mier­te Im­ple­men­tie­run­gen für neuronale Netze und wird von Frame­works wie PyTorch und Ten­sor­Flow intensiv genutzt.
  • NCCL: NCCL (NVIDIA Coll­ec­ti­ve Com­mu­ni­ca­ti­ons Library) ist für die Kom­mu­ni­ka­ti­on zwischen mehreren GPUs zuständig. Sie er­mög­licht den schnellen Austausch von Pa­ra­me­tern und Zwi­schen­er­geb­nis­sen während des Trainings großer Modelle. Sie spielt ins­be­son­de­re beim ver­teil­ten Training großer LLMs eine zentrale Rolle.
  • TensorRT: TensorRT dient der Op­ti­mie­rung und Be­schleu­ni­gung trai­nier­ter KI-Modelle für die Inferenz. Die Bi­blio­thek ana­ly­siert Modelle und optimiert deren Aus­füh­rung für NVIDIA-GPUs.
  • cuFFT: cuFFT bietet GPU-be­schleu­nig­te Fourier-Trans­for­ma­tio­nen. Die Bi­blio­thek wird vor allem in wis­sen­schaft­li­chen An­wen­dun­gen, Si­gnal­ver­ar­bei­tung und Si­mu­la­tio­nen ein­ge­setzt.

Wichtige CUDA-Tools

Neben den Bi­blio­the­ken umfasst das CUDA-Ökosystem ver­schie­de­ne Ent­wick­lungs- und Ana­ly­se­werk­zeu­ge, die Ent­wi­ckeln­de bei der Er­stel­lung, Feh­ler­su­che und Leis­tungs­op­ti­mie­rung von GPU-be­schleu­nig­ten An­wen­dun­gen un­ter­stüt­zen:

  • CUDA Toolkit: Das CUDA Toolkit bildet die Grundlage der CUDA-Ent­wick­lung. Es enthält Compiler, Bi­blio­the­ken, Lauf­zeit­kom­po­nen­ten und Do­ku­men­ta­ti­on.
  • NVCC: NVCC ist der of­fi­zi­el­le CUDA-Compiler von NVIDIA. Er übersetzt CUDA-Code in aus­führ­ba­ren GPU-Code und trennt dabei au­to­ma­tisch CPU- und GPU-Anteile eines Programms. Ent­wick­le­rin­nen und Ent­wick­ler verwenden NVCC ty­pi­scher­wei­se beim Erstellen eigener CUDA-An­wen­dun­gen.
  • Nsight Systems: Nsight Systems ist ein Ana­ly­se­werk­zeug für die Per­for­mance-Un­ter­su­chung komplexer An­wen­dun­gen. Es zeigt, wie CPU, GPU und Speicher während der Pro­gramm­aus­füh­rung zu­sam­men­ar­bei­ten. Dadurch lassen sich Engpässe und Op­ti­mie­rungs­po­ten­zia­le iden­ti­fi­zie­ren.
  • Nsight Compute: Nsight Compute dient der de­tail­lier­ten Analyse einzelner CUDA-Kernel. Pro­gram­mie­ren­de können damit Spei­cher­zu­grif­fe, Aus­las­tung und Effizienz der GPU un­ter­su­chen. Das Werkzeug wird häufig verwendet, um besonders leis­tungs­in­ten­si­ve An­wen­dun­gen weiter zu op­ti­mie­ren.
  • CUDA-GDB: CUDA-GDB erweitert den bekannten GNU-Debugger um GPU-Debugging-Funk­tio­nen. Ent­wick­le­rin­nen und Ent­wick­ler können damit CUDA-An­wen­dun­gen ana­ly­sie­ren und Fehler direkt im GPU-Code un­ter­su­chen. Dies er­leich­tert die Ent­wick­lung CUDA-basierter Software erheblich.
Hinweis

Das Toolkit für CUDA kann unter Ubuntu 24.04 über die of­fi­zi­el­len NVIDIA-Pa­ket­quel­len in­stal­liert werden. Al­ter­na­tiv stehen lokale In­stal­la­ti­ons­pa­ke­te sowie Runfile-Installer für spezielle An­wen­dungs­fäl­le zur Verfügung. Für die meisten Nut­ze­rin­nen und Nutzer empfiehlt NVIDIA die In­stal­la­ti­on über die Pa­ket­ver­wal­tung, da sich CUDA-Kom­po­nen­ten und spätere Updates dadurch einfacher verwalten lassen.

Fazit

CUDA hat sich von einer Plattform für GPU-Pro­gram­mie­rung zu einem der wich­tigs­ten Software-Fun­da­men­te der heutigen IT ent­wi­ckelt. Die Ar­chi­tek­tur er­mög­licht es, die enorme Par­al­le­li­tät von CUDA-com­pa­ti­ble NVIDIA-GPUs effizient zu nutzen und bildet die tech­ni­sche Grundlage zahl­rei­cher KI-, Deep-Learning- und HPC-An­wen­dun­gen. Vor allem im Bereich großer Sprach­mo­del­le und ge­ne­ra­ti­ver KI ist CUDA heute ein zentrales Bin­de­glied zwischen Software und Hardware. Wer verstehen möchte, wie KI-Systeme trainiert und betrieben werden, sollte die Grund­la­gen von NVIDIA CUDA kennen.

Zum Hauptmenü