View a markdown version of this page

Bereitstellung auf mehreren Instanztypen mit Instanzpools - 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.

Bereitstellung auf mehreren Instanztypen mit Instanzpools

Wenn Sie ein Modell auf einem SageMaker KI-Endpunkt bereitstellen, geben Sie in der Regel einen einzelnen Instanztyp für die Produktionsvariante an. Wenn dieser Instanztyp in der Ziel-Availability Zone nicht verfügbar ist, schlägt die Bereitstellung mit einem Fehler mit unzureichender Kapazität (ICE) fehl, und Sie müssen es manuell mit einem anderen Instanztyp erneut versuchen.

Mit Instance-Pools können Sie eine geordnete Liste mit bis zu fünf Instance-Typen für eine Produktionsvariante angeben. SageMaker KI versucht, Instances ab dem Typ mit der höchsten Priorität (Priorität 1) bereitzustellen und greift automatisch auf Typen mit niedrigerer Priorität zurück, wenn die Kapazität nicht verfügbar ist. Dadurch entfällt die Notwendigkeit manueller Wiederholungsversuche und die Verfügbarkeit der Endgeräte wird verbessert.

Instanzpools unterstützen sowohl Echtzeit- als auch asynchrone Inferenzendpunkte. Sie können sie mit Einzelmodell-Endpunkten und mit Inferenzkomponenten verwenden.

In den folgenden Schritten wird beschrieben, wie die Bereitstellung von Instanzpools funktioniert:

  1. SageMaker KI versucht, Instanzen aus dem Pool mit der höchsten Priorität (Priorität 1) bereitzustellen.

  2. Wenn SageMaker AI auf einen Fehler mit unzureichender Kapazität (ICE) für den aktuellen Instance-Typ stößt, wird automatisch auf den nächsten Pool in der Prioritätsreihenfolge zurückgegriffen.

  3. Dies wird so lange fortgesetzt, bis die erforderliche Anzahl von Instanzen bereitgestellt ist, alle Pools erschöpft sind oder das gesamte Bereitstellungszeitlimit (VariantInstanceProvisionTimeoutInSeconds) erreicht ist.

Richten Sie einen Endpunkt mit Instanzpools ein

Um Instanzpools zu verwenden, ersetzen Sie den InstanceType Parameter in Ihrer Produktionsvariante durch eine InstancePools Liste. Jeder Eintrag gibt einen Instanztyp und eine Priorität an (1 bis 5, wobei 1 die höchste ist). Sie können optional festlegen VariantInstanceProvisionTimeoutInSeconds (300 bis 3600 Sekunden), um die Gesamtzeit zu kontrollieren, die SageMaker KI damit verbringt, Instanzen in allen Pools bereitzustellen, bevor der Vorgang fehlschlägt.

Real-time Endpunkt mit einem einzigen Modell

Das folgende Beispiel erstellt eine Endpunktkonfiguration mit zwei Instanzpools. Wenn ml.g6.2xlarge Instanzen nicht verfügbar sind, greift SageMaker KI auf zurückml.g6e.2xlarge.

import boto3 sagemaker_client = boto3.client("sagemaker") endpoint_config_name = "my-heterog-endpoint-config" sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "AllTraffic", "ModelName": "my-model", "InitialInstanceCount": 2, "InstancePools": [ { "InstanceType": "ml.g6.2xlarge", "Priority": 1, }, { "InstanceType": "ml.g6e.2xlarge", "Priority": 2, }, ], "VariantInstanceProvisionTimeoutInSeconds": 600, } ], ) sagemaker_client.create_endpoint( EndpointName="my-heterog-endpoint", EndpointConfigName=endpoint_config_name, )

Sie können den ModelNameOverride Parameter auch in jedem Pool verwenden, um ein anderes Modell anzugeben, das für diesen Instance-Typ optimiert ist. Sie können beispielsweise ein für GPU kompiliertes Modell auf einem Instanztyp und eine unkompilierte Version auf einem anderen bereitstellen.

Real-time Endpunkt mit Inferenzkomponenten

Wenn Sie Inferenzkomponenten mit Instanzpools verwenden, haben Sie zwei Möglichkeiten, Spezifikationen zu definieren:

  • Single Specification — Verwenden Sie dasselbe Modell und dieselbe Ressourcenkonfiguration für alle Instanztypen in den Instanzpools des Endpunkts. Dies funktioniert, wenn das Modell auf jedem der bereitgestellten Instanztypen mit denselben Ressourcenanforderungen ausgeführt werden kann.

  • Mehrfach Specifications — Verwenden Sie den Specifications Parameter (Plural), um unterschiedliche Modell- oder Ressourcenkonfigurationen für jeden Instanztyp zu definieren. Jede Spezifikation enthält ein InstanceType Feld, das sie einem Instanztyp in den Instanzpools des Endpunkts zuordnet.

Im folgenden Beispiel wird eine Inferenzkomponente mit Spezifikationen pro Instanztyp erstellt:

sagemaker_client.create_inference_component( InferenceComponentName="my-ic", EndpointName="my-heterog-endpoint", VariantName="AllTraffic", Specifications=[ { "InstanceType": "ml.g6.2xlarge", "ModelName": "my-model-g6", "Container": { "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest", }, "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 1, "MinMemoryRequiredInMb": 4096, }, }, { "InstanceType": "ml.g6e.2xlarge", "ModelName": "my-model-g6e", "Container": { "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest", }, "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 1, "MinMemoryRequiredInMb": 8192, }, }, ], RuntimeConfig={ "CopyCount": 2, }, )

Überwachen Sie Instanzpools

Bestehende CloudWatch Metriken, die für alle Instanzen in einer Variante aggregiert sind — wie InvocationsModelLatency, und CPUUtilization — funktionieren weiterhin auf die gleiche Weise, wenn Sie Instanzpools verwenden. Darüber hinaus CloudWatch veröffentlicht diese Metriken mit einer InstanceType Dimension, sodass Sie die Leistung für jeden Instance-Typ separat überwachen können.

Per-instance-type Metriken

Wenn eine Produktionsvariante Instanzpools verwendet, sind die folgenden Dimensionskombinationen CloudWatch für die Überwachung pro Instanztyp verfügbar:

Dimensionskombination Anwendungsfall
EndpointName, VariantName, InstanceType Filtern Sie Metriken auf Endpunktebene und für Aufrufe (z. B. CPUUtilizationInvocations,ModelLatency) für einen bestimmten Instanztyp innerhalb der Variante.
InferenceComponentName, InstanceType Filtert Metriken für Inferenzkomponenten nach einem bestimmten Instanztyp. Verwenden Sie diese Option, um zu vergleichen, wie dieselbe Inferenzkomponente bei verschiedenen Instanztypen abschneidet.

Diese Dimensionen sind sowohl für CloudWatch Standardmetriken als auch für erweiterte Metriken verfügbar. Die vollständige Liste der verfügbaren Metriken finden Sie unter SageMaker Amazon-KI-Metriken bei Amazon CloudWatch undVerbesserte Amazon SageMaker AI-Metriken für Inferenzendpunkte.

Überprüfen Sie die Flottenverteilung

Rufen Sie die DescribeEndpointAPI auf, um die aktuelle Anzahl der Instanzen für jeden Pool zu sehen. Die ProductionVariants Antwort enthält eine InstancePools Liste mit der aktuellen Anzahl für jeden Instanztyp. Dies zeigt Ihre Flottenzusammensetzung nach der Bereitstellung, einschließlich aller Fallback-Instances aus Pools mit niedrigerer Priorität.

Wenn Sie Inferenzkomponenten verwenden, enthält die DescribeInferenceComponentAntwort ein PlacementStatus Feld in der Zusammenfassung der Laufzeitkonfiguration, das die Anzahl der Kopien pro Instance-Typ anzeigt. Verwenden Sie dies, um zu verstehen, wie Kopien von Inferenzkomponenten auf die Instance-Typen in Ihrer Flotte verteilt sind.

Auto-scaling mit Instanzpools

Auto-scaling mit Instanzpools folgt dem gleichen Prozess wie die automatische Standardskalierung von Endpunkten. Sie registrieren skalierbare Ziele, definieren Skalierungsrichtlinien und wenden sie auf Ihren Endpunkt an. Informationen zur allgemeinen Einrichtung der auto-scaling finden Sie unterAutomatische Skalierung von Amazon SageMaker AI-Modellen.

Der Hauptunterschied besteht darin, wie SageMaker KI Instanzen bereitstellt und freigibt, wenn ein Skalierungsereignis ausgelöst wird:

Scale Out (Hinzufügen von Instanzen)

SageMaker AI stellt Instanzen bereit, beginnend mit dem Pool mit der höchsten Priorität (niedrigster Prioritätswert). Wenn SageMaker AI auf einen Fehler mit unzureichender Kapazität für den aktuellen Instance-Typ stößt, wird automatisch auf den nächsten Pool in der Prioritätsreihenfolge zurückgegriffen. SageMaker KI versucht es poolübergreifend weiter, bis die Instanzen bereitgestellt sind oder die Gesamtzahl erreicht VariantInstanceProvisionTimeoutInSeconds ist.

Skalieren (Instanzen entfernen)

SageMaker AI veröffentlicht Instanzen, beginnend mit dem Pool mit der niedrigsten Priorität (höchster Prioritätswert). Ihre bevorzugten Instance-Typen mit höherer Priorität werden so lange wie möglich ausgeführt, und Fallback-Instances werden zuerst veröffentlicht.

Verwenden Sie vordefinierte Skalierungsmetriken

Vordefinierte Skalierungsmetriken, z. B. SageMakerVariantInvocationsPerInstance weiterhin mit Instanzpools funktionieren. Diese Metriken werden für alle Instance-Typen in der Variante aggregiert, sodass das Skalierungsverhalten dem eines Standardendpunkts entspricht. Dies ist der einfachste Ansatz, wenn alle Instance-Typen in Ihren Pools eine ähnliche Kapazität haben.

Informationen zur Einrichtung von Richtlinien zur Zielverfolgung und schrittweisen Skalierung finden Sie unterAutomatische Skalierung von Amazon SageMaker AI-Modellen.

Verwenden Sie gewichtete benutzerdefinierte Metriken für gemischte Flotten

Wenn Ihre Instance-Pools Instance-Typen mit unterschiedlichen Rechenkapazitäten enthalten, können Sie mithilfe von CloudWatch metrischer Mathematik ein gewichtetes Skalierungssignal erstellen. Auf diese Weise können Sie steuern, wie stark die Last jedes Instance-Typs zur allgemeinen Skalierungsentscheidung beiträgt.

Im folgenden Beispiel wird eine Ziel-Tracking-Richtlinie erstellt, die einen gewichteten Durchschnitt von ConcurrentRequestsPerModel zwei Instance-Typen verwendet. Die Gewichtungen bestimmen, wie empfindlich die Skalierungsrichtlinie auf die Auslastung der einzelnen Typen reagiert:

import boto3 aas_client = boto3.client("application-autoscaling") # Register the scalable target aas_client.register_scalable_target( ServiceNamespace="sagemaker", ResourceId="endpoint/my-heterog-endpoint/variant/AllTraffic", ScalableDimension="sagemaker:variant:DesiredInstanceCount", MinCapacity=1, MaxCapacity=10, ) # Define target tracking policy with weighted metric math aas_client.put_scaling_policy( PolicyName="weighted-concurrent-requests", ServiceNamespace="sagemaker", ResourceId="endpoint/my-heterog-endpoint/variant/AllTraffic", ScalableDimension="sagemaker:variant:DesiredInstanceCount", PolicyType="TargetTrackingScaling", TargetTrackingScalingPolicyConfiguration={ "TargetValue": 10.0, "CustomizedMetricSpecification": { "Metrics": [ { "Id": "cr_g6", "Label": "ConcurrentRequests-g6-2xlarge", "MetricStat": { "Metric": { "Namespace": "AWS/SageMaker", "MetricName": "ConcurrentRequestsPerModel", "Dimensions": [ {"Name": "EndpointName", "Value": "my-heterog-endpoint"}, {"Name": "VariantName", "Value": "AllTraffic"}, {"Name": "InstanceType", "Value": "ml.g6.2xlarge"}, ], }, "Stat": "Average", }, "ReturnData": False, }, { "Id": "cr_g6e", "Label": "ConcurrentRequests-g6e-2xlarge", "MetricStat": { "Metric": { "Namespace": "AWS/SageMaker", "MetricName": "ConcurrentRequestsPerModel", "Dimensions": [ {"Name": "EndpointName", "Value": "my-heterog-endpoint"}, {"Name": "VariantName", "Value": "AllTraffic"}, {"Name": "InstanceType", "Value": "ml.g6e.2xlarge"}, ], }, "Stat": "Average", }, "ReturnData": False, }, { "Id": "weighted_avg", "Label": "WeightedConcurrentRequests", "Expression": "0.5 * cr_g6 + 0.5 * cr_g6e", "ReturnData": True, }, ], }, }, )

Rufen Sie in diesem Beispiel die cr_g6 cr_g6e Metrik pro Instanztyp abConcurrentRequestsPerModel. Der weighted_avg Ausdruck kombiniert sie mit gleichen Gewichten (0,5/0,5). Passen Sie die Gewichtungen an, um zu ändern, wie die Richtlinie auf die Belastung der einzelnen Instance-Typen reagiert.

Wie sich Gewichtungen auf das Skalierungsverhalten auswirken: Eine höhere Gewichtung eines Instance-Typs bedeutet, dass die Skalierungsrichtlinie empfindlicher auf die Belastung dieses Typs reagiert — nicht auf weniger. Das Signal des Typs mit der niedrigeren Gewichtung wird gedämpft, sodass er bei höherer Auslastung ausgeführt werden kann, bevor ein Skalierungsereignis ausgelöst wird.

Gewichtsstrategie High-priority Typtoleranz Low-priority Typtoleranz Am besten geeignet für
Höheres Gewicht bei hoher Priorität (0,7/0,3) Niedriger (geschützt) Höher (läuft heißer) Schützt teure Instanzen oder Instanzen mit hoher Kapazität vor Überlastung
Gleich (0,5/0,5) Ausgewogen Ausgewogen Standardempfehlung für die meisten Workloads
Höhere Gewichtung bei niedriger Priorität (0,3/0,7) Höher (läuft heißer) Niedriger (geschützt) Verhindern, dass kleinere Fallback-Instances überlastet werden

Weitere Informationen zu benutzerdefinierten Messwerten mit auto-scaling finden Sie unterDefinieren Sie eine benutzerdefinierte Metrik (CloudWatch Metrik: CPUUtilization).