Gedächtnisgesteuerte GPU-Teilung in Kubernetes mit NVIDIA CUDA 13.4
NVIDIA CUDA 13.4 führt eine Einhaltung von Speicherbegrenzungen für das GPU-Fraktionieren ein, wodurch genaue Speichermengen sowie begrenzte Burst-Limits möglich werden. Der Open-Source-GPU-Fraktionierungsoperator und der KAI-Scheduler v0.18.0 ermöglichen Speicherlimits pro Arbeitslast sowie Rechenschichten wie Time-Slicing oder SM-Sharing auf Kubernetes-Node.
Tags
Kurze Zusammenfassung
NVIDIA CUDA 13.4 führt eine Einhaltung von Speicherbegrenzungen für das GPU-Fraktionieren ein, wodurch genaue Speichermengen sowie begrenzte Burst-Limits möglich werden. Der Open-Source-GPU-Fraktionierungsoperator und der KAI-Scheduler v0.18.0 ermöglichen Speicherlimits pro Arbeitslast sowie Rechenschichten wie Time-Slicing oder SM-Sharing auf Kubernetes-Node.
Gedächtnisgestütztes GPU-Teilen in Kubernetes mit NVIDIA CUDA 13.4
Da KI-Arbeitslasten immer vielfältiger werden, steigt die Nachfrage nach flexibler Verwaltung von GPU-Ressourcen in Kubernetes-Umgebungen. Viele Anwendungen benötigen nur einen Bruchteil der Kapazität eines GPUs, doch herkömmliche Zuweisungsmethoden weisen oft ganze Geräte zu, wodurch erhebliche Kapazitäten ungenutzt bleiben. NVIDIA begegnet dieser Herausforderung mit CUDA 13.4, indem es eine für Anwendungen transparente Gedächtnisgrenzkontrolle einführt. Diese Aktualisierung ermöglicht genaue Mengen an Speicher, garantierte Minima mit maximal steigerbaren Werten sowie die Wahl zwischen Zeitstückelungs- und Sm-Sharing-Berechnungsmodi.
Um diese Funktionen in großem Umfang einzusetzen, hat NVIDIA den open-source GPU Fractioning Operator veröffentlicht. Unter der Organisation KAI Scheduler auf GitHub gehostet, läuft dieser Operator zusammen mit dem NVIDIA GPU Operator. Seine Hauptfunktion besteht darin, auf jedem GPU-Node einen Multi-Process Service (MPS) einzurichten und zu überwachen, Speichergrenzen sowie Berechnungsmodi pro Arbeitslast anzuwenden und den Speicher- sowie Rechenaufwand pro GPU-Fraktion statt pro gesamtem GPU zu messen.
Die Architektur der Durchsetzung
CUDA 13.4 bietet die grundlegende Möglichkeit zur Gedächtniskontrolle, doch ein Kubernetes-Cluster kann sie nicht eigenständig nutzen. Auf jedem GPU-Node ist ein Mechanismus erforderlich, um vor dem Start des Prozesses die Speichergrenzen und Berechnungsmodi jedes Pod-Kontainers anzuwenden sowie den tatsächlichen Verbrauch pro Fraktion zu melden. Diese Aufgabe liegt beim Node selbst, unabhängig davon, welcher Scheduler die Arbeitslast zugewiesen hat.
Der GPU Fractioning Operator übernimmt diese Rolle. Er liest die im Pod-YAML vom Scheduler geschriebenen Ressourcen- und Modus-Annotierungen. Sobald der Scheduler die GPUs für eine Arbeitslast auswählt und deren Speicherzuweisung sowie Berechnungsmodus in den per-Kontainer-Annotationen des Pods festhält, konfiguriert der GPU Fractioning Operator die zugewiesenen GPUs, um diese Grenzen durchzusetzen.
KAI Scheduler v0.18.0 ist der erste Scheduler, der mit dem GPU Fractioning Operator integriert ist. Ab dieser Version enthält KAI Scheduler einen GPU-Teilungsmodus namens NvFractions. Dieser Modus wählt aus, welcher Teil welcher GPU jeder Arbeitslast zugeordnet wird, und schreibt die notwendigen Anmerkungen dazu. Administratoren können NvFractions während der Installation von KAI Scheduler mithilfe einer Helm-Flag aktivieren, wodurch auch der GPU Fractioning Operator als Abhängigkeit installiert wird.
Konfigurierung von Speichenanfragen und -limits
Arbeitslasten können mithilfe spezifischer Anmerkungen anteilige GPU-Anforderungen deklarieren. Es gibt vier wichtige Anmerkungen, die vier grundlegende Fragen beantworten: Wie viel Speicher ist benötigt, wie stark kann sich die Arbeitslast ausdehnen, wie wird die Rechenleistung geteilt, und auf wie viele GPUs erstreckt sie sich.
Administratoren können die Speichernachfrage als absoluten Wert unter Verwendung standardmäßiger Kubernetes-Einheiten angeben. Der Containername ist Teil der Schlüsselangabe, um sicherzustellen, dass die Anmerkung den richtigen Container anspricht. Alternativ können Arbeitslasten einen Teil einer GPU deklarieren. Diese Möglichkeit ermöglicht es einer Arbeitslast, ein garantiertes Minimum (die Anfrage) sowie ein Maximum festzulegen, das erreicht werden kann, wenn Speicher frei ist.
Falls eine Limit-Anmerkung weggelassen wird, entspricht das Limit der Anfrage, und die Arbeitslast ist auf genau das begrenzt, was sie angefordert hat. Ein Teil-Limit muss größer als gpu-fraction und kleiner als 1. sein.
Rechenmodi: Time-Slicing vs. SM-Sharing
CUDA 13.4 führt zwei unterschiedliche Rechenmodule zum Teilen von GPUs ein, wobei jedes Modus andere Leistungs- und Isolationsmerkmale aufweist.
Time-Slicing ist der Standardmodus. Er arbeitet seriell, sodass die Arbeitslasten abwechselnd die gesamte GPU nutzen. Wenn jede Arbeitslast ihren vollen Anteil verwendet hat, erhält jede etwa 1/n der Zeit. Jede ungenutzte Zeit wird gleichmäßig unter den anderen Arbeitslasten aufgeteilt. Entscheidend ist, dass jede Arbeitslast in ihrem eigenen Fehlerdomänen läuft, was eine vollständige Fehlerisolation gewährleistet. Wenn eine Aufgabe abstürzt, beeinflusst das die anderen nicht.
SM-Sharing (Streaming Multiprocessor Sharing) ist parallel. In diesem Modus werden die Streaming Multiprocessoren der GPU auf verschiedene Arbeitslasten aufgeteilt, wobei alle gleichzeitig und kontinuierlich laufen. Nichts wird im Voraus festgelegt; die GPU-Hardware weist die SMs zu und gibt sie frei, je nach Bedarf der Arbeitslasten. Wenn alle Arbeitslasten beschäftigt sind, liegt die Aufteilung bei etwa 1/n. Sollte jedoch eine Arbeitslast inaktiv werden, gehen ihre SMs an die anderen, sodass eine einzelne aktive Arbeitslast sie alle nutzen kann. In diesem Modus teilen sich die Arbeitslasten einen einzigen Fehlerbereich.
Da eine gemeinsam genutzte GPU gleichzeitig nur einen Rechenvorgang ausführt, platziert der KAI Scheduler niemals eine arbeitsteilige Arbeitslast und eine SM-Sharing-Arbeitslast auf derselben GPU. Der Scheduler überwacht dies pro GPU, nicht pro Knoten, wodurch ein Knoten beide Modi auf verschiedenen GPUs hosten kann.
Praktische Implementierungsbeispiele
Die folgenden Beispiele zeigen, wie Pods für verschiedene Sharing-Szenarien mithilfe von KAI Scheduler-Annotierungen konfiguriert werden können.
Inferenzserver mit SM-Sharing
Dieses Beispiel stellt einen Inferenzserver dar, der auf vier GPUs verteilt ist. Er benötigt eine garantierte Auslastung von 40Gi auf jeder GPU und kann bei inaktiven Nachbargrundgeräten bis zu 60Gi nutzen. Er läuft parallel zu anderen Arbeitslasten, anstatt auf seine Reihe zu warten.
apiVersion: v1
kind: Pod
metadata:
name: inference
labels:
kai.scheduler/queue: default-queue
annotations:
nvidia.com/container.app.gpu-memory.request: "40Gi"
nvidia.com/container.app.gpu-memory.limit: "60Gi"
nvidia.com/container.app.gpu-compute.mode: "sm-sharing"
gpu-fraction-num-devices: "4"
spec:
schedulerName: kai-scheduler
containers:
- name: app
image: nvcr.io/nvidia/cuda:13.0.2-base-ubuntu24.04Entwicklungsjob mit Arbeitsteilung
Dieses Beispiel eignet sich für Entwicklungs- oder Batch-Jobs, wie z. B. Notebooks oder kleine Feinabstimmungen. Er benötigt die Hälfte der Kapazität jeder der beiden GPUs und kann bei freier Speicherkapazität auf 80% anwachsen. Die Arbeitsteilung gewährleistet eine Fehlerisolation zwischen den Jobs.
metadata:
annotations:
gpu-fraction: "0.5"
gpu-fraction.limit: "0.8"
nvidia.com/container.app.gpu-compute.mode: "time-slicing"
gpu-fraction-num-devices: "2"
spec:
schedulerName: kai-scheduler
containers:
- name: appEinstieg und Community
Um diese Funktionen nutzen zu können, müssen Administratoren sicherstellen, dass KAI Scheduler mit der global.nvFractions.set=true-Flagge installiert ist. Diese Konfiguration aktiviert den NvFractions-Modus und installiert den GPU Fractioning Operator.
Sowohl der GPU Fractioning Operator als auch KAI Scheduler sind auf GitHub unter der KAI Scheduler-Organisation verfügbar. Anleitung zur Installation und Konfiguration aller drei Sharing-Mechanismen finden sich in den Admin- und Benutzerhandbüchern. Entwickler können außerdem dem Slack-Kanal beitreten oder an zweimonatlich stattfindenden Community-Treffen teilnehmen, um Fragen zu stellen und zum Projekt beizutragen.
Für weitere Informationen zu CUDA 13.4 wenden Sie sich an die offizielle Ankündigung. Zudem wird NVIDIA bei KubeCon + CloudNativeCon NA 2026 in Salt Lake City, Utah, vom November 9-12. anwesend sein.
Fazit
Durch die durch das Speichermanagement erzwungene GPU-Teilung in Kubernetes wird die Ressourceneffizienz für KI-Arbeitslasten erheblich verbessert. Durch die Kombination des GPU Fractioning Operators mit dem KAI Scheduler v0.18.0 sowie CUDA 13.4 können Plattformteams Speichergrenzen pro Arbeitslast festlegen und zwischen Zeitstückelung sowie Sm-Sharing-Berechnungsmodi wählen. Diese Flexibilität ermöglicht es Organisationen, mit der vorhandenen Infrastruktur mehr Arbeitslasten zu verarbeiten, während gleichzeitig eine strenge Kontrolle über die Speichernutzung und die Bereitstellung von Rechenressourcen gewährleistet wird.
Quelle: https://developer.nvidia.com/blog/memory-enforced-gpu-sharing-in-kubernetes-with-nvidia-cuda-13-4



