Direkt zum Inhalt

Wie behebe ich Probleme mit meinem Endpunkt von Amazon SageMaker AI Serverless Inference?

Lesedauer: 6 Minute
0

Ich erhalte eine Fehlermeldung, wenn ich einen Endpunkt von Amazon SageMaker AI Serverless Inference für meine Workload verwende.

Lösung

Behebe das Problem anhand der Fehlermeldung, die du erhältst.

Die Größe des Image-Containers ist für den Serverless Inference-Endpunkt zu groß

Serverless Inference-Endpunkte unterstützen Bring Your Own Container (BYOC), ähnlich wie Echtzeit-Endpunkte. Da AWS Lambda diesen speziellen Inferenztyp unterstützt, muss die Container-Größe für diesen speziellen Inferenztyp weniger als 10 GB betragen.

Wenn der Container das 10-GB-Limit überschreitet, erhältst du eine Fehlermeldung ähnlich der folgenden:

„Image size 11271073144 is greater than the supported size 10737418240“

Gehe wie folgt vor, um das Problem zu beheben:

  • Entferne ungenutzte Pakete und minimiere die Anzahl der Ebenen in der Docker-Datei, um die Bildgröße zu reduzieren und den Docker-Container zu optimieren.
  • Verwende ein kleineres Basis-Image und erstelle eine neue Endpunktkonfiguration. Gib den gewünschten Instance-Typ und andere relevante Parameter für das Hosten des Echtzeit-Endpunkts an.
  • Übergang von einem serverlosen Endpunkt zu einem Echtzeit-Endpunkt. Erstelle eine neue Endpunktkonfiguration, um den Instance-Typ und andere Parameter für das Hosten des Echtzeit-Endpunkts anzugeben. Aktualisiere dann der vorhandenen Endpunkt mit der neuen Konfiguration.
  1. Verwende die folgende Vorlage, um eine neue Endpunktkonfiguration zu erstellen:
    import boto3
    
    client = boto3.client('sagemaker', region_name = 'us-east-1')
    
    endpoint_config_name = 'new-endpoint-config'
    production_variants = [
        {
            'VariantName': 'AllTraffic',
            'ModelName': 'ModelName',
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.m5.xlarge',
            'InitialVariantWeight': 1.0
        }
    ]
    
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=production_variants
    )
    Hinweis: Ersetze YourVariantName durch den Namen der Variante der Instance und YourModelName durch den Namen des Modells. Ersetze 1 durch die anfängliche Instance-Anzahl. Ersetze ml.m5.xlarge durch den Instance-Typ. Ersetze 1.0 durch das anfängliche Gewichtung der Variante der Instance.
  2. Erstelle einen neuen Endpunkt mit der neuen Konfiguration, um ihn von einem serverlosen auf einen Echtzeit-Endpunkt umzustellen. Oder aktualisiere einen vorhandenen serverlosen Endpunkt mit der neuen Konfiguration.
    Beispiel für einen neuen Endpunkt erstellen:
    endpoint_name = 'new-endpoint'
    
    create_endpoint_response = client.create_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )
    Beispiel für ein vorhandenes Endpunkt aktualisieren:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Um die Container-Größe zu ermitteln, rufe die Image-URI aus der Amazon Elastic Container Registry (ECR) ab. Führe dann den folgenden Docker-Befehl aus, um die Docker-Image-Details abzurufen:

docker images

Ungenügender Speicher oder Festplattenspeicher auf dem Serverless Inference-Endpunkt

Serverless-Endpunkte von SageMaker AI haben eine maximale Speicherzuweisung von 6 GB und eine kurzlebige Festplattenspeicherkapazität von 5 GB.

Wenn der Speicher des serverlosen Endpunkts das Limit überschreitet, erhältst du eine Fehlermeldung ähnlich der folgenden:

„UnexpectedStatusException: Error hosting endpoint: Failed. Reason: Ping failed due to insufficient memory.“

Wähle eine der folgenden Optionen, um das Problem zu beheben:

  • Passe den Parameter MemorySizeInMB an.
  • Optimiere die Worker-Konfiguration.
  • Stelle den Endpunkt als Echtzeit-Endpunkt bereit und gib die erforderlichen Instance-Details an.

Den Parameter MemorySizeInMB anpassen

  1. Erstelle eine neue serverlose Endpunktkonfiguration mit einer erhöhten MemorySizeInMB.
    Beispiel:
    import boto3
    
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                },
            },
        ],
    )
    Hinweis: Ersetze YourVariantName durch den Namen der Variante und YourModelName durch den Namen des Modells. Ersetze NewMemorySize durch die Größenbeschränkung des Speichers. Der Höchstwert, den du verwenden kannst, ist 6 GB.
  2. Aktualisiere den serverlosen Endpunkt mit der neuen Konfiguration.
    Beispiel:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Worker-Konfiguration optimieren

Um einen Speicherfehler zu vermeiden, erstelle nur einen Worker im Container, der alle verfügbaren CPU-Ressourcen verwendet. Dieser Ansatz unterscheidet sich von Echtzeit-Endpunkten, bei denen einige SageMaker AI-Container möglicherweise einen Worker für jede vCPU erstellen.

Ändere bei vorgefertigten Containern mit dem SageMaker AI-Inferenz-Toolkit die Modellerstellung für die Inferenz, indem du SAGEMAKER_MODEL_SERVER_WORKERS auf „1“ setzen.

Beispiel:

import boto3

client = boto3.client('sagemaker', region_name='us-east-1')

response = client.create_model(
    ModelName='YourModelName',
    Containers=[
    {
        'Image': "YourImage"
        'Mode': 'SingleModel',
        'ModelDataUrl': "YourModelDataURL",
        'Environment': {
            'SAGEMAKER_CONTAINER_LOG_LEVEL': '20',
            'SAGEMAKER_MODEL_SERVER_WORKERS': '1'
        }
    }
    ],
    ExecutionRoleArn=role
)

Hinweis: Ersetze **YourModelName ** durch den Namen des Modells, YourImage durch den Namen des Bildes und YourModelDataUrl durch die Modelldaten-URL.

Endpunkt als Echtzeit-Endpunkt bereitstellen und die erforderlichen Instance-Details angeben

Informationen zur Bereitstellung des Endpunkts als Echtzeit-Endpunkt finde in diesem Artikel unter „Übergang von einem serverlosen Endpunkt zu einem Echtzeit-Endpunkt“.

Ungenügender Festplattenspeicher

Wenn der serverlose Endpunkt keinen verfügbaren Speicherplatz hat, wird möglicherweise die folgende Fehlermeldung angezeigt:

„OSError: [Errno 28] No space left on device“

Gehe wie folgt vor, um dieses Problem zu beheben:

  • Stelle sicher, dass die komprimierte Modellgröße den verfügbaren Speicherplatz beim Dekomprimieren nicht überschreitet. Eine Datei wird auf das Dreifache ihrer komprimierten Größe dekomprimiert.
  • Verwende ein kleineres Modellartefakt und stelle dann sicher, dass alle Dateien im .tar-Archiv für die Bereitstellung unerlässlich sind.
  • Wenn serverlose Inferenz nicht möglich ist, stelle sie auf einem Echtzeit-Endpunkt bereit, um die Instance-Spezifikationen anzupassen.

Kaltstartszenarien auf Serverless Inference-Endpunkten

Aufgrund der On-Demand-Art der Ressourcenbereitstellung und der Einschränkungen bei der serverlosen Inferenz von SageMaker AI gibt es keine definitive Methode, um einen Endpunkt von SageMaker AI Serverless Inference vorzuwärmen. Weitere Informationen findest du unter Minimierung von Kaltstarts.

Für die zugewiesene ProvisionedConcurrency hält SageMaker AI den Endpunkt in einem warmen Zustand, um innerhalb von Millisekunden zu reagieren. Um Probleme mit der Kaltstartlatenz zu minimieren, aktualisiere den Endpunkt mit ProvisionedConcurrency. Weitere Informationen findest du unter Metriken für die Überwachung von Amazon SageMaker AI mit Amazon CloudWatch.

Führe die folgenden Schritte aus:

  1. Erstelle eine neue serverlose Endpunktkonfiguration mit ProvisionedConcurrency, die kleiner oder gleich MaxConcurrency ist.
    Beispielkonfiguration:
    import boto3
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                    "ProvisionedConcurrency": 1,
                },
            },
        ],
    )
    Hinweis: Ersetze YourVariantName durch den Namen der Variante und YourModelName durch den Namen des Modells. Ersetze NewMemorySize durch die Größenbeschränkung des Speichers. Der Höchstwert, den du verwenden kannst, ist 6 GB.
  2. Aktualisiere den Endpunkt mit der neuen Konfiguration.
    Beispiel:
    endpoint_name = 'my-serverless-endpoint'
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Hinweis: Es hat sich bewährt, das Benchmarking-Toolkit von SageMaker AI Serverless Inference zu verwenden, um die effizienteste Bereitstellungskonfiguration für den serverlosen Endpunkt zu ermitteln.

Ähnliche Informationen

Modelle mit Amazon SageMaker AI Serverless Inference bereitstellen

AWS OFFICIALAktualisiert vor einem Jahr