Invoquer un point de terminaison multimodèle - Amazon SageMaker

Invoquer un point de terminaison multimodèle

Pour appeler un point de terminaison multimodèles, utilisez le invoke_endpoint à partir du runtime SageMaker comme vous le feriez pour appeler un point de terminaison de modèle unique, à une modification près. Transmettez un nouveau paramètre TargetModel qui spécifie le modèle au point de terminaison à cibler. La demande InvokeEndpoint du runtime SageMaker prend en charge X-Amzn-SageMaker-Target-Model comme nouvel en-tête qui prend le chemin relatif du modèle spécifié pour l'appel. Le système SageMaker crée le chemin absolu du modèle en combinant le préfixe fourni dans le cadre de l'appel d'API CreateModel avec le chemin relatif du modèle.

AWS SDK for Python (Boto 3)

L'exemple de demande de prédiction suivant utilise le kit SDK AWS pour Python (Boto 3) dans l'exemple de bloc-notes.

response = runtime_sagemaker_client.invoke_endpoint( EndpointName = "<ENDPOINT_NAME>", ContentType = "text/csv", TargetModel = "<MODEL_FILENAME>.tar.gz", Body = body)
AWS CLI

L'exemple suivant montre comment effectuer une demande CSV avec deux lignes à l'aide de la AWS Command Line Interface (AWS CLI) :

aws sagemaker-runtime invoke-endpoint \ --endpoint-name "<ENDPOINT_NAME>" \ --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \ --content-type "text/csv" \ --target-model "<MODEL_NAME>.tar.gz" output_file.txt

Un output_file.txt contenant des informations sur vos demandes d'inférence est créé si l'inférence a réussi. Pour obtenir des exemples supplémentaires sur la réalisation de prédictions avec la AWS CLI, veuillez consulter Making predictions with the AWS CLI (Réaliser des prédictions avec la CLI) dans la documentation du kit SDK SageMaker Python.

Le point de terminaison multimodèle charge dynamiquement les modèles cibles selon les besoins. Vous pouvez observer cela lors de l'exécution de l'Exemple de bloc-notes MME, car il itère à travers des invocations aléatoires sur plusieurs modèles cibles hébergés derrière un seul point de terminaison. La première demande relative à un modèle donné prend plus de temps, car le modèle doit être téléchargé depuis Amazon Simple Storage Service (Amazon S3) et chargé en mémoire. (C'est ce qu'on appelle un démarrage à froid.) Les appels suivants se terminent plus rapidement, car il n'y a pas de surcharge supplémentaire après le chargement du modèle.

Relancer des demandes après des erreurs ModelNotReadyException

La première fois que vous appelez invoke_endpoint pour un modèle, le modèle est téléchargé depuis Amazon Simple Storage Service et chargé dans le conteneur d'inférence. Le renvoi du premier appel est donc plus long. Les appels suivants au même modèle se terminent plus rapidement, car le modèle est déjà chargé.

SageMaker renvoie une réponse pour un appel à invoke_endpointen moins de 60 secondes. Certains modèles sont trop volumineux pour être téléchargés en 60 secondes. Si le chargement du modèle ne se termine pas dans les 60 secondes prévues, la demande de invoke_endpoint revient avec le code d'erreur ModelNotReadyException, et le téléchargement et le chargement du modèle dans le conteneur d'inférence se poursuivent pendant une durée maximale de 360 secondes. Si vous obtenez un code d'erreur ModelNotReadyException pour une demande invoke_endpoint, relancez la demande. Par défaut, les kits SDK AWS pour Python (Boto3) (utilisant le mode de relance hérité) et Java relancent des demandes invoke_endpoint qui aboutissent à des erreurs ModelNotReadyException. Vous pouvez configurer la stratégie de relance pour continuer de relancer la demande pendant une durée maximale de 360 secondes. Si vous pensez que le téléchargement et le chargement de votre modèle dans le conteneur prendront plus de 60 secondes, définissez le délai d'expiration du socket SDK sur 70 secondes. Pour de plus amples informations sur la configuration de la stratégie de relance pour Boto3, veuillez consulter Configuring a retry mode (Configuration d'un mode de relance). Le code suivant montre un exemple de configuration de la politique de relance pour relancer des appels àinvoke_endpoint pendant 180 secondes maximum.

import boto3 from botocore.config import Config # This example retry strategy sets the retry attempts to 2. # With this setting, the request can attempt to download and/or load the model # for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds) config = Config( read_timeout=70, retries={ 'max_attempts': 2 # This value can be adjusted to 5 to go up to the 360s max timeout } ) runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)