Verwenden von UltraServern in Amazon SageMaker HyperPod - Amazon SageMaker AI

Verwenden von UltraServern in Amazon SageMaker HyperPod

Die HyperPod-Unterstützung von SageMaker für Ultraserver bietet leistungsstarke GPU-Rechenfunktionen für KI- und Machine-Learning-Workloads. Diese Ultraserver basieren auf der NVIDIA GB200- und NVL72-Architektur und bieten NVLink-Konnektivität für 18 GB200-Instances in einer Dual-Rack-Konfiguration, was insgesamt 72 B200-GPUs entspricht. Diese NVLink-Fabric ermöglicht es Workloads, GPU-Kommunikation zu nutzen, wodurch die nutzbare GPU-Kapazität und der adressierbare Speicher über das hinaus erhöht werden, was mit diskreten Instances möglich ist, und unterstützt komplexere und ressourcenintensivere KI-Modelle. Die NVLink-Konnektivität wird durch die NVIDIA IMEX-Technologie ermöglicht, die die Low-Level-Konfiguration für sichere GPU-Fabric-Verbindungen zwischen Instances innerhalb desselben Racks übernimmt.

HyperPod vereinfacht die Bereitstellung und Verwaltung dieser GPU-Cluster durch intelligente Topologieerkennung und automatisierte Konfiguration. Die Plattform erkennt Knoten automatisch und kennzeichnet sie mit ihrem physischen Standort und ihren Kapazitätsblockinformationen, was eine topologieorientierte Planung für verteilte Workloads unterstützt. HyperPod abstrahiert die komplexen IMEX-Konfigurationsanforderungen, sodass Sie sich auf die Workload-Bereitstellung statt auf die GPU-Fabric-Konfiguration auf niedriger Ebene konzentrieren können. Sie können flexible Bereitstellungsoptionen wählen, darunter sowohl selbstverwaltete Knoten als auch EKS-verwaltete Knotengruppen. Amazon EKS bietet optimierte AMIs, die vorkonfigurierte NVIDIA-Treiber, Fabric Manager, IMEX-Treiber und die gesamte erforderliche Systemsoftware für einen reibungslosen Betrieb enthalten.

Die Integration umfasst Funktionen zur Pod-Platzierung, die sicherstellen, dass verteilte Workloads mithilfe von standardmäßigen Kubernetes-Topologie-Labels optimal auf alle NVL72-Domain verteilt werden. Integrierte Überwachungs- und automatische Wiederherstellungsfunktionen bieten Betriebsunterstützung, wobei der AMI-Integritätsagent GPU-Fehler anhand von Kernelprotokollen erkennt und Probleme automatisch beheben oder fehlerhafte Knoten in verwalteten Knotengruppen ersetzen kann. Diese Kombination aus GPU-Skalierung, intelligenter Workload-Platzierung und automatisierten Abläufen hilft Ihnen, sich auf Ihre KI/ML-Innovationen statt auf die Komplexität der Infrastruktur zu konzentrieren und gleichzeitig die maximale Leistung aus Ihren GPU-Investitionen herauszuholen.

Gehen Sie wie folgt vor, um die Verwendung von UltraServers mit Ihrem HyperPod-Cluster einzurichten:

  1. Erstellen Sie einen EKS-basierten HyperPod-Cluster. Achten Sie bei der Auswahl einer Instance-Gruppe darauf, dass Sie einen UltraServer wählen.

  2. Nachdem Ihr Cluster erstellt wurde, verwenden Sie die folgenden Befehle, um betriebsbereite Plug-ins zu installieren:

    NVIDIA-Geräte-Plugin v0.17.2

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.2/deployments/static/nvidia-device-plugin.yml

    FD DaemonSet v0.17.3

    kubectl apply -k "https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=v0.17.3"

    Erkennung von GPU-Funktionen

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.2/deployments/static/gpu-feature-discovery-daemonset.yaml

Sie können jetzt Aufträge ausführen. Im folgenden Beispiel wird gezeigt, wie Sie eine Domain erstellen, eine IMEX-Domain konfigurieren und die Kanalzuweisung aktivieren. Mit diesen Schritten können Sie auch einen Pod erstellen, um einen Kanal für die NCCL-Kommunikation bereitzustellen.

  1. Erstellen Sie eine Ressourcenspezifikationsdatei zur Verwendung mit Kubectl.

    cat <<EOF > imex-channel-injection.yaml --- apiVersion: resource.nvidia.com/v1beta1 kind: ComputeDomain metadata: name: imex-channel-injection spec: numNodes: 1 channel: resourceClaimTemplate: name: imex-channel-0 --- apiVersion: v1 kind: Pod metadata: name: imex-channel-injection spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nvidia.com/gpu.clique operator: Exists - key: topology.k8s.aws/ultraserver-id operator: In values: - <UltraServer-ID> containers: - name: ctr image: ubuntu:22.04 command: ["bash", "-c"] args: ["ls -la /dev/nvidia-caps-imex-channels; trap 'exit 0' TERM; sleep 9999 & wait"] resources: claims: - name: imex-channel-0 resourceClaims: - name: imex-channel-0 resourceClaimTemplateName: imex-channel-0 EOF
  2. Wenden Sie die Konfiguration an, die Sie erstellt haben.

    kubectl apply -f imex-channel-injection.yaml
  3. Um zu überprüfen, ob Ihr Pod erstellt wurde, führen Sie die get pods-Befehle aus.

    kubectl get pods kubectl get pods -n nvidia-dra-driver-gpu -l resource.nvidia.com/computeDomain
  4. Sie können auch in den Protokollen des Pods nachsehen, ob er einen Kommunikationskanal zugewiesen hat.

    kubectl logs imex-channel-injection
    total 0 drwxr-xr-x 2 root root 60 Feb 19 10:43 . drwxr-xr-x 6 root root 380 Feb 19 10:43 .. crw-rw-rw- 1 root root 507, 0 Feb 19 10:43 channel0
  5. Sie können auch anhand der Protokolle überprüfen, ob die automatisierte IMEX-Konfiguration mit einem zugewiesenen Kanal ausgeführt wird.

    kubectl logs -n nvidia-dra-driver-gpu -l resource.nvidia.com/computeDomain --tail=-1 /etc/nvidia-imex/nodes_config.cfg:
    IMEX Log initializing at: 8/8/2025 14:23:12.081 [Aug 8 2025 14:23:12] [INFO] [tid 39] IMEX version 570.124.06 is running with the following configuration options [Aug 8 2025 14:23:12] [INFO] [tid 39] Logging level = 4 [Aug 8 2025 14:23:12] [INFO] [tid 39] Logging file name/path = /var/log/nvidia-imex.log [Aug 8 2025 14:23:12] [INFO] [tid 39] Append to log file = 0 [Aug 8 2025 14:23:12] [INFO] [tid 39] Max Log file size = 1024 (MBs) [Aug 8 2025 14:23:12] [INFO] [tid 39] Use Syslog file = 0 [Aug 8 2025 14:23:12] [INFO] [tid 39] IMEX Library communication bind interface = [JAug 8 2025 14:23:12] [INFO] [tid 39] IMEX library communication bind port = 50000 [Aug 8 2025 14:23:12] [INFO] [tid 39] Identified this node as ID 0, using bind IP of '10.115.131.8', and network interface of enP5p9s0 [Aug 8 2025 14:23:120] [INFO] [tid 39] nvidia-imex persistence file /var/run/nvidia-imex/persist.dat does not exist. Assuming no previous importers. [Aug 8 2025 14:23:12] [INFO] [tid 39] NvGpu Library version matched with GPU Driver version [Aug 8 2025 14:23:12] [INFO] [tid 63] Started processing of incoming messages. [Aug 8 2025 14:23:12] [INFO] [tid 64] Started processing of incoming messages. [Aug 8 2025 14:23:12] [INFO] [tid 65] Started processing of incoming messages. [Aug 8 2025 14:23:12] [INFO] [tid 39] Creating gRPC channels to all peers (nPeers = 1). [Aug 8 2025 14:23:12] [INFO] [tid 66] Started processing of incoming messages. [Aug 8 2025 14:23:12] [INFO] [tid 39] IMEX_WAIT_FOR_QUORUM != FULL, continuing initialization without waiting for connections to all nodes. [Aug 8 2025 14:23:12] [INFO] [tid 67] Connection established to node 0 with ip address 10.115.131.8. Number of times connected: 1 [Aug 8 2025 14:23:12] [INFO] [tid 39] GPU event successfully subscribed
  6. Nachdem Sie alles überprüft haben, löschen Sie den Workload und entfernen Sie die Konfiguration.

    kubectl delete -f imex-channel-injection.yaml