Utilisation d'un point de terminaison multi-conteneurs avec appel direct - 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 point de terminaison multi-conteneurs avec appel direct

SageMaker les points de terminaison à conteneurs multiples permettent aux clients de déployer plusieurs conteneurs pour déployer différents modèles sur un SageMaker point de terminaison. Vous pouvez héberger 15 conteneurs d'inférence différents au maximum sur un seul point de terminaison. L'appel direct vous permet d'envoyer une demande à un conteneur d'inférence spécifique hébergé sur un point de terminaison multi-conteneurs.

Appel d'un point de terminaison multi-conteneurs avec appel direct

Pour appeler un point de terminaison multi-conteneurs avec appel direct, appelez invoke_endpoint comme vous le feriez pour un autre point de terminaison, et spécifiez le conteneur que vous voulez appeler à l'aide du paramètre TargetContainerHostname.

L'exemple suivant appelle directement le secondContainer d'un point de terminaison multi-conteneurs afin d'obtenir une prédiction.

import boto3 runtime_sm_client = boto3.Session().client('sagemaker-runtime') response = runtime_sm_client.invoke_endpoint( EndpointName ='my-endpoint', ContentType = 'text/csv', TargetContainerHostname='secondContainer', Body = body)

Pour chaque demande avec appel direct envoyée à un point de terminaison multi-conteneurs, seul le conteneur portant le TargetContainerHostname traite la demande d'appel. Des erreurs de validation se produiront si vous effectuez l'une des opérations suivantes :

  • Vous spécifiez un TargetContainerHostname qui n'existe pas dans le point de terminaison

  • Vous ne spécifiez pas de valeur pour TargetContainerHostname dans une demande envoyée à un point de terminaison configuré pour l'appel direct

  • Vous spécifiez une valeur pour TargetContainerHostname dans une demande envoyée à un point de terminaison qui n'est pas configuré pour l'appel direct.

Sécurité avec terminaux multi-conteneurs avec appel direct

Pour les points de terminaison multi-conteneurs avec appel direct, plusieurs conteneurs sont hébergés dans une seule instance, et partagent la mémoire et un volume de stockage. Il est de votre responsabilité d'utiliser des conteneurs sécurisés, de maintenir le mappage correct des demandes vers les conteneurs cibles et de fournir aux utilisateurs l'accès correct aux conteneurs cibles. SageMakerutilise les rôles IAM pour fournir des politiques basées sur l'identité IAM que vous utilisez pour spécifier si l'accès à une ressource est autorisé ou refusé à ce rôle, et dans quelles conditions. Pour obtenir des informations sur les rôles IAM, veuillez consulter IAM roles (Rôles IAM) dans le Guide de l'utilisateur AWS Identity and Access Management. Pour obtenir des informations sur les politiques basées sur l'identité, veuillez consulter Identity-based policies and resource-based policies (Politiques basées sur l'identité et politiques basées sur les ressources).

Par défaut, un principal IAM disposant d'autorisations InvokeEndpoint sur un point de terminaison multi-conteneurs avec appel direct peut appeler n'importe quel conteneur à l'intérieur du point de terminaison avec le nom de point de terminaison que vous spécifiez lorsque vous appelez invoke_endpoint. Si vous devez restreindre l'accès invoke_endpoint à un ensemble limité de conteneurs à l'intérieur d'un point de terminaison multi-conteneurs, utilisez la clé de condition IAM sagemaker:TargetContainerHostname. Les politiques suivantes montrent comment limiter les appels à des conteneurs spécifiques au sein d'un point de terminaison.

La politique suivante autorise les demandes invoke_endpoint uniquement lorsque la valeur du champ TargetContainerHostname correspond à l'une des expressions régulières spécifiées.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["customIps*", "common*"] } } } ] }

La politique suivante refuse les demandes invoke_endpoint lorsque la valeur du champ TargetContainerHostname correspond à l'une des expressions régulières spécifiées dans l'énoncé Deny.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["*"] } } }, { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Deny", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["special*"] } } } ] }

Pour plus d'informations sur les clés de SageMaker condition, voir Clés de condition pour SageMaker dans le guide de AWS Identity and Access Management l'utilisateur.

Métriques pour les points de terminaison multi-conteneurs avec appel direct

Outre les métriques de point de terminaison répertoriées dansSurveillez Amazon SageMaker avec Amazon CloudWatch, fournit SageMaker également des métriques par conteneur.

Les métriques par conteneur pour les points de terminaison multi-conteneurs avec invocation directe sont situées CloudWatch et classées dans deux espaces de noms : et. AWS/SageMaker aws/sagemaker/Endpoints L'espace de noms AWS/SageMaker inclut des métriques liées à l'appel, et l'espace de noms aws/sagemaker/Endpoints inclut les métriques d'utilisation de la mémoire et de l'UC.

Le tableau suivant répertorie les métriques par conteneur pour les points de terminaison multi-conteneurs avec appel direct. Toutes les métriques utilisent la dimension [EndpointName, VariantName, ContainerName], qui filtre les métriques au niveau d'un point de terminaison spécifique, pour une variante spécifique et correspondant à un conteneur spécifique. Ces métriques partagent les mêmes noms de métriques que les pipelines d'inférence, mais par conteneur [EndpointName, VariantName, ContainerName].

Nom de la métrique Description Dimension NameSpace
Invocations Nombre de demandes InvokeEndpoint envoyées à un conteneur à l'intérieur d'un point de terminaison. Pour obtenir le nombre total de demandes envoyées à ce conteneur, utilisez la statistique Sum. Unités : aucune. Statistiques valides :Sum, Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation4XX Errors Nombre de demandes InvokeEndpoint pour lesquelles le modèle a retourné un code de réponse HTTP 4xx pour un conteneur spécifique. Pour chaque 4xx réponse, SageMaker envoie un1. Unités : aucune. Statistiques valides :Average, Sum EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation5XX Errors Nombre de demandes InvokeEndpoint pour lesquelles le modèle a retourné un code de réponse HTTP 5xx pour un conteneur spécifique. Pour chaque 5xx réponse, SageMaker envoie un1. Unités : aucune. Statistiques valides :Average, Sum EndpointName, VariantName, ContainerName AWS/SageMaker
ContainerLatency Le temps nécessaire pour que le conteneur cible réponde, tel qu'il est vu depuis SageMaker. ContainerLatencyinclut le temps nécessaire pour envoyer la demande, récupérer la réponse dans le conteneur du modèle et terminer l'inférence dans le conteneur. Unités : microsecondes. Statistiques valides :Average, Sum, Min, Max, Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
OverheadLatency Le temps ajouté au temps nécessaire pour répondre à une demande d'un client par rapport SageMaker aux frais généraux. OverheadLatencyest mesuré à partir du moment où la demande est reçue jusqu'à ce qu'elle renvoie une réponse au client, moins leModelLatency. SageMaker La latence de surcharge peut varier en fonction de différents facteurs, dont les tailles des charges utiles de demande et de réponse, la fréquence des demandes, ainsi que l'authentification ou l'autorisation de la demande. Unités : microsecondes. Statistiques valides :Average, Sum, Min, Max, « nombre d'échantillons » EndpointName, VariantName, ContainerName AWS/SageMaker
CPUUtilization Pourcentage d'unités d'UC utilisées par chaque conteneur en cours d'exécution sur une instance. La valeur s'étend de 0 % à 100 % et elle est multipliée par le nombre de processeurs. Par exemple, s'il y a quatre processeurs, CPUUtilization peut varier de 0 % à 400 %. Pour les points de terminaison avec appel direct, le nombre de métriques CPUUtilization équivaut au nombre de conteneurs dans ce point de terminaison. Unités : pourcentage EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints
MemoryUtilizaton Pourcentage de mémoire utilisée par chaque conteneur en cours d'exécution sur une instance. Cette valeur est comprise entre 0 % et 100 %. Comme pour CPUUtilization, dans les points de terminaison avec invocation directe, le nombre de MemoryUtilization métriques est égal au nombre de conteneurs contenus dans ce point de terminaison. Unités : pourcentage EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints

Toutes les métriques du tableau précédent sont spécifiques aux points de terminaison multi-conteneurs avec appel direct. Outre ces métriques spéciales par conteneur, il existe des métriques au niveau de la variante avec la dimension [EndpointName, VariantName] pour toutes les métriques du tableau qui attendent ContainerLatency.

Scalabilité automatique de points de terminaison multi-conteneurs

Si vous voulez configurer la scalabilité automatique pour un point de terminaison multi-conteneurs à l'aide de la métrique InvocationsPerInstance, veillez à ce que le modèle de chaque conteneur présente une utilisation de l'UC et une latence similaires pour chaque demande d'inférence. En effet, si le trafic vers le point de terminaison multi-conteneurs passe d'un modèle d'utilisation d'UC faible à un modèle d'utilisation d'UC élevée, mais que le volume d'appel global ne change pas, le point de terminaison ne se met pas à l'échelle et le nombre d'instances peut ne pas suffire pour traiter toutes les demandes envoyées au modèle d'utilisation d'UC élevée. Pour obtenir des informations sur la capacité de mise à l'échelle automatique des points de terminaison, veuillez consulter Redimensionnez automatiquement les SageMaker modèles Amazon.

Résolution des erreurs associées aux points de terminaison multi-conteneurs

Les sections suivantes peuvent vous aider à résoudre les erreurs associées aux points de terminaison multi-conteneurs.

Erreurs de surveillance de l'état du ping

Avec des conteneurs multiples, la mémoire et l'UC du point de terminaison subissent une pression plus élevée lors de la création des points de terminaison. Plus précisément, les métriques MemoryUtilization et CPUUtilization sont plus élevées que pour les points de terminaison à conteneur unique, car la pression d'utilisation est proportionnelle au nombre de conteneurs. Voilà pourquoi nous vous recommandons de choisir des types d'instance disposant d'une capacité de mémoire et d'UC suffisante pour qu'il y ait suffisamment de mémoire sur l'instance pour que tous les modèles soient chargés (c'est la même chose pour le déploiement d'un pipeline d'inférence). Sinon, la création de votre point de terminaison peut ne pas aboutir, avec une erreur telle que XXX did not pass the ping health check.

Étiquette Docker accept-bind-to-port =true manquante

Les conteneurs présents dans des points de terminaison multi-conteneurs sont à l'écoute sur le port spécifié dans la variable d'environnement SAGEMAKER_BIND_TO_PORT (au lieu du port 8080). Lorsqu'un conteneur s'exécute sur un point de terminaison multi-conteneurs, fournit SageMaker automatiquement cette variable d'environnement au conteneur. Si cette variable d'environnement n'est pas présente, les conteneurs utilisent par défaut le port 8080. Pour indiquer que votre conteneur répond à cette exigence, utilisez la commande suivante pour ajouter une étiquette à votre fichier Dockerfile :

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

Sinon, un message d'erreur s'affichera, tel que Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s).

Si votre conteneur doit être à l'écoute sur un second port, choisissez un port dans la plage spécifiée par la variable d'environnement SAGEMAKER_SAFE_PORT_RANGE. Spécifiez la valeur sous forme de plage inclusive au format XXXX - YYYY, où XXXX et YYYY sont des entiers à plusieurs chiffres. SageMaker fournit cette valeur automatiquement lorsque vous exécutez le conteneur dans un point de terminaison multi-conteneurs.