Utilisation d'un registre Docker privé pour les conteneurs d'inférence en temps réel - 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.

Utilisation d'un registre Docker privé pour les conteneurs d'inférence en temps réel

SageMaker L'hébergement Amazon vous permet d'utiliser des images stockées dans Amazon ECR pour créer vos conteneurs en vue d'une inférence en temps réel par défaut. En option, vous pouvez créer des conteneurs pour une inférence en temps réel à partir d'images dans un registre Docker privé. Le registre privé doit être accessible à partir d'un Amazon VPC de votre compte. Les modèles que vous créez sur la base des images stockées dans votre registre Docker privé doivent être configurés pour se connecter au même VPC que celui où le registre Docker privé est accessible. Pour de plus amples informations sur la connexion de votre modèle à un VPC, veuillez consulter Donnez aux points de terminaison SageMaker hébergés l'accès aux ressources de votre Amazon VPC.

Votre registre Docker doit être sécurisé à l'aide d'un certificat TLS provenant d'une autorité de certification (CA) publique connue.

Note

Votre registre Docker privé doit autoriser le trafic entrant en provenance des groupes de sécurité que vous spécifiez dans la configuration VPC de votre modèle, afin que l' SageMaker hébergement puisse extraire les images des modèles de votre registre.

SageMaker peut extraire des images de modèles DockerHub s'il existe un chemin vers l'Internet ouvert dans votre VPC.

Stocker les images dans un registre Docker privé autre que Amazon Elastic Container Registry

Pour utiliser un registre Docker privé afin de stocker vos images à des fins d'inférence SageMaker en temps réel, créez un registre privé accessible depuis votre Amazon VPC. Pour de plus amples informations sur la création d'un registre Docker, veuillez consulter Deploy a registry server (Déployer un serveur de registre) dans la documentation Docker. Le registre Docker doit satisfaire aux exigences suivantes :

  • Le registre doit être un registre Docker Registry HTTP API V2.

  • Le registre Docker doit être accessible depuis le même VPC que celui que vous avez spécifié dans le paramètre VpcConfig lors de la création de votre modèle.

Utilisation d'une image provenant d'un registre Docker privé pour une inférence en temps réel

Lorsque vous créez un modèle et que vous le déployez sur un SageMaker hébergement, vous pouvez spécifier qu'il utilise une image provenant de votre registre Docker privé pour créer le conteneur d'inférence. Vous spécifiez ceci dans l'objet ImageConfig du paramètre PrimaryContainer que vous passez à un appel à la fonction create_model.

Pour utiliser une image stockée dans votre registre Docker privé pour votre conteneur d'inférence
  1. Créez l'objet de configuration d'image et spécifiez une valeur de Vpc pour le champ RepositoryAccessMode.

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. Si votre registre Docker privé nécessite une authentification, ajoutez un objet RepositoryAuthConfig à l'objet de configuration d'image. Pour le RepositoryCredentialsProviderArn champ de l'RepositoryAuthConfigobjet, spécifiez le nom de ressource Amazon (ARN) d'une AWS Lambda fonction qui fournit des informations d'identification permettant de s' SageMaker authentifier auprès de votre registre Docker privé. Pour de plus amples informations sur la création de la fonction Lambda pour fournir une authentification, veuillez consulter SageMaker Autoriser l'authentification auprès d'un registre Docker privé.

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. Créez l'objet de conteneur principal que vous voulez passer à create_model en utilisant l'objet de configuration d'image que vous avez créé à l'étape précédente.

    Fournissez votre image sous forme digest. Si vous fournissez votre image à l'aide de la :latest balise, vous risquez d' SageMaker obtenir une version plus récente de l'image que prévu. L'utilisation du formulaire de résumé garantit l' SageMaker extraction de la version d'image souhaitée.

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. Indiquez le nom du modèle et le rôle d'exécution que vous voulez passer à create_model.

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. Spécifiez un ou plusieurs groupes et sous-réseaux de sécurité pour la configuration VPC de votre modèle. Votre registre Docker privé doit autoriser le trafic entrant provenant des groupes de sécurité que vous spécifiez. Les sous-réseaux que vous spécifiez doivent se trouver dans le même VPC que votre registre Docker privé.

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  6. Procurez-vous un client Boto3 SageMaker .

    import boto3 sm = boto3.client('sagemaker')
  7. Créez le modèle en appelant create_model, en utilisant les valeurs que vous avez spécifiées dans les étapes précédentes pour les paramètres PrimaryContainer et VpcConfig.

    try: resp = sm.create_model( ModelName=model_name, PrimaryContainer=primary_container, ExecutionRoleArn=execution_role_arn, VpcConfig=vpc_config, ) except Exception as e: print(f'error calling CreateModel operation: {e}') else: print(resp)
  8. Enfin, appelez create_endpoint_config et create_endpoint pour créer le point de terminaison d'hébergement à l'aide du modèle que vous avez créé à l'étape précédente.

    endpoint_config_name = 'my-endpoint-config' sm.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { 'VariantName': 'MyVariant', 'ModelName': model_name, 'InitialInstanceCount': 1, 'InstanceType': 'ml.t2.medium' }, ], ) endpoint_name = 'my-endpoint' sm.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name, ) sm.describe_endpoint(EndpointName=endpoint_name)

SageMaker Autoriser l'authentification auprès d'un registre Docker privé

Pour extraire une image d'inférence d'un registre Docker privé qui nécessite une authentification, créez une AWS Lambda fonction fournissant des informations d'identification et fournissez le nom de ressource Amazon (ARN) de la fonction Lambda lorsque vous appelez create_model. Lorsqu'il est SageMaker exécutécreate_model, il appelle la fonction Lambda que vous avez spécifiée pour obtenir les informations d'identification nécessaires pour vous authentifier auprès de votre registre Docker.

Créer la fonction Lambda

Créez une AWS Lambda fonction qui renvoie une réponse sous la forme suivante :

def handler(event, context): response = { "Credentials": {"Username": "username", "Password": "password"} } return response

Selon la façon dont vous configurez l'authentification pour votre registre Docker privé, les informations d'identification renvoyées par votre fonction Lambda peuvent signifier deux choses différentes :

  • Si vous configurez votre registre Docker privé de manière à utiliser l'authentification de base, fournissez les informations d'identification de connexion requises pour vous authentifier auprès du registre.

  • Si vous configurez votre registre Docker privé de manière à utiliser l'authentification par jeton porteur, les informations d'identification de connexion sont envoyées à votre serveur d'autorisation, qui renvoie un jeton porteur utilisable ensuite pour vous authentifier auprès du registre Docker privé.

Donner l'autorisation de votre rôle d'exécution à Lambda

Le rôle d'exécution que vous utilisez pour appeler create_model doit être autorisé à appeler AWS Lambda des fonctions. Ajoutez les éléments suivants à la politique d'autorisation de votre rôle d'exécution.

{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*myLambdaFunction*" ] }

Où se myLambdaFunctiontrouve le nom de votre fonction Lambda ? Pour de plus amples informations sur la modification d'une politique d'autorisations de rôle, veuillez consulter Modifying a role permissions policy (console) (Modification d'une stratégie d'autorisations de rôle (console) dans le AWS Identity and Access Management Guide de l'utilisateur.

Note

Un rôle d'exécution auquel est attachée la politique AmazonSageMakerFullAccess gérée est autorisé à appeler n'importe quelle fonction Lambda dont le nom figure SageMakerdans son nom.

Créer un point de terminaison de VPC d'interface pour Lambda

Créez un point de terminaison d'interface pour que votre Amazon VPC puisse communiquer avec votre fonction AWS Lambda sans envoyer de trafic sur Internet. Pour de plus amples informations sur la procédure à suivre, veuillez consulter Configuring interface VPC endpoints for Lambda (Configuration de points de terminaison de VPC d'interface pour Lambda) dans le AWS Lambda Manuel du développeur.

SageMaker L'hébergement envoie une demande via votre VPC àlambda.region.amazonaws.com, pour appeler votre fonction Lambda. Si vous choisissez un nom DNS privé lorsque vous créez votre point de terminaison d'interface, Amazon Route 53 achemine l'appel vers le point de terminaison d'interface Lambda. Si vous utilisez un fournisseur de DNS différent, veillez à mapper lambda.region.amazonaws.com à votre point de terminaison d'interface Lambda.