Création de votre propre conteneur pour les points de terminaison multi-modèles SageMaker - 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éation de votre propre conteneur pour les points de terminaison multi-modèles SageMaker

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 multi-modèles sur les instances basées sur un processeur

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 multi-modèles soutenus par le processeur.

Les images Amazon Elastic Container Registry (Amazon ECR) personnalisées déployées dans Amazon SageMaker doivent respecter le contrat de base décrit dans Utilisation de votre propre code d'inférence avec les services d'hébergement, qui régit la façon dont SageMaker interagit avec un conteneur Docker qui exécute votre propre code d'inférence. Pour qu'un conteneur puisse charger et servir plusieurs modèles simultanément, il existe des API et des comportements supplémentaires qui doivent être suivis. Ce contrat supplémentaire inclut de nouvelles API pour charger, lister, obtenir et décharger des modèles, ainsi qu'une API différente pour appeler des modèles. Il existe également différents comportements pour les scénarios d'erreur que les API doivent respecter. 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 de machine learning qui peuvent être installés dans des conteneurs pour fournir l'interface frontale qui répond aux exigences des nouvelles API de conteneur de point de terminaison multi-modèles. Il fournit les fonctionnalités de gestion frontale et de modèle HTTP requises par les points de terminaison multi-modèles pour héberger plusieurs modèles dans un conteneur unique, y charger des modèles et décharger dynamiquement des modèles hors du conteneur, et effectuer une inférence 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 amorce Multi Model Server avec une configuration et des paramètres qui le rendent compatible avec les points de terminaison multimodèles SageMaker. 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.

Apport de vos propres dépendances pour les points de terminaison multi-modèles sur les instances basées sur un GPU

La fonctionnalité BYOC (Bring your own container) sur des points de terminaison multi-modèles dotés d'instances basées sur des GPU n'est actuellement pas prise en charge par les bibliothèques Multi Model Server et de la boîte à outils d'inférence SageMaker.

Pour créer des points de terminaison multi-modèles avec des instances basées sur des GPU, vous pouvez utiliser le serveur d'inférence NVIDIA Triton compatible avec SageMaker et les NVIDIA Triton Inference Containers (conteneurs d'inférence NVIDIA Triton). Pour créer vos propres dépendances, vous pouvez créer votre propre conteneur en utilisant le serveur d'inférence NVIDIA Triton compatible avec SageMaker 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 équipés du serveur d'inférence Triton sont les seuls conteneurs pris en charge que vous pouvez utiliser pour les points de terminaison multi-modèles basés sur des GPU.

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

Note

La boîte à outils d'inférence SageMaker n'est prise en charge que pour les points de terminaison multi-modèles basés sur des processeurs. La boîte à outils d'inférence SageMaker n'est pas actuellement prise en charge pour les points de terminaison multi-modèles basés sur des GPU.

Les conteneurs prédéfinis qui prennent en charge les points de terminaison multimodèles sont répertoriés dans Algorithmes, cadres et instances pris en charge. Si vous voulez utiliser un autre framework ou algorithme, vous devez créer un conteneur. La façon la plus simple de le faire est d'utiliser la boîte à outils d'inférence SageMaker pour étendre un conteneur préconçu existant. La boîte à outils d'inférence SageMaker est une implémentation de Multi Model Server (MMS) qui crée des points de terminaison pouvant être déployés dans SageMaker. Pour obtenir un exemple de bloc-notes qui montre comment configurer et déployer un conteneur personnalisé prenant en charge les points de terminaison multimodèles dans SageMaker, veuillez consulter l'exemple de bloc-notes BYOC de point de terminaison multimodèles.

Note

La boîte à outils d'inférence SageMaker prend uniquement en charge les gestionnaires de modèles Python. Si vous souhaitez implémenter votre gestionnaire dans une autre langage, vous devez créer votre propre conteneur qui implémente les API de point de terminaison multimodèle supplémentaires. Pour plus d'informations, consultez 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 d'inférence SageMaker
  1. Créez un gestionnaire de modèles. Le serveur MMS attend un gestionnaire de modèles, qui est un fichier Python implémentant des fonctions pour prétraiter, obtenir des prédictions à partir du modèle et traiter la sortie dans un gestionnaire de modèles. 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 fonction model_server.start_model_server pour démarrer le serveur MMS. 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.