Crea un endpoint di inferenza asincrona - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea un endpoint di inferenza asincrona

Crea un endpoint asincrono nello stesso modo in cui creeresti un endpoint utilizzando i servizi di hosting: SageMaker

  • Crea un modello con. SageMaker CreateModel

  • Crea una configurazione endpoint con CreateEndpointConfig.

  • Crea un endpoint HTTPS con CreateEndpoint.

Per creare un endpoint, devi prima creare un modello con CreateModel, in cui punti all'artefatto del modello e a un percorso di registro Docker (immagine). Quindi CreateEndpointConfigcrei una configurazione specificando uno o più modelli creati utilizzando l'CreateModelAPI per la distribuzione e le risorse che desideri SageMaker fornire. Crea un endpoint con CreateEndpoint utilizzando la configurazione specificata nella richiesta. Puoi aggiornare un endpoint asincrono con l'API UpdateEndpoint. Invia e ricevi richieste di inferenza dal modello ospitato sull'endpoint con InvokeEndpointAsync. Puoi eliminare i tuoi endpoint con l'API DeleteEndpoint.

Per un elenco completo delle SageMaker immagini disponibili, consulta Available Deep Learning Containers Images. Per informazioni su come creare un'immagine Docker, consulta Utilizzo del tuo codice di inferenza.

Creazione di un modello

L'esempio seguente mostra come creare un modello utilizzando AWS SDK for Python (Boto3). Le prime righe definiscono:

  • sagemaker_client: oggetto SageMaker client di basso livello che semplifica l'invio e la ricezione di richieste ai AWS servizi.

  • sagemaker_role: variabile stringa con il ruolo SageMaker IAM Amazon Resource Name (ARN).

  • aws_region: una variabile di stringa con il nome della tua AWS regione.

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/*"

Successivamente, specifica la posizione del modello preformato archiviato in Amazon S3. In questo esempio, utilizziamo un modello XGBoost preformato denominato demo-xgboost-model.tar.gz. L'URI completo di Amazon S3 è memorizzato in una variabile stringa 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}"

Specifica un container principale. Per il container principale, specifica l'immagine Docker contenente il codice di inferenza, gli artefatti (dall’addestramento precedente) e la mappa dell'ambiente personalizzata che il codice di inferenza utilizza quando distribuisci il modello per le previsioni.

In questo esempio sono specificate un'immagine del container dell'algoritmo integrato XGBoost:

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

Crea un modello in Amazon SageMaker conCreateModel. Specificare le impostazioni seguenti:

  • ModelName: un nome per il modello (in questo esempio viene memorizzato come una variabile di stringa chiamata model_name).

  • ExecutionRoleArn: Amazon Resource Name (ARN) del ruolo IAM che Amazon SageMaker può assumere per accedere agli artefatti del modello e alle immagini Docker per la distribuzione su istanze di calcolo ML o per lavori di trasformazione in batch.

  • PrimaryContainer: il percorso dell'immagine docker principale contenente il codice di inferenza, gli artefatti associati e la mappa dell'ambiente personalizzata che il codice di inferenza utilizza quando il modello è distribuito per le previsioni.

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, })

Per un elenco completo dei parametri SageMaker API, consulta la CreateModeldescrizione nella Guida di riferimento delle API.

Se utilizzi un contenitore SageMaker fornito, puoi aumentare il timeout del server del modello e le dimensioni del payload dai valori predefiniti ai valori massimi supportati dal framework impostando le variabili di ambiente in questo passaggio. Potresti non essere in grado di sfruttare le dimensioni massime di timeout e payload supportate da Asynchronous Inference se non imposti esplicitamente queste variabili. L'esempio seguente mostra come impostare le variabili di ambiente per un contenitore Inference basato su. 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' }, })

Dopo aver finito di creare l'endpoint, dovresti verificare di aver impostato correttamente le variabili di ambiente stampandole dallo script inference.py. La tabella seguente elenca le variabili di ambiente per diversi framework che potete impostare per modificare i valori predefiniti.

Framework Variabili di ambiente

PyTorch 1.8 (basato su TorchServe)

'TS_MAX_REQUEST_SIZE': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (basato su MMS)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace Contenitore di inferenza (basato su MMS)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

Creazione di una configurazione endpoint

Una volta creato un modello, crea una configurazione dell'endpoint con CreateEndpointConfig. I servizi SageMaker di hosting Amazon utilizzano questa configurazione per distribuire modelli. Nella configurazione, identifichi uno o più modelli, creati utilizzando with CreateModel, per distribuire le risorse di cui desideri che Amazon SageMaker fornisca. Specifica l'oggetto AsyncInferenceConfig e fornisci una posizione di output Amazon S3 per OutputConfig. Facoltativamente, puoi specificare gli argomenti di Amazon SNS su cui inviare notifiche sui risultati delle previsioni. Per ulteriori informazioni sugli argomenti Amazon SNS, consulta Configurazione di Amazon SNS.

Nell'esempio seguente viene illustrato come creare una configurazione endpoint utilizzando AWS SDK for Python (Boto3):

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']}")

Nell'esempio precedente, si specificano le seguenti chiavi OutputConfig per il campo AsyncInferenceConfig:

  • S3OutputPath: posizione in cui caricare gli output di risposta quando nella richiesta non viene fornita alcuna posizione.

  • NotificationConfig: (facoltativo) Argomenti SNS che inviano notifiche all'utente quando una richiesta di inferenza ha esito positivo (SuccessTopic) o negativo (ErrorTopic).

È inoltre possibile specificare il seguente argomento opzionale per ClientConfig nel campo AsyncInferenceConfig:

  • MaxConcurrentInvocationsPerInstance: (Facoltativo) Il numero massimo di richieste simultanee inviate dal SageMaker client al contenitore del modello.

Creazione endpoint

Una volta completata la configurazione del modello e dell'endpoint, utilizza l'API CreateEndpoint per creare l'endpoint. Il nome dell'endpoint deve essere univoco all'interno di una AWS regione del tuo AWS account.

L’esempio seguente crea un endpoint utilizzando la configurazione endpoint specificata nella richiesta. Amazon SageMaker utilizza l'endpoint per fornire risorse e distribuire modelli.

# 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)

Quando chiami l'CreateEndpointAPI, Amazon SageMaker Asynchronous Inference invia una notifica di test per verificare che tu abbia configurato un argomento Amazon SNS. Amazon SageMaker Asynchronous Inference invia anche notifiche di test dopo le chiamate a e. UpdateEndpoint UpdateEndpointWeightsAndCapacities Ciò consente di SageMaker verificare che tu disponga delle autorizzazioni richieste. La notifica può essere semplicemente ignorata. La notifica di test ha il seguente formato:

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