Invoquer un point de terminaison multimodèle - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Invoquer un point de terminaison multimodèle

Pour appeler un point de terminaison multimodèle, utilisez le paramètre invoke_endpointfrom the SageMaker Runtime comme vous invoqueriez un point de terminaison de modèle unique, avec une seule modification. Transmettez un nouveau paramètre TargetModel qui spécifie le modèle au point de terminaison à cibler. La InvokeEndpoint demande SageMaker Runtime est prise en charge X-Amzn-SageMaker-Target-Model sous la forme d'un nouvel en-tête qui prend le chemin relatif du modèle spécifié pour l'invocation. Le SageMaker système construit le chemin absolu du modèle en combinant le préfixe fourni dans le cadre de l'CreateModelAPIappel avec le chemin relatif du modèle.

Les procédures suivantes sont les mêmes pour les points de terminaison multimodèles GPU soutenus par CPU et -back.

AWS SDK for Python (Boto 3)

L'exemple de demande de prédiction suivant utilise le AWS SDKpour 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 CSV demande avec deux lignes à l'aide de 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 plus d'exemples sur la façon de faire des prédictions avec le AWS CLI, consultez la section Faire des prédictions avec le AWS CLI dans la SDK documentation SageMaker Python.

Le point de terminaison multimodèle charge dynamiquement les modèles cibles selon les besoins. Vous pouvez observer cela lorsque vous exécutez le MMESample Notebook lorsqu'il itère par le biais d'invocations aléatoires contre 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 que l'on appelle un démarrage à froid, et il doit optimiser les points de terminaison multi-modèles pour offrir un meilleur rapport prix-performances aux clients. Les appels suivants se terminent plus rapidement, car il n'y a pas de surcharge supplémentaire après le chargement du modèle.

Note

Pour les instances GPU sauvegardées, le code de HTTP réponse 507 provenant du GPU conteneur indique un manque de mémoire ou d'autres ressources. Cela entraîne le déchargement des modèles non utilisés du conteneur afin de charger les modèles les plus fréquemment utilisés.

Réessayer les demandes en cas d'erreur 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 à un appel invoke_endpoint dans les 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 invoke_endpoint demandes de nouvelle tentative AWS SDKs pour Python (Boto 3) (utilisant le mode de nouvelle tentative Legacy) et Java qui entraînent 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, réglez le délai d'expiration du SDK socket sur 70 secondes. Pour plus d'informations sur la configuration de la stratégie de relance pour le AWS SDK for Python (Boto3), consultez 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)