Créez votre propre conteneur pour les points de SageMaker terminaison multimodèles - 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.

Créez votre propre conteneur pour les points de SageMaker terminaison multimodèles

Reportez-vous aux sections suivantes pour apporter votre propre conteneur et vos dépendances à des points de terminaison multi-modèles.

Apportez vos propres dépendances pour les points de terminaison multimodèles sur CPU les instances sauvegardées

Si aucune des images de conteneur prédéfinies ne répond à vos besoins, vous pouvez créer votre propre conteneur à utiliser avec des points de terminaison multimodèles CPU sauvegardés.

Les images Amazon Elastic Container Registry (AmazonECR) personnalisées déployées sur Amazon SageMaker sont censées respecter le contrat de base décrit dans Code d'inférence personnalisé avec services d'hébergement ce document, qui régit la manière dont il SageMaker interagit avec un conteneur Docker qui exécute votre propre code d'inférence. Pour qu'un conteneur soit capable de charger et de desservir plusieurs modèles simultanément, APIs d'autres comportements doivent être suivis. Ce contrat supplémentaire inclut de nouveaux modèles APIs pour charger, lister, obtenir et décharger, et un autre API pour invoquer des modèles. Il existe également différents comportements pour les scénarios d'erreur auxquels APIs il faut se conformer. Pour indiquer que le conteneur satisfait aux exigences supplémentaires, vous pouvez ajouter la commande suivante à votre fichier Docker :

LABEL com.amazonaws.sagemaker.capabilities.multi-models=true

SageMaker injecte également une variable d'environnement dans le conteneur

SAGEMAKER_MULTI_MODEL=true

Si vous créez un point de terminaison multimodèle pour un pipeline d'inférence série, votre fichier Docker doit avoir les étiquettes requises pour les pipelines multimodèles et d'inférence série. Pour de plus amples informations sur les pipelines d'informations série, veuillez consulter Réalisation de prédictions en temps réel avec un pipeline d'inférence.

Pour vous aider à implémenter ces exigences pour un conteneur personnalisé, deux bibliothèques sont disponibles :

  • Multi Model Server est un framework open source destiné à servir des modèles d'apprentissage automatique qui peuvent être installés dans des conteneurs afin de fournir le front-end répondant aux exigences du nouveau conteneur de points de terminaison multimodèles. APIs Il fournit les fonctionnalités HTTP frontales et de gestion des modèles requises par les terminaux multimodèles pour héberger plusieurs modèles au sein d'un même conteneur, charger des modèles dans le conteneur et les décharger dynamiquement hors du conteneur, et effectuer des inférences sur un modèle chargé spécifié. Il fournit également un backend enfichable qui prend en charge un gestionnaire backend personnalisé enfichable où vous pouvez implémenter votre propre algorithme.

  • SageMaker Inference Toolkit est une bibliothèque qui démarre un serveur multimodèle avec une configuration et des paramètres qui le rendent compatible avec les points de terminaison SageMaker multimodèles. Il vous permet également de modifier des paramètres de performance importants, tels que le nombre de employés par modèle, en fonction des besoins de votre scénario.

Apportez vos propres dépendances pour les points de terminaison multimodèles sur GPU les instances sauvegardées

La fonctionnalité bring your own container (BYOC) sur les terminaux multimodèles dotés d'instances GPU sauvegardées n'est actuellement pas prise en charge par les bibliothèques Multi Model Server et SageMaker Inference Toolkit.

Pour créer des points de terminaison multimodèles avec des instances GPU sauvegardées, vous pouvez utiliser le serveur d'inférence NVIDIA Triton SageMaker pris en charge avec les conteneurs d'inférence Triton. NVIDIA Pour créer vos propres dépendances, vous pouvez créer votre propre conteneur avec le serveur d'inférence NVIDIA Triton SageMaker pris en charge comme image de base de votre fichier Docker :

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
Important

Les conteneurs dotés du serveur d'inférence Triton sont les seuls conteneurs pris en charge que vous pouvez utiliser pour les points de terminaison multimodèles GPU sauvegardés.

Utiliser la boîte à outils SageMaker d'inférence

Note

Le SageMaker Inference Toolkit n'est pris en charge que pour les points de CPU terminaison multimodèles sauvegardés. Le kit SageMaker d'inférence n'est actuellement pas pris en charge pour les points de terminaison multimodèles GPU sauvegardés.

Les conteneurs prédéfinis qui prennent en charge les points de terminaison multimodèles sont répertoriés dans Algorithmes, frameworks et instances pris en charge pour les points de terminaison multimodèles. Si vous voulez utiliser un autre framework ou algorithme, vous devez créer un conteneur. La méthode la plus simple consiste à utiliser le kit d'SageMaker inférence pour étendre un conteneur prédéfini existant. La boîte à outils d' SageMaker inférence est une implémentation pour le serveur multimodèle (MMS) qui crée des points de terminaison dans lesquels il est possible de les déployer. SageMaker Pour un exemple de bloc-notes expliquant comment configurer et déployer un conteneur personnalisé prenant en charge les points de terminaison multimodèles SageMaker, consultez le bloc-notes d'exemple de point de terminaison BYOC multimodèle.

Note

La boîte à outils SageMaker d'inférence ne prend en charge que les gestionnaires de modèles Python. Si vous souhaitez implémenter votre gestionnaire dans un autre langage, vous devez créer votre propre conteneur qui implémente le point de terminaison multimodèle supplémentaire. APIs Pour plus d’informations, veuillez consulter Contrat pour les conteneurs personnalisés pour les points de terminaison multi-modèles.

Pour étendre un conteneur à l'aide de la boîte à outils SageMaker d'inférence
  1. Créez un gestionnaire de modèles. MMSattend un gestionnaire de modèle, qui est un fichier Python qui implémente des fonctions pour prétraiter, obtenir des prédictions à partir du modèle et traiter la sortie dans un gestionnaire de modèle. Pour obtenir un exemple de gestionnaire de modèles, veuillez consulter model_handler.py dans l'exemple de bloc-notes.

  2. Importez la boîte à outils d'inférence et utilisez sa model_server.start_model_server fonction pour commencerMMS. L'exemple suivant provient du fichier dockerd-entrypoint.py de l'exemple de bloc-notes. Notez que l'appel à model_server.start_model_server transmet le gestionnaire de modèles décrit à l'étape précédente :

    import subprocess import sys import shlex import os from retrying import retry from subprocess import CalledProcessError from sagemaker_inference import model_server def _retry_if_error(exception): return isinstance(exception, CalledProcessError or OSError) @retry(stop_max_delay=1000 * 50, retry_on_exception=_retry_if_error) def _start_mms(): # by default the number of workers per model is 1, but we can configure it through the # environment variable below if desired. # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2' model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle') def main(): if sys.argv[1] == 'serve': _start_mms() else: subprocess.check_call(shlex.split(' '.join(sys.argv[1:]))) # prevent docker exit subprocess.call(['tail', '-f', '/dev/null']) main()
  3. Dans votre fichier Dockerfile, copiez le gestionnaire de modèles de la première étape et spécifiez le fichier Python de l'étape précédente comme point d'entrée dans votre Dockerfile. Les lignes suivantes proviennent du fichier Dockerfile utilisé dans l'exemple de bloc-notes :

    # Copy the default custom service file to handle incoming data and inference requests COPY model_handler.py /home/model-server/model_handler.py # Define an entrypoint script for the docker image ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
  4. Créez et enregistrez votre conteneur. Le script shell suivant provenant de l'exemple de bloc-notes crée le conteneur et le charge dans un référentiel Elastic Container Registry de votre compte AWS  :

    %%sh # The name of our algorithm algorithm_name=demo-sagemaker-multimodel cd container account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly $(aws ecr get-login --region ${region} --no-include-email) # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -q -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

Vous pouvez désormais utiliser ce conteneur pour déployer des points de terminaison multimodèles dans. SageMaker