Erstellen Sie einen asynchronen Inferenzendpunkt - Amazon SageMaker

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.

Erstellen Sie einen asynchronen Inferenzendpunkt

Erstellen Sie einen asynchronen Endpunkt auf dieselbe Weise, wie Sie einen Endpunkt mithilfe von SageMaker Hosting-Diensten erstellen würden:

  • Erstellen Sie ein Modell in SageMaker mitCreateModel.

  • Erstellen Sie eine Endpunktkonfiguration mit CreateEndpointConfig.

  • Erstellen Sie einen HTTPS-Endpunkt mit CreateEndpoint.

Um einen Endpunkt zu erstellen, erstellen Sie zunächst ein Modell mit CreateModel, wobei Sie auf das Modellartefakt und einen Docker-Registry-Pfad (Image) verweisen. Anschließend erstellen Sie eine Konfiguration, CreateEndpointConfigin der Sie ein oder mehrere Modelle angeben, die mithilfe der CreateModel API zur Bereitstellung erstellt wurden, sowie die Ressourcen, die Sie bereitstellen SageMaker möchten. Erstellen Sie einen Endpunkt mit CreateEndpoint unter Verwendung der in der Anforderung angegebenen Endpunktkonfiguration Sie können einen asynchronen Endpunkt mit der UpdateEndpoint API aktualisieren. Senden und Empfangen von Inferenzanfragen von dem auf dem Endpunkt gehosteten Modell mit InvokeEndpointAsync. Sie können Ihre Endpunkte mit der DeleteEndpoint API löschen.

Eine vollständige Liste der verfügbaren SageMaker Images finden Sie unter Verfügbare Deep Learning Containers Learning-Container-Images. Informationen Verwenden Ihres eigenen Inferenzcodes zum Erstellen eines Docker-Images

Erstellen eines Modells

Das folgende Beispiel zeigt, wie man ein Modell mit Hilfe des AWS SDK for Python (Boto3). Die ersten paar Zeilen definieren:

  • sagemaker_client: Ein SageMaker Client-Objekt auf niedriger Ebene, das das Senden und Empfangen von Anfragen an AWS Dienste vereinfacht.

  • sagemaker_role: Eine Zeichenkettenvariable mit der SageMaker IAM-Rolle Amazon Resource Name (ARN).

  • aws_region: Eine Zeichenkettenvariable mit dem Namen Ihrer AWS Region.

import boto3 # Specify your AWS Region aws_region='<aws_region>' # Create a low-level SageMaker service client. sagemaker_client = boto3.client('sagemaker', region_name=aws_region) # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<account>:role/*"

Geben Sie als Nächstes den Speicherort des vortrainierten Modells an, das in Amazon S3 gespeichert ist. In diesem Beispiel verwenden wir ein vortrainiertes XGBoost-Modell mit dem Namen demo-xgboost-model.tar.gz. Die vollständige Amazon-S3-URI wird in einer Zeichenkettenvariablen gespeichert model_url:

#Create a variable w/ the model S3 URI s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket bucket_prefix='saved_models' model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz" #Specify S3 bucket w/ model model_url = f"s3://{s3_bucket}/{model_s3_key}"

Geben Sie einen primären Container an. Für den primären Container geben Sie das Docker-Image an, das den Inferenzcode, Artefakte (aus früheren Trainings) und eine benutzerdefinierte Umgebungszuordnung enthält, die der Inferenzcode verwendet, wenn Sie das Modell für Vorhersagen einsetzen.

In diesem Beispiel geben wir ein Container-Image für den integrierten XGBoost-Algorithmus an:

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

Erstellen Sie ein Modell in Amazon SageMaker mitCreateModel. Machen Sie folgende Angaben:

  • ModelName: Ein Name für Ihr Modell (in diesem Beispiel wird es als String-variable namens model_name gespeichert).

  • ExecutionRoleArn: Der Amazon-Ressourcenname (ARN) der IAM-Rolle, die Amazon für den Zugriff auf Modellartefakte und Docker-Images für die Bereitstellung auf ML-Compute-Instances oder für Batch-Transformationsjobs übernehmen SageMaker kann.

  • PrimaryContainer: Der Speicherort des primären Docker-Image mit Inferenzcode, zugehörigen Artefakten und benutzerdefinierter Umgebungs-Map, die der Inferenz-Code verwendet, wenn das Modell für die Voraussagen bereitgestellt wird.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, })

Eine vollständige Liste der SageMaker API-Parameter finden Sie in der CreateModelBeschreibung im API-Referenzhandbuch.

Wenn Sie einen SageMaker bereitgestellten Container verwenden, können Sie das Timeout für den Modellserver und die Nutzlastgrößen von den Standardwerten auf die vom Framework unterstützten Höchstwerte erhöhen, indem Sie in diesem Schritt Umgebungsvariablen festlegen. Wenn Sie diese Variablen nicht explizit festlegen, können Sie die maximalen Timeout- und Payload-Größen, die Asynchronous Inference unterstützt, möglicherweise nicht nutzen. Das folgende Beispiel zeigt, wie Sie die Umgebungsvariablen für einen Inferenzcontainer auf der Grundlage von festlegen können. PyTorch TorchServe

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

Nachdem Sie Ihren Endpunkt erstellt haben, sollten Sie testen, ob Sie die Umgebungsvariablen korrekt gesetzt haben, indem Sie sie aus Ihrem Skript inference.py ausdrucken. In der folgenden Tabelle sind die Umgebungsvariablen für verschiedene Frameworks aufgeführt, die Sie festlegen können, um die Standardwerte zu ändern.

Framework Umgebungsvariablen

PyTorch 1.8 (basierend auf TorchServe)

'TS_MAX_REQUEST_SIZE': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (basierend auf MMS)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace Inference Container (basierend auf MMS)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

Erstellen einer Endpunktkonfiguration

Sobald Sie ein Modell haben, erstellen Sie eine Endpunktkonfiguration mit CreateEndpointConfig. Amazon SageMaker Hosting Services verwendet diese Konfiguration zur Bereitstellung von Modellen. In der Konfiguration identifizieren Sie ein oder mehrere Modelle, die mit with erstellt wurden CreateModel, um die Ressourcen bereitzustellen, die Amazon SageMaker bereitstellen soll. Geben Sie das AsyncInferenceConfig Objekt an und geben Sie einen Amazon S3-Ausgabespeicherort für OutputConfig. Sie können optional Amazon SNS Themen angeben, zu denen Benachrichtigungen über Prognoseergebnisse gesendet werden sollen. Weitere Informationen zu Amazon SNS-Themen finden Sie unter Konfigurieren von Amazon SNS.

Das folgende Beispiel zeigt, wie Sie eine Endpunktkonfiguration mit AWS SDK for Python (Boto3) erstellen:

import datetime from time import gmtime, strftime # Create an endpoint config name. Here we create one based on the date # so it we can search endpoints based on creation time. endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}" # The name of the model that you want to host. This is the name that you specified when creating the model. model_name='<The_name_of_your_model>' create_endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request. # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.m5.xlarge", # Specify the compute instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ], AsyncInferenceConfig={ "OutputConfig": { # Location to upload response outputs when no location is provided in the request. "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output" # (Optional) specify Amazon SNS topics "NotificationConfig": { "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name", "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name", } }, "ClientConfig": { # (Optional) Specify the max number of inflight invocations per instance # If no value is provided, Amazon SageMaker will choose an optimal value for you "MaxConcurrentInvocationsPerInstance": 4 } } ) print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

Im oben genannten Beispiel geben Sie die folgenden Schlüssel für OutputConfig für AsyncInferenceConfig Feld an:

  • S3OutputPath: Ort zum Hochladen von Antwortausgaben, wenn in der Anfrage kein Standort angegeben ist.

  • NotificationConfig: (Optional) SNS-Themen, die Benachrichtigungen an Sie senden, wenn eine Inferenzanfrage erfolgreich (SuccessTopic) ist oder fehlschlägt (ErrorTopic).

Sie können in dem Feld auch das folgende optionale Argument für ClientConfig in AsyncInferenceConfig angeben:

  • MaxConcurrentInvocationsPerInstance: (Optional) Die maximale Anzahl gleichzeitiger Anfragen, die vom SageMaker Client an den Modellcontainer gesendet werden.

Erstellen eines Endpunkts

Sobald Sie Ihr Modell und Ihre Endpunktkonfiguration haben, verwenden Sie die CreateEndpoint API, um Ihren Endpunkt zu erstellen. Der Endpunktname muss innerhalb einer AWS Region in Ihrem AWS Konto eindeutig sein.

Im Folgenden wird ein Endpunkt unter Verwendung der in der Anfrage angegebenen Endpunktkonfiguration erstellt. Amazon SageMaker verwendet den Endpunkt, um Ressourcen bereitzustellen und Modelle bereitzustellen.

# The name of the endpoint.The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

Wenn Sie die CreateEndpoint API aufrufen, sendet Amazon SageMaker Asynchronous Inference eine Testbenachrichtigung, um zu überprüfen, ob Sie ein Amazon SNS SNS-Thema konfiguriert haben. Amazon SageMaker Asynchronous Inference sendet auch Testbenachrichtigungen nach UpdateEndpoint Aufrufen von und. UpdateEndpointWeightsAndCapacities Auf diese Weise können SageMaker Sie überprüfen, ob Sie über die erforderlichen Berechtigungen verfügen. Die Benachrichtigung kann einfach ignoriert werden. Die Test-Benachrichtigung verfügt über das folgende Format:

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }