View a markdown version of this page

Verwenden Sie Timeslicing mit NVIDIA-GPUs auf Amazon EKS - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten unter, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie Timeslicing mit NVIDIA-GPUs auf Amazon EKS

Time-slicing ermöglicht es mehreren Pods, sich eine einzige physische NVIDIA-GPU zu teilen. Der Kubernetes-Scheduler platziert mehrere Pods auf derselben GPU, und der CUDA-Scheduler der GPU multiplext die Arbeit. Time-slicing GPU-sharing ist die einfachste Strategie. Es verwendet nur Software, erfordert keine spezielle Hardware und funktioniert auf jedem NVIDIA-GPU-Instance-Typ AWS. Time-slicing bietet keine Speicher- oder Rechenisolierung zwischen Pods, die sich eine GPU teilen. Es eignet sich am besten für Workloads mit niedriger GPU-Auslastung, z. B. für Inferenzdienste, die zwischen Anfragen inaktiv sind, oder für Entwicklungsumgebungen, in denen sich mehrere Benutzer eine GPU teilen. Verwenden Sie stattdessen Multi-Instance GPU (MIG) für Workloads, die Speicher auf Hardwareebene und Rechenisolierung erfordern.

In Amazon EKS können Sie Timeslicing entweder mit dem NVIDIA DRA-Treiber oder dem NVIDIA-Geräte-Plugin verwalten. Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin

Time-slicing kann nur mit Karpenter verwendet werden, wenn Sie statische Kapazitätsbereitstellung verwenden. Time-slicing ist derzeit nicht im EKS-Automatikmodus verfügbar.

Time-slicing passt gut, wenn:

  • Die GPU-Auslastung ist durchweg gering, z. B. bei latenzempfindlichen Inferenzdiensten, die zwischen Anfragen inaktiv sind.

  • Mehrere Entwickler teilen sich einen einzigen GPU-Knoten für Notebook- oder Entwicklungsarbeiten.

  • Ihre Knoten verwenden einen GPU-Instance-Typ, der MIG nicht unterstützt, wie z. B. die g6e Familien g5g6,, oder.

  • Sie können akzeptieren, dass ein Pod gelegentlich langsamer ist, weil ein anderer Pod auf derselben GPU ausgelastet ist.

Erwägen Sie einen anderen Ansatz, wenn:

  • Sie benötigen eine Speicherisolierung. Pods auf einer GPU mit Zeitaufteilung teilen sich denselben GPU-Speicher, und ein Pod kann den Speicher erschöpfen, auf den andere Pods angewiesen sind. Verwenden Sie MIG für die Speicherisolierung.

  • Sie benötigen eine vorhersehbare Latenz oder Servicequalität pro Pod. Der GPU-Scheduler verteilt die Rechenleistung nach bestem Bemühen ohne Garantien auf mehrere Steckplätze.

  • Sie führen Trainings-Workloads aus. Time-slicing fügt Kontextwechsel hinzu, der die Trainingseffizienz reduziert. Ein Checkpoint-Job, den ein anderer Pod verlangsamt, muss von seinem letzten Checkpoint aus erneut versucht werden.

Überlegungen

Lesen Sie die folgenden Überlegungen, bevor Sie Time-Slicing in der Produktion einsetzen.

Allgemeine Überlegungen

  • Keine Speicherisolierung: Pods, die sich eine Time-Slice-GPU teilen, teilen sich ihren Speicher. Ein Pod kann Speicher zuweisen, den andere Pods benötigen, was zu Fehlern bei unzureichendem Arbeitsspeicher führen kann. Passen Sie die Anzahl der Pods, die sich jede GPU teilen, an den Speicherbedarf Ihrer Workloads an. Wenn Ihre Pods regelmäßig große Modelle laden, teilen Sie sich weniger Pods pro GPU oder verwenden Sie MIG.

  • Best-effort gemeinsame Nutzung der Rechenleistung: Der GPU-Scheduler teilt die Rechenleistung nach bestem Bemühen auf die Pods auf und garantiert nicht, dass die Rechenleistung für jeden Pod proportional ist.

  • Time-slicing und MPS kann nicht dieselbe GPU gemeinsam nutzen: Time-slicing Stellt den GPU-Rechenmodus auf einDEFAULT, während der Multi-Process NVIDIA-Service (MPS) dies erfordert. EXCLUSIVE_PROCESS Sie können beide Strategien im selben Cluster verwenden, jedoch nicht gleichzeitig auf derselben physischen GPU. Time-slicing hat auch keine Auswirkungen auf eine MIG-Instanz. Verwenden Sie stattdessen MPS, um eine einzelne MIG-Instanz containerübergreifend gemeinsam zu nutzen.

  • Per-container Metriken: NVIDIA Data Center GPU Manager (DCGM) kann einzelnen Containern keine Metriken zuordnen, wenn Time-Slicing aktiv ist. GPU-level Metriken sind weiterhin verfügbar, aber Sie können nicht identifizieren, welcher Pod eine bestimmte Menge an GPU-Ressourcen verbraucht hat.

Überlegungen zum NVIDIA DRA-Treiber

  • Alpha-Funktion: Time-slicing Durch den DRA-Treiber ist das TimeSlicingSettings Feature Gate erforderlich. Dabei handelt es sich um eine Alpha-Funktion, die standardmäßig deaktiviert ist. Weitere Informationen finden Sie unter Verwenden Sie GPU-Timeslicing mit dem NVIDIA DRA-Treiber.

  • User-mediated Nur gemeinsame Nutzung: Pods teilen sich nur eine GPU, indem sie auf dieselbe ResourceClaim oder verweisen, wobei der Namespace-Bereich giltResourceClaimTemplate, sodass die gemeinsame Nutzung nicht über Namespaces hinweg möglich ist. System-mediated Teilen ist eine vorgeschlagene zukünftige Funktion.

  • Deaktivieren Sie das integrierte Geräte-Plugin auf Bottlerocket: Der DRA-Treiber kann nicht zusammen mit dem NVIDIA-Geräte-Plugin auf demselben Knoten ausgeführt werden. Deaktivieren Sie auf Bottlerocket das integrierte Geräte-Plug-In, für das Bottlerocket Version 1.63.0 oder höher erforderlich ist. Weitere Informationen finden Sie unter Installieren Sie den NVIDIA DRA-Treiber.

  • Rechenunterstützung: Der NVIDIA DRA-Treiber wird bei der statischen Kapazitätsbereitstellung in Karpenter, EKS-verwalteten Knotengruppen oder selbstverwalteten Knoten unterstützt und wird im EKS-Automodus nicht unterstützt. Weitere Informationen finden Sie in der statischen NodePool Dokumentation zu Karpenter auf der Website von Karpenter.

Überlegungen zum NVIDIA-Geräte-Plugin

  • Best-effort gemeinsame Nutzung von Rechenleistung mit Steckplätzen: Das Geräte-Plug-in kündigt eine feste Anzahl von Steckplätzen pro GPU an. Wenn ein einzelner Pod mehr als einen Slot anfordert, erhält er keine zusätzliche Rechenleistung. Aktivieren Sie die fail-requests-greater-than-one Option, um Pods abzulehnen, die mehr als einen Slot anfordern.

  • Bereitstellung mit Karpenter: Karpenter zählt jede nvidia.com/gpu Anfrage als physische GPU, auch wenn Time-Slicing auf der GPU aktiviert ist. Weitere Informationen finden Sie in Karpenter Ausgabe #2140 unter. https://github.com/kubernetes-sigs/karpenter/issues/2140 GitHub

  • Keine Unterstützung für den EKS-Automatikmodus: Der EKS-Automodus verwaltet das NVIDIA-Geräte-Plug-In und stellt dessen Konfiguration nicht zur Verfügung. Da für Time-Slicing eine Geräte-Plug-in-Konfiguration erforderlich ist, können Sie keine Time-Slicing-Konfiguration auf EKS-Auto-Mode-Knoten anwenden.

  • Time-slicing Konfigurationsänderungen: Das NVIDIA-Geräte-Plugin überwacht das Time-Slicing nicht auf Änderungen. ConfigMap Starten Sie das Geräte-Plug-In neu, nachdem Sie die Konfiguration aktualisiert haben.

Konfigurationsoptionen

Sie können Timeslicing für NVIDIA-GPUs mit den NVIDIA-AMIs EKS-optimized AL2023 und Bottlerocket verwenden. Die Time-Slicing-Einstellungen variieren je nachdem, ob Sie den NVIDIA DRA-Treiber oder das NVIDIA-Geräte-Plug-In verwenden.

NVIDIA DRA driver

Die EKS-optimized beschleunigten AMIs enthalten den NVIDIA DRA-Treiber nicht. Wenn Sie Bottlerocket verwenden, müssen Sie das integrierte settings.kubelet-device-plugins.nvidia.enabled = false NVIDIA-Geräte-Plug-In deaktivieren, bevor Sie den NVIDIA-DRA-Treiber verwenden, indem Sie die Benutzerdaten des Knotens eingeben. Dafür ist Bottlerocket-Version 1.63.0 oder höher erforderlich. Weitere Informationen finden Sie unter Installieren Sie den NVIDIA DRA-Treiber.

Mit dem NVIDIA DRA-Treiber wird Time-Slicing über konfiguriert. ResourceClaimTemplates Das interval Feld steuert die CUDA-Timeslice-Dauer.

Intervall Description

Standard

Verwendet das integrierte Standardintervall des NVIDIA-GPU-Treibers

Short

Kürzeres Intervall; Kontexte wechseln häufiger

Mittel

Zwischenintervall

Long

Jeder Kontext läuft länger pro Spielzug, bevor er unterbrochen wird

NVIDIA device plugin
  • Bottlerocket — Das AMI enthält ein vorinstalliertes NVIDIA-Geräte-Plugin. Sie konfigurieren Time-Slicing über die Bottlerocket-Einstellungen, ohne dass ein separates Geräte-Plug-In, Helm-Chart oder installiert werden muss. ConfigMap

  • AL2023 — Sie installieren das NVIDIA-Geräte-Plugin wie unter beschrieben und stellen die Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin Time-Slicing-Konfiguration über eine bereit. ConfigMap

    Die folgenden Optionen steuern, wie das NVIDIA-Geräte-Plugin Time-Slice-GPUs bewirbt und verwaltet. Die Feldnamen unterscheiden sich zwischen den Bottlerocket-Einstellungen und dem AL2023ConfigMap, wie in den nachfolgenden Verfahren dargestellt.

    Option Empfohlener Wert Description

    Replikas

    2—8

    Die Anzahl der planbaren Steckplätze, die pro physischer GPU angekündigt werden sollen. Höhere Werte ermöglichen mehr gemeinsame Nutzung, erhöhen jedoch die Konflikte zwischen den Pods.

    Standardmäßig umbenennen

    false

    Wannfalse, fordern Pods annvidia.com/gpu, wodurch die Kompatibilität mit vorhandenen Manifesten gewahrt bleibt. Wenntrue, kündigt das Geräte-Plug-In die Ressource als annvidia.com/gpu.shared, und Pods müssen diesen Namen anfordern. Setzen Sie diesen Wert, true wenn Sie sowohl gemeinsam genutzte als auch dedizierte GPU-Knotenpools ausführen und möchten, dass Workloads die gemeinsam genutzte Ressource explizit auswählen.

    Fehlschlagen von mehr als einer Anforderung fehl

    true

    Lehnt Pods ab, die mehr als einen Time-Slice-Slot anfordern. Ein Pod, der mehr als einen Slot anfordert, erhält keine proportionale Berechnung. Aktivieren Sie diese Einstellung, um häufige Fehlkonfigurationen zu verhindern.

    Eine vollständige Liste der Optionen für die gemeinsame Nutzung von GPUs und deren Standardwerte finden Sie in der Dokumentation zum NVIDIA Kubernetes-Geräte-Plug-In unter. GitHub

Verwenden Sie GPU-Timeslicing mit dem NVIDIA DRA-Treiber

Mit dem NVIDIA DRA-Treiber teilen sich Pods eine GPU, indem sie gpu.nvidia.com DeviceClass mit einem Time-Slicing auf einen Common verweisenResourceClaim, der den anfordert. GpuConfig

Der NVIDIA DRA-Treiber implementiert derzeit ein vom Benutzer vermitteltes Time-Slicing: Eine GPU wird nur von den Pods und Containern gemeinsam genutzt, auf die Sie ausdrücklich auf dieselbe Behauptung hinweisen. Da a ResourceClaim und a einen Namespace-Bereich haben, müssen ResourceClaimTemplate sich die Pods, die auf diese Weise eine GPU teilen, im selben Namespace befinden. Um eine GPU für mehrere Container in einem einzelnen Pod gemeinsam zu nutzen, müssen Sie dafür sorgen, dass jeder Container im Claim auf denselben Anforderungsnamen verweist. Container, die auf unterschiedliche Anforderungsnamen verweisen, erhalten jeweils eine separate GPU. Erstellen Sie ein separates Intervall ResourceClaimTemplate für jedes Zeitintervall, das Sie benötigen, und eines für jeden Namespace, in dem Sie GPUs gemeinsam nutzen möchten.

System-mediatedBeim Timeslicing teilt sich der Treiber eine GPU für unabhängige Claims (einschließlich Namespaces), und zwar auf der Grundlage von Kriterien, die das System definiert, und nicht anhand eines von Ihnen konfigurierten Claims. Weitere Informationen zum systemgestützten Time-Slicing finden Sie unter Time-Slicing von GPUs (Ausgabe #659) und unter System-mediated Pull Request #1257 unter. https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/pull/1257 GitHub

Wichtig

Time-slicing Durch den DRA-Treiber wird das TimeSlicingSettings Feature Gate benötigt, bei dem es sich um eine Alpha-Funktion handelt, die standardmäßig deaktiviert ist. Wenn Sie die TimeSlicing Sharing-Strategie anfordern, ohne dieses Feature Gate zu aktivieren, kann der Treiber das Gerät nicht vorbereiten und der Pod bleibt ContainerCreating mit einem FailedPrepareDynamicResources Ereignis verbunden, das gemeldet wirderror validating GPU config: unknown GPU sharing strategy: TimeSlicing. Aktiviere das Feature Gate nur, wenn du die Risiken akzeptierst, die mit der Verwendung einer Alpha-Funktion verbunden sind.

Voraussetzungen

  • Ein Amazon EKS-Cluster, auf dem Kubernetes Version 1.34 oder höher ausgeführt wird. Der NVIDIA DRA-Treiber wird bei der statischen Kapazitätsbereitstellung in Karpenter, EKS-verwalteten Knotengruppen oder selbstverwalteten Knoten unterstützt.

  • Knoten mit NVIDIA-GPU-Instance-Typen, die EKS-optimized das AL2023 NVIDIA AMI verwenden.

  • Der NVIDIA DRA-Treiber wurde wie unter beschrieben installiertInstallieren Sie den NVIDIA DRA-Treiber, wobei das TimeSlicingSettings Feature Gate aktiviert war.

Verfahren

  1. Erstellen Sie eineResourceClaim, die eine GPU mit der TimeSlicing Sharing-Strategie anfordert. Mehrere Pods, die auf diese Behauptung verweisen, verwenden dieselbe physische GPU.

    cat <<EOF | kubectl apply -f - apiVersion: resource.k8s.io/v1 kind: ResourceClaim metadata: name: shared-timeslice-gpu spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.nvidia.com count: 1 config: - requests: ["gpu"] opaque: driver: gpu.nvidia.com parameters: apiVersion: resource.nvidia.com/v1beta1 kind: GpuConfig sharing: strategy: TimeSlicing timeSlicingConfig: interval: Long EOF
  2. Stellen Sie zwei oder mehr Pods bereit, die den gemeinsam genutzten Pods ResourceClaim namentlich referenzieren. Jeder Pod verweist über resourceClaims und auf den Anspruchresources.claims.

    cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: share-a spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: cuda image: nvidia/cuda:12.6.0-base-ubuntu22.04 command: ["nvidia-smi", "-L"] resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimName: shared-timeslice-gpu restartPolicy: OnFailure EOF
  3. Stellen Sie sicher, dass die Pods dieselbe physische GPU verwenden. Führen Sie nvidia-smi -L jeden Pod aus und vergewissern Sie sich, dass sie dieselbe GPU-UUID melden.

    kubectl logs share-a

    Eine Beispielausgabe sieht wie folgt aus. Ein zweiter Pod, der auf dieselbe Behauptung verweist, meldet eine identische GPU UUID, was bestätigt, dass sich beide Pods eine physische GPU teilen.

    GPU 0: NVIDIA L4 (UUID: GPU-b41973ee-5d0a-cde8-6287-12b53f861f02)

Verwenden Sie GPU-Time-Slicing auf Bottlerocket-Knoten mit dem NVIDIA-Geräte-Plugin

Auf Bottlerocket enthält das beschleunigte AMI das EKS-optimized NVIDIA-Geräte-Plugin. Sie aktivieren Time-Slicing über die settings.kubelet-device-plugins.nvidia Einstellungen, die Bottlerocket beim Booten des Nodes in die Geräte-Plug-in-Konfiguration rendert.

Voraussetzungen

  • Ein Amazon EKS-Cluster. Das folgende Verfahren versorgt NVIDIA-GPU-Knoten mit dem EKS-optimized Bottlerocket NVIDIA AMI.

  • Karpenter wurde in Ihrem Cluster installiert und konfiguriert, da das folgende Verfahren einen Karpenter verwendet, EC2NodeClass um die Time-Slicing-Einstellungen in den Benutzerdaten des Bottlerocket-Knotens bereitzustellen. Weitere Informationen finden Sie unter Erste Schritte mit Karpenter auf der Karpenter-Website.

  • kubectlkonfiguriert für die Kommunikation mit Ihrem Cluster, weitere Informationen finden Sie unterInstallieren oder aktualisieren Sie kubectl.

Verfahren

Fügen Sie die Time-Slicing-Einstellungen zu den Bottlerocket-Benutzerdaten für Ihre GPU-Knoten hinzu. Im folgenden Beispiel werden vier Steckplätze pro GPU konfiguriert. Die Art und Weise, wie Sie Benutzerdaten angeben, hängt davon ab, wie Sie Knoten bereitstellen. Das folgende Beispiel zeigt einen KarpenterEC2NodeClass.

cat <<EOF | kubectl apply -f - apiVersion: karpenter.k8s.aws/v1 kind: EC2NodeClass metadata: name: gpu-bottlerocket-timeslicing spec: amiFamily: Bottlerocket amiSelectorTerms: - alias: bottlerocket@latest role: eksctl-KarpenterNodeRole-<cluster-name> subnetSelectorTerms: - tags: karpenter.sh/discovery: <cluster-name> securityGroupSelectorTerms: - tags: karpenter.sh/discovery: <cluster-name> userData: | [settings.kubelet-device-plugins.nvidia] device-sharing-strategy = "time-slicing" [settings.kubelet-device-plugins.nvidia.time-slicing] replicas = 4 rename-by-default = false fail-requests-greater-than-one = true EOF

Wenn Knoten, die mit diesen Einstellungen ausgestattet sind, dem Cluster beitreten, kündigt das Geräte-Plug-In vier nvidia.com/gpu Steckplätze für jede physische GPU an. Sie fordern sie in Ihrer Workload-Spezifikation mit Container-Ressourcenanforderungen oder Grenzwerten für die nvidia.com/gpu erweiterte Ressource an.

Verwenden Sie das GPU-Time-Slicing auf AL2023-Knoten mit dem NVIDIA-Geräte-Plugin

Auf AL2023 installieren Sie das NVIDIA-Geräte-Plug-In wie unter beschriebenInstallieren Sie das NVIDIA Kubernetes-Geräte-Plugin, und stellen die Time-Slicing-Konfiguration in einem bereit. ConfigMap

Voraussetzungen

Verfahren

  1. Erstellen Sie das Time-Slicing ConfigMap in dem nvidia Namespace, in dem Sie das Geräte-Plug-In installiert haben. Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin In diesem Beispiel werden vier Steckplätze pro GPU konfiguriert.

    cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: nvidia-device-plugin-config namespace: nvidia data: config.yaml: | version: v1 sharing: timeSlicing: renameByDefault: false failRequestsGreaterThanOne: true resources: - name: nvidia.com/gpu replicas: 4 EOF
  2. Aktualisieren Sie die bestehende Version des NVIDIA-Geräte-Plug-ins, um auf ConfigMap den config.name Wert zu verweisen. Das --reuse-values Flag behält die Werte bei, die Sie bei der Installation des Geräte-Plug-ins Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin festgelegt haben.

    helm upgrade nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --reuse-values \ --set config.name=nvidia-device-plugin-config
Anmerkung

Das Geräte-Plugin wird nicht automatisch neu geladen, wenn Sie das ändern. ConfigMap Nachdem Sie die Time-Slicing-Konfiguration aktualisiert haben, starten Sie die Geräte-Plugin-Pods neu, um die Änderung zu übernehmen.

Stellen Sie sicher, dass das GPU-Time-Slicing aktiv ist

Vergewissern Sie sich, dass das Geräte-Plug-in die erwartete Anzahl von Steckplätzen angibtReady, nachdem Ihre Knoten in Zeitaufteilung eingerichtet sind, und dass sich die Pods eine physische GPU teilen.

Anmerkung

Die Überprüfung der gemeinsamen UUID in diesem Verfahren zeigt das Time-Slicing am deutlichsten, wenn die Pods auf derselben physischen GPU landen. Auf einem Knoten mit einer einzigen GPU kündigt das Geräte-Plugin vier Steckplätze an, und alle vier Pods teilen sich diese GPU, sodass sie dieselbe UUID melden. Auf einem Knoten mit mehreren physischen GPUs kann der Scheduler Pods auf verschiedenen GPUs platzieren. Diese Pods melden unterschiedliche UUIDs, obwohl Time-Slicing aktiv ist. Um die gemeinsame Nutzung auf einer GPU zu demonstrieren, planen Sie die Arbeitslast auf einen Instanztyp mit einer einzelnen GPU ein. Fügen Sie beispielsweise einen Knotenselektor hinzu, z. B. node.kubernetes.io/instance-type: g6.2xlarge zur Pod-Spezifikation.

  1. Vergewissern Sie sich, dass der Knoten die konfigurierte Anzahl von GPU-Steckplätzen bekannt gibt. Bei vier Steckplätzen pro GPU meldet 4 sich ein Knoten mit einer physischen GPU.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

    Eine Beispielausgabe sieht wie folgt aus.

    NAME GPU ip-192-168-11-225.us-west-2.compute.internal 4
  2. Erstellen Sie eine Bereitstellung, in der vier Replikate ausgeführt werden, von denen jedes einen GPU-Steckplatz anfordert.

    cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: timeslicing-demo spec: replicas: 4 selector: matchLabels: app: timeslicing-demo template: metadata: labels: app: timeslicing-demo spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: cuda image: nvidia/cuda:12.6.0-base-ubuntu22.04 command: ["bash", "-c", "nvidia-smi --query-gpu=uuid --format=csv,noheader; sleep infinity"] resources: limits: nvidia.com/gpu: 1 EOF
  3. Vergewissern Sie sich, dass alle vier Pods auf demselben Knoten geplant sind.

    kubectl get pods -l app=timeslicing-demo -o wide
  4. Vergewissern Sie sich, dass alle vier Pods dieselbe GPU-UUID melden. Eine einzige gemeinsame UUID für alle vier Pods bestätigt, dass eine physische GPU im Zeitmultiplex ausgeführt wird.

    kubectl logs -l app=timeslicing-demo --prefix

    Eine Beispielausgabe sieht wie folgt aus.

    [pod/timeslicing-demo-xxxxxxxxxx-aaaaa/cuda] GPU-c0583cce-87c5-c736-db7f-6d3128c84d03 [pod/timeslicing-demo-xxxxxxxxxx-bbbbb/cuda] GPU-c0583cce-87c5-c736-db7f-6d3128c84d03 [pod/timeslicing-demo-xxxxxxxxxx-ccccc/cuda] GPU-c0583cce-87c5-c736-db7f-6d3128c84d03 [pod/timeslicing-demo-xxxxxxxxxx-ddddd/cuda] GPU-c0583cce-87c5-c736-db7f-6d3128c84d03