Créer un point de terminaison multimodèle - Amazon SageMaker

Créer un point de terminaison multimodèle

Vous pouvez utiliser le AWS SDK for Python (Boto) ou Amazon SageMaker pour créer un point de terminaison multimodèles.

Créer un point de terminaison multimodèle (console)

Pour créer un point de terminaison multimodèle (console)

  1. Ouvrez la console Amazon SageMaker à l'adresse https://console.aws.amazon.com/sagemaker/.https://console.aws.amazon.com/sagemaker/

  2. Choisissez Model (Modèle), puis dans le groupe Inference (Inférence) choisissez Create model (Créer un modèle).

  3. Dans Model name (Nom du modèle), entrez un nom.

  4. Pour IAM role (rôle IAM), choisissez ou créez un rôle IAM auquel la politique AmazonSageMakerFullAccess IAM est attachée.

  5. Dans la section Définition du conteneur (Container definition), pour Provide model artifacts (Fournir les artefacts de modèle et les options d'image d'inférence)choisissez Use multiple models (Utiliser plusieurs modèles).

    
              La section de la page Create model (Créer un modèle) où vous pouvez choisir Use multiple models (Utiliser plusieurs modèles) pour héberger plusieurs modèles sur un seul point de terminaison.
  6. Sélectionnez Create model.

  7. Déployez votre point de terminaison multimodèle comme vous le feriez pour un point de terminaison de modèle unique. Pour obtenir des instructions, consultez Déployer le modèle sur les services d'hébergement SageMaker.

Créer un point de terminaison multimodèle AWS SDK for Python (Boto3)

Vous créez un point de terminaison multimodèles à l'aide des API create_model, create_endpoint_config et create_endpoint Amazon SageMaker comme vous le feriez pour créer un point de terminaison de modèle unique, mais avec deux modifications. Lors de la définition du conteneur de modèle, vous devez transmettre une nouvelle valeur de paramètre Mode, MultiModel. Vous devez également transmettre le champ ModelDataUrl qui spécifie le préfixe dans Amazon S3 où se trouvent les artefacts de modèle, au lieu du chemin d'accès à un artefact de modèle unique, comme vous le feriez pour le déploiement d'un modèle unique.

Pour obtenir un exemple de bloc-notes qui utilise SageMaker pour déployer plusieurs modèles XGBoost sur un point de terminaison, veuillez consulter l'Exemple de bloc-notes XGBoost de point de terminaison multimodèles.

La procédure suivante décrit les étapes clés utilisées dans cet exemple pour créer un point de terminaison multimodèle.

Pour déployer le modèle (SDK AWS pour Python (Boto 3))

  1. Obtenez un conteneur avec une image qui prend en charge le déploiement de points de terminaison multimodèles. Pour obtenir la liste des algorithmes intégrés et des conteneurs de cadre qui prennent en charge les points de terminaison multimodèles, veuillez consulter Algorithmes et cadres pris en charge. Dans cet exemple, nous utilisons l'algorithme intégré Algorithme k-NN (K-Nearest Neighbors, k plus proches voisins). Nous appelons l'utilitaire image_uris.retrieve()du Kit SDK SageMaker Python pour obtenir l'adresse de l'image de l'algorithme intégré K-Nearest Neighbors.

    import sagemaker region = sagemaker_session.boto_region_name image = sagemaker.image_uris.retrieve("knn",region=region) container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' }
  2. Obtenez un client Boto 3 SageMaker et créez le modèle qui utilise ce conteneur.

    import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container])
  3. (Facultatif) Si vous utilisez un pipeline d'inférence série, obtenez le ou les conteneurs supplémentaires à inclure dans le pipeline et incluez-le dans l'argument Containers de CreateModel:

    preprocessor_container = { 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>' } multi_model_container = { 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>', 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' } response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [preprocessor_container, multi_model_container] )
  4. (Facultatif) Si votre cas d'utilisation ne bénéficie pas de la mise en cache des modèles, définissez la valeur du champ ModelCacheSetting du paramètre MultiModelConfig sur Disabled, et incluez-la dans l'argument Container de l'appel à create_model. La valeur du champ ModelCacheSetting est Enabled par défaut.

    container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' 'MultiModelConfig': { // Default value is 'Enabled' 'ModelCacheSetting': 'Disabled' } } response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container] )
  5. Configurez le point de terminaison multimodèle pour le modèle. Nous vous recommandons de configurer vos points de terminaison avec au moins deux instances. Cela permet à SageMaker de fournir un ensemble de prédictions hautement disponibles sur plusieurs zones de disponibilité pour les modèles.

    response = sagemaker_client.create_endpoint_config( EndpointConfigName = '<ENDPOINT_CONFIG_NAME>', ProductionVariants=[ { 'InstanceType': 'ml.m4.xlarge', 'InitialInstanceCount': 2, 'InitialVariantWeight': 1, 'ModelName': '<MODEL_NAME>', 'VariantName': 'AllTraffic' } ] )
    Note

    Vous ne pouvez utiliser qu'un seul point de terminaison multimodèle dans un pipeline d'inférence série.

  6. Créez le point de terminaison multimodèle à l'aide des paramètres EndpointName et EndpointConfigName.

    response = sagemaker_client.create_endpoint( EndpointName = '<ENDPOINT_NAME>', EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')