Spot-Instances bei Amazon SageMaker HyperPod - Amazon SageMaker KI

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.

Spot-Instances bei Amazon SageMaker HyperPod

Amazon SageMaker HyperPod unterstützt Amazon EC2 Spot-Instances und ermöglicht so erhebliche Kosteneinsparungen bei fehlertoleranten und AI/ML statusfreien Workloads. Zu den Anwendungsfällen gehören Batch-Inferenz- und Trainingsjobs, Hyperparameter-Tuning und experimentelle Workloads. Sie können Spot-Instances auch verwenden, um Ihre Rechenkapazität automatisch zu skalieren, wenn diese kostengünstige Kapazität verfügbar ist, und auf On-Demand-Kapazität zurückzuskalieren, wenn die zusätzliche Spot-Kapazität zurückgewonnen wird.

Standardmäßig verwenden Spot-Instances on HyperPod Work die Continuous Provisioning-Funktion, mit HyperPod der die verbleibende Kapazität automatisch im Hintergrund bereitgestellt werden kann SageMaker HyperPod , während die Workloads auf verfügbaren Instances sofort gestartet werden. Wenn bei der Knotenbereitstellung aufgrund von Kapazitätsengpässen oder anderen Problemen Fehler auftreten, versucht es SageMaker HyperPod automatisch im Hintergrund, bis die Cluster ihre gewünschte Größe erreicht haben, sodass Ihre Autoscaling-Operationen stabil und blockierungsfrei bleiben. Sie können Spot-Instances auch mit Karpenter-basierter Autoskalierung verwenden.

Wichtige Funktionen und Konzepte, die es zu berücksichtigen gilt

  • Erzielen Sie Kosteneinsparungen von bis zu 90% im Vergleich zu On-Demand-Instances

  • Verwenden Sie Spot-Instances für Jobs, die Unterbrechungen bewältigen können und bei denen die Start- und Abschlusszeiten von Aufträgen flexibel sind

  • Wenn Sie Karpenter für die automatische Skalierung verwenden, können Sie so konfigurieren, dass automatisch HyperPod auf On-Demand zurückgegriffen wird, wenn die Spot-Kapazität unterbrochen oder nicht verfügbar ist

  • Greifen Sie auf eine Vielzahl von CPU-, GPU- und Accelerator-Instance-Typen zu, die von unterstützt werden HyperPod

  • Die Verfügbarkeit der Kapazität hängt vom Angebot ab EC2 und variiert je nach Region und Instance-Typ

  • Mithilfe verschiedener Tools wie dem Spot Instance Advisor von können Sie verschiedene Aktionen durchführen, z. B. die Wahrscheinlichkeit ermitteln, mit der gewünschte Instances abgerufen oder unterbrochen werden EC2

Erste Schritte

Voraussetzungen

Stellen Sie vor Beginn sicher, dass Sie über Folgendes verfügen:

AWS CLI installiert und konfiguriert

Richten Sie Ihre AWS Anmeldeinformationen und Ihre Region ein:

aws configure

Detaillierte Anweisungen finden Sie in der Dokumentation zu den AWS Anmeldeinformationen.

IAM-Rolle für die Ausführung SageMaker HyperPod

Um den Cluster zu aktualisieren, müssen Sie zunächst AWS Identity and Access Management Zugriffsverwaltungsberechtigungen (IAM) für Karpenter erstellen. Anweisungen finden Sie unter Erstellen einer IAM-Rolle für HyperPod Autoscaling mit Karpenter.

Einrichtung von VPC- und EKS-Clustern

2.1 VPC- und EKS-Cluster erstellen

Folgen Sie der HyperPod EKS-Installationsanleitung, um:

  1. Erstellen Sie eine VPC mit Subnetzen in mehreren Availability Zones

  2. Erstellen Sie einen EKS-Cluster

  3. Installieren Sie die erforderlichen Abhängigkeiten mithilfe von Helm-Diagrammen

2.2 Legen Sie Umgebungsvariablen fest

export EKS_CLUSTER_ARN="arn:aws:eks:REGION:ACCOUNT_ID:cluster/CLUSTER_NAME" export EXECUTION_ROLE="arn:aws:iam::ACCOUNT_ID:role/SageMakerExecutionRole" export BUCKET_NAME="your-s3-bucket-name" export SECURITY_GROUP="sg-xxxxx" export SUBNET="subnet-xxxxx" export SUBNET1="subnet-xxxxx" export SUBNET2="subnet-xxxxx" export SUBNET3="subnet-xxxxx"

Dienstkontingente für die Spot-Instances

Stellen Sie sicher, dass Sie über die erforderlichen Kontingente für die Instances verfügen, die Sie im SageMaker HyperPod Cluster erstellen werden. Um Ihre Kontingente zu überprüfen, wählen Sie in der Konsole Service Quotas im Navigationsbereich AWS Services und anschließend SageMaker. Der folgende Screenshot zeigt beispielsweise das verfügbare Kontingent für C5-Instances.

Ein Bild mit Informationen zur Kostenregion.

Überprüfen Sie die Verfügbarkeit von Spots

Bevor Sie Spot-Instanzgruppen erstellen, überprüfen Sie die Verfügbarkeit in verschiedenen Availability Zones:

aws ec2 get-spot-placement-scores \ --region us-west-2 \ --instance-types c5.2xlarge \ --target-capacity 10 \ --single-availability-zone \ --region-names us-west-2

Tipp: Wählen Sie Availability Zones mit höheren Platzierungswerten aus, um eine bessere Verfügbarkeit zu erzielen. Sie können auch die Verfügbarkeit von Spot Instance Advisor und EC2 Spot-Preisen überprüfen. Wählen Sie die erforderliche Availability Zone mit besserem Availability Score aus und konfigurieren Sie die Instanzgruppe mit dem zugehörigen Subnetz, um die Instance in dieser AZ zu starten.

Eine Instanzgruppe erstellen (kein Autoscaling)

CreateCluster (Spot)

aws sagemaker create-cluster \ --cluster-name clusterNameHere \ --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \ --node-provisioning-mode "Continuous" \ --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]' --vpc-config '{ "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET'"] }'

Cluster aktualisieren (Spot + auf Anfrage)

aws sagemaker update-cluster \ --cluster-name "my-cluster" \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-x-az3", "InstanceType": "ml.c5.xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} }, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET3'"] } }, { "InstanceGroupName": "auto-spot-c5-2x-az2", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET2'"] } }, { "InstanceGroupName": "auto-ondemand-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]'

CapacityRequirementskann nicht geändert werden, sobald eine Instanzgruppe erstellt wurde.

Beschreiben Sie den Cluster

aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME --region us-west-2
## Sample Response { "ClusterName": "my-cluster", "InstanceGroups": [ { "InstanceGroupName": "ml.c5.2xlarge", "InstanceType": "ml.c5.xlarge", "InstanceCount": 5, "CurrentCount": 3, "CapacityRequirements: { "Spot": {} }, "ExecutionRole": "arn:aws:iam::account:role/SageMakerExecutionRole", "InstanceStorageConfigs": [...], "OverrideVpcConfig": {...} } // Other IGs ] }

DescribeClusterNode

aws sagemaker describe-cluster-node --cluster-name $HP_CLUSTER_NAME --region us-west-2
## Sample Response { "NodeDetails": { "InstanceId": "i-1234567890abcdef1", "InstanceGroupName": "ml.c5.2xlarge", "CapacityType": "Spot", "InstanceStatus": {...} } }

Konsole verwenden

Erstellen und konfigurieren Sie einen SageMaker HyperPod Cluster

Starten und konfigurieren Sie zunächst Ihren SageMaker HyperPod EKS-Cluster und stellen Sie sicher, dass der Continuous Provisioning-Modus bei der Clustererstellung aktiviert ist. Führen Sie folgende Schritte aus:

  1. Wählen Sie auf der SageMaker AI-Konsole im Navigationsbereich HyperPod Cluster aus.

  2. Wählen Sie Create HyperPod cluster and Orchestrated on Amazon EKS aus.

  3. Wählen Sie für Einrichtungsoptionen die Option Benutzerdefiniertes Setup aus.

  4. Geben Sie unter Name einen Namen ein.

  5. Wählen Sie für Instanzwiederherstellung die Option Automatisch aus.

  6. Wählen Sie für den Instanzbereitstellungsmodus die Option Kontinuierliche Bereitstellung verwenden aus.

  7. CapacityType : Wählen Sie Spot

  8. Wählen Sie Absenden aus.

Screenshot der Konsole:

Ein Bild, das den Ablauf zur Erstellung des Clusters enthält.

Dieses Setup erstellt die erforderliche Konfiguration wie Virtual Private Cloud (VPC), Subnetze, Sicherheitsgruppen und EKS-Cluster und installiert Operatoren im Cluster. Sie können auch vorhandene Ressourcen wie einen EKS-Cluster bereitstellen, wenn Sie einen vorhandenen Cluster verwenden möchten, anstatt einen neuen zu erstellen. Diese Einrichtung dauert etwa 20 Minuten.

Dem gleichen Cluster wird eine neue Spot-Instance-Gruppe hinzugefügt

Um Ihrem bestehenden HyperPod EKS-Cluster eine Spot-IG hinzuzufügen. Führen Sie folgende Schritte aus:

  1. Wählen Sie auf der SageMaker AI-Konsole im Navigationsbereich HyperPod Cluster aus.

  2. Wählen Sie einen vorhandenen HyperPod Cluster mit Amazon EKS Orchestration aus (stellen Sie sicher, dass die kontinuierliche Bereitstellung aktiviert ist).

  3. Klicken Sie auf Bearbeiten.

  4. Klicken Sie auf der Seite „Cluster bearbeiten“ auf Instanzgruppe erstellen.

  5. Wählen Sie in der Instanzgruppenkonfiguration den Kapazitätstyp Spot-Instance aus.

  6. Klicken Sie auf Instanzgruppe erstellen.

  7. Klicken Sie auf Submit.

Screenshot der Konsole:

Ein Bild, das den Ablauf der Instanzgruppenerstellung enthält.

Verwenden CloudFormation

Resources: TestCluster: Type: AWS::SageMaker::Cluster Properties: ClusterName: "SampleCluster" InstanceGroups: - InstanceGroupName: group1 InstanceType: ml.c5.2xlarge InstanceCount: 1 LifeCycleConfig: SourceS3Uri: "s3://'$BUCKET_NAME'" OnCreate: "on_create_noop.sh" ExecutionRole: "'$EXECUTION_ROLE'", ThreadsPerCore: 1 CapacityRequirements: Spot: {} VpcConfig: Subnets: - "'$SUBNET1'" SecurityGroupIds: - "'$SECURITY_GROUP'" Orchestrator: Eks: ClusterArn: '$EKS_CLUSTER_ARN' NodeProvisioningMode: "Continuous" NodeRecovery: "Automatic"

Einzelheiten finden Sie unter https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-eks-console-create-cluster-cfn.html.

Autoscaling auf Basis von Karpenter

Clusterrolle erstellen

Schritt 1: Navigieren Sie zur IAM-Konsole

  1. Gehen Sie zum AWS-ManagementkonsoleIAM-Dienst

  2. Klicken Sie in der linken Seitenleiste auf Rollen

  3. Klicken Sie auf Rolle erstellen

Schritt 2: Richten Sie eine Vertrauensrichtlinie ein

  1. Wählen Sie Benutzerdefinierte Vertrauensrichtlinie (statt AWS Service)

  2. Ersetzen Sie das Standard-JSON durch diese Vertrauensrichtlinie:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "hyperpod.sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

klicken Sie auf Weiter

Schritt 3: Erstellen Sie eine benutzerdefinierte Berechtigungsrichtlinie

Da es sich um spezifische SageMaker Berechtigungen handelt, müssen Sie eine benutzerdefinierte Richtlinie erstellen:

  1. Klicken Sie auf Richtlinie erstellen (öffnet neuen Tab)

  2. Klicken Sie auf die Registerkarte JSON

  3. Geben Sie diese Richtlinie ein:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:BatchAddClusterNodes", "sagemaker:BatchDeleteClusterNodes" ], "Resource": "*" } ] }
  4. Klicken Sie auf Weiter

  5. Geben Sie ihm einen Namen wie SageMakerHyperPodRolePolicy

  6. Klicken Sie auf Richtlinie erstellen

Schritt 4: Hängen Sie die Richtlinie an die Rolle an

  1. Kehren Sie zur Registerkarte zur Rollenerstellung zurück

  2. Aktualisieren Sie die Richtlinienliste

  3. Suchen Sie nach Ihrer neu erstellten Richtlinie und wählen Sie sie aus

  4. Klicken Sie auf Weiter

Schritt 5: Rolle benennen und erstellen

  1. Geben Sie einen Rollennamen ein (z. B.SageMakerHyperPodRole)

  2. Fügen Sie bei Bedarf eine Beschreibung hinzu

  3. Überprüfen Sie die Vertrauensrichtlinie und die Berechtigungen

  4. Klicken Sie auf Rolle erstellen

Verifizierung

Nach der Erstellung können Sie Folgendes überprüfen:

  • Wenn Sie auf der Registerkarte Vertrauensbeziehungen nachsehen, wird der Hyperpod-Dienst angezeigt

  • Wenn Sie auf der Registerkarte „Berechtigungen“ nachsehen, wird Ihre benutzerdefinierte Richtlinie angezeigt

  • Die Rolle ARN wird für die Verwendung mit verfügbar sein HyperPod

Das ARN-Format der Rolle wird sein:

arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole

Cluster erstellen mit AutoScaling:

Für eine bessere Verfügbarkeit können Sie mehrere erstellen IGs , AZs indem Sie Subnetze konfigurieren. Sie können auch OnDemand als Fallback IGs einbeziehen.

aws sagemaker create-cluster \ --cluster-name clusterNameHere \ --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \ --node-provisioning-mode "Continuous" \ --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 0, // For Auto scaling keep instance count as 0 "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]' --vpc-config '{ "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET'"] }' --auto-scaling ' { "Mode": "Enable", "AutoScalerType": "Karpenter" }'

Cluster aktualisieren (Spot + On-Demand)

aws sagemaker update-cluster \ --cluster-name "my-cluster" \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-x-az3", "InstanceType": "ml.c5.xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} }, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET3'"] } }, { "InstanceGroupName": "auto-spot-c5-2x-az2", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET2'"] } }, { "InstanceGroupName": "auto-ondemand-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]'

Erstellen HyperpodNodeClass

HyperpodNodeClassist eine benutzerdefinierte Ressource, die vorab erstellten Instanzgruppen zugeordnet wird und Einschränkungen dafür definiert SageMaker HyperPod, welche Instanztypen und Availability Zones für die Auto Scaling-Entscheidungen von Karpenter unterstützt werden. Geben Sie zur Verwendung HyperpodNodeClass einfach die Namen Ihres SageMaker HyperPod Clusters an, den InstanceGroups Sie als Quelle für die AWS Rechenressourcen verwenden möchten, die Sie für die Skalierung Ihrer Pods in Ihrem verwenden möchten. NodePools Der HyperpodNodeClass Name, den Sie hier verwenden, wird NodePool in den nächsten Abschnitt übernommen, in dem Sie darauf verweisen. Dies gibt HyperpodNodeClass an NodePool , aus welchem Material Ressourcen bezogen werden sollen. Gehen Sie wie folgt vorHyperpodNodeClass, um eine zu erstellen:

  1. Erstellen Sie eine YAML-Datei (z. B. nodeclass.yaml), die dem folgenden Code ähnelt. Fügen Sie InstanceGroup Namen hinzu, die Sie bei der Clustererstellung verwendet haben. SageMaker HyperPod Sie können einem vorhandenen SageMaker HyperPod EKS-Cluster auch neue Instanzgruppen hinzufügen.

  2. Verweisen Sie in Ihrer NodePool Konfiguration auf den HyperPodNodeClass Namen.

Das Folgende ist ein BeispielHyperpodNodeClass:

apiVersion: karpenter.sagemaker.amazonaws.com/v1 kind: HyperpodNodeClass metadata: name: multiazg6 spec: instanceGroups: # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created # before this step can be completed. # MaxItems: 10 - auto-spot-c5-2x-az1 - auto-spot-c5-2x-az2 - auto-spot-c5-x-az3 - auto-ondemand-c5-2x-az1

Karpenter priorisiert Spot-Instance-Gruppen gegenüber On-Demand-Instances und verwendet On-Demand-Instances als Fallback, sofern dies in der Konfiguration angegeben ist. Die Instance-Auswahl ist nach den EC2 Spot Placement Scores sortiert, die der Availability Zone jedes Subnetzes zugeordnet sind.

Wenden Sie die Konfiguration auf Ihren EKS-Cluster an, indem Siekubectl:

kubectl apply -f nodeclass.yaml

Der HyperPod Cluster muss AutoScaling aktiviert sein und der AutoScaling Status muss sich auf ändern, InService bevor der angewendet werden HyperpodNodeClass kann. Außerdem werden die Kapazitäten der Instanzgruppen als Spot oder angezeigt OnDemand. Weitere Informationen und wichtige Überlegungen finden Sie unter Autoscaling auf SageMaker HyperPod EKS.

Zum Beispiel

apiVersion: karpenter.sagemaker.amazonaws.com/v1 kind: HyperpodNodeClass metadata: creationTimestamp: "2025-11-30T03:25:04Z" name: multiazc6 uid: ef5609be-15dd-4700-89ea-a3370e023690 spec: instanceGroups: -spot1 status: conditions: // true when all IGs in the spec are present in SageMaker cluster, false otherwise - lastTransitionTime: "2025-11-20T03:25:04Z" message: "" observedGeneration: 3 reason: InstanceGroupReady status: "True" type: InstanceGroupReady // true if subnets of IGs are discoverable, false otherwise - lastTransitionTime: "2025-11-20T03:25:04Z" message: "" observedGeneration: 3 reason: SubnetsReady status: "True" type: SubnetsReady // true when all dependent resources are Ready [InstanceGroup, Subnets] - lastTransitionTime: "2025-11-30T05:47:55Z" message: "" observedGeneration: 3 reason: Ready status: "True" type: Ready instanceGroups: - instanceTypes: - ml.c5.2xlarge name:auto-spot-c5-2x-az2 subnets: - id: subnet-03ecc649db2ff20d2 zone: us-west-2a zoneId: usw2-az2 - capacities: {"Spot": {}}

Erstellen NodePool

Das NodePool legt Einschränkungen für die Knoten fest, die von Karpenter erstellt werden können, und für die Pods, die auf diesen Knoten ausgeführt werden können. NodePool Sie können so eingestellt werden, dass sie verschiedene Aktionen ausführen, wie z. B.:

  • Definieren Sie Labels und Taints, um die Anzahl der Pods zu begrenzen, die auf von Karpenter erstellten Knoten ausgeführt werden können

  • Beschränken Sie die Knotenerstellung auf bestimmte Zonen, Instanztypen und Computerarchitekturen usw.

Weitere Informationen zu finden NodePool Sie unter. NodePools SageMaker HyperPod managed Karpenter unterstützt eine begrenzte Anzahl bekannter Kubernetes- und Karpenter-Anforderungen, die wir in diesem Beitrag erläutern.

Gehen Sie wie folgt vor, um eine NodePool zu erstellen:

Erstellen Sie eine YAML-Datei nodepool.yaml mit dem Namen Ihrer gewünschten NodePool Konfiguration. Der folgende Code ist eine Beispielkonfiguration zum Erstellen eines NodePool Beispiels. Wir geben an NodePool , dass es unseren SageMaker ml.g6.xlarge-Instance-Typ einschließt, und wir geben ihn zusätzlich für eine Zone an. Weitere Anpassungen finden Sie unter. NodePools

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpunodepool spec: template: spec: nodeClassRef: group: karpenter.sagemaker.amazonaws.com kind: HyperpodNodeClass name: multiazg6 expireAfter: Never requirements: - key: node.kubernetes.io/instance-type operator: Exists - key: "node.kubernetes.io/instance-type" // Optional otherwise Karpenter will decide based on Job config resource requirements operator: In values: ["ml.c5.2xlarge"] - key: "topology.kubernetes.io/zone" operator: In values: ["us-west-2a"]

Tipp: Bei einer Unterbrechung EC2 vor Ort verfälscht Hyperpod den Knoten, sodass der Pod entfernt wird. Der Konsolidierungsprozess von Karpenter berücksichtigt die Budgets für Pod-Unterbrechungen und führt eine normale Kubernetes-Räumung durch. Wenn Sie jedoch ConsolidateAfter: 0 setzen, kann die Konsolidierung sofort erfolgen, sodass nur sehr wenig Zeit für eine ordentliche Pod-Räumung bleibt. Stellen Sie ihn bis zu 2 Minuten auf einen Wert ungleich Null ein, damit der Pod bei allen Checkpoint-Anforderungen ordnungsgemäß entfernt werden kann.

Wenden Sie das auf Ihren Cluster an: NodePool

kubectl apply -f nodepool.yaml

Überwachen Sie den NodePool Status, um sicherzustellen, dass die Bedingung Bereit im Status auf True gesetzt ist:

kubectl get nodepool gpunodepool -oyaml

Dieses Beispiel zeigt, wie a verwendet werden NodePool kann, um die Hardware (Instanztyp) und die Platzierung (Availability Zone) für Pods anzugeben.

Starten Sie einen einfachen Workload

Mit dem folgenden Workload wird eine Kubernetes-Bereitstellung ausgeführt, bei der die bereitgestellten Pods 1 CPU und 256 MB Speicher pro Replikat und Pod anfordern. Die Pods wurden noch nicht hochgefahren.

kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/inflate.yaml

Wenn wir dies anwenden, können wir eine Bereitstellung und den Start eines einzelnen Knotens in unserem Cluster sehen, wie im folgenden Screenshot gezeigt.

Verwenden Sie den folgenden Befehl, um diese Komponente zu skalieren:

kubectl scale deployment inflate --replicas 10

Weitere https://docs.aws.amazon.com/sagemaker/latest/dg/sagemakerInformationen finden Sie unter hyperpod-eks-autoscaling .html.

Verwaltung von Knotenunterbrechungen

Spot-Instances können jederzeit zurückgefordert werden. EC2 bietet in den meisten Fällen eine Unterbrechungsbenachrichtigung nach bestem Wissen und Gewissen von 2 Minuten. Diese Benachrichtigung kann jedoch nicht garantiert werden. In manchen Situationen EC2 kann Spot-Instances sofort und ohne Vorwarnung beendet werden. HyperPod verarbeitet automatisch beide Szenarien:

  • Mit 2 Minuten Vorankündigung: Automatisch wird erneut versucht, den Pod ordnungsgemäß zu entfernen und die Kapazität kontrolliert auszutauschen, sobald Spot-Kapazität verfügbar ist.

  • Ohne Vorankündigung (sofortige Kündigung): Es wird automatisch erneut versucht, den Node auszutauschen (sobald Spot-Kapazität verfügbar ist), ohne dass der Knoten ordnungsgemäß gelöscht wird

Funktionsweise

Wenn eine Benachrichtigung über eine Spot-Unterbrechung EC2 gesendet wird, automatisch: HyperPod

  1. Erkennt ein Unterbrechungssignal

  2. Beeinträchtigt den Knoten: Verhindert, dass neue Pods für die unterbrochene Instanz geplant werden

  3. Räumt Pods ordnungsgemäß aus: Gibt laufenden Pods Zeit, ihre Arbeit abzuschließen oder zu überprüfen (unter Berücksichtigung von Kubernetes) terminationGracePeriodSeconds

  4. Ersetzt Kapazität: Versucht automatisch, die Ersatz-Instances bereitzustellen (Spot- oder On-Demand-Instances, je nach Verfügbarkeit).

    Der Kapazitätsersatz erfolgt durch die automatische Bereitstellung von Ersatzinstanzen. Wenn Kapazität nicht sofort verfügbar ist, fährt das System mit der Überprüfung fort, bis Ressourcen verfügbar sind. Bei Instanzgruppen ohne automatische Skalierung wird HyperPod versucht, innerhalb derselben Instanzgruppe nach oben zu skalieren, bis die erforderliche Kapazität verfügbar ist. Für auf Karpenter basierende Instanzgruppen implementiert Karpenter einen Fallback-Mechanismus für andere Instanzgruppen, die in der Node-Klasse konfiguriert sind, wenn die primäre Gruppe den Bedarf nicht decken kann. Darüber hinaus können Sie On-Demand als Fallback-Option konfigurieren, sodass Karpenter automatisch zu On-Demand-Instances wechseln kann, wenn Spot-Instanzgruppen nicht erfolgreich hochskaliert werden können.

  5. Verschiebt Workloads: Kubernetes verschiebt automatisch gelöschte Pods auf fehlerfreien Knoten

Finden Sie Ihre Nutzung und Rechnung heraus

Um Ihre Nutzung und Abrechnung für Spot-Instances auf zu überprüfen, können HyperPod Sie die AWS Cost Explorer Explorer-Konsole verwenden. Gehen Sie zu Billing and Cost Management > Rechnung

Ein Bild mit Informationen zur Kostenregion.

Um mehr über Nutzung und Abrechnung auf der Konsole zu erfahren, gehen Sie zu Billing and Cost Management > Cost Explorer

Ein Bild mit Kosten und Nutzung.