Opérateur HostingDeployment - Amazon SageMaker

Opérateur HostingDeployment

Les opérateurs HostingDeployment prennent en charge la création et la suppression d'un point de terminaison, ainsi que la mise à jour d'un point de terminaison existant, pour une inférence en temps réel. L'opérateur de déploiement d'hébergement rapproche la spécification de votre tâche de déploiement d'hébergement spécifiée avec SageMaker en créant des modèles, des configurations de point de terminaison et des points de terminaison dans SageMaker. Pour en savoir plus sur l'inférence SageMaker, veuillez consulter la Documentation relative à l'API CreateEndPoint.

Configuration d'une ressource HostingDeployment

Téléchargez l'exemple de fichier YAML pour la tâche de déploiement d'hébergement à l'aide de la commande suivante :

wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hostingdeployment.yaml

Le fichier xgboost-mnist-hostingdeployment.yaml contient les composants suivants qui peuvent être modifiés selon les besoins :

  • ProductionVariants. Une variante de production est un ensemble d'instances servant un seul modèle. SageMaker équilibre la charge entre toutes les variantes de production en fonction des pondérations définies.

  • Modèles. Un modèle est l'ARN des conteneurs et du rôle d'exécution nécessaire pour servir un modèle. Il nécessite au moins un seul conteneur.

  • Conteneurs. Un conteneur spécifie le jeu de données et l'image de service. Si vous utilisez votre propre algorithme personnalisé au lieu d'un algorithme fourni par SageMaker, le code d'inférence doit répondre aux exigences de SageMaker. Pour plus d'informations, veuillez consulter Utilisation de vos propres algorithmes avec SageMaker

Création d'un HostingDeployment

Pour créer un HostingDeployment, utilisez kubectl pour appliquer le fichier hosting.yaml à l'aide de la commande suivante :

kubectl apply -f hosting.yaml

SageMaker crée un point de terminaison avec la configuration spécifiée. Vous engagez des frais pour les ressources SageMaker utilisées pendant la durée de vie votre point de terminaison. Vous ne payez pas de frais une fois votre point de terminaison supprimé.

Le processus de création prend environ 10 minutes.

Répertorier les HostingDeployments

Pour vérifier que l'HostingDeployment a été créé, utilisez la commande suivante :

kubectl get hostingdeployments

Le résultat doit être similaire à ce qui suit :

NAME STATUS SAGEMAKER-ENDPOINT-NAME host-xgboost Creating host-xgboost-def0e83e0d5f11eaaa450aSMLOGS

Valeurs de l'état d'HostingDeployment

Le champ d'état peut avoir l'une des valeurs suivantes :

  • SynchronizingK8sJobWithSageMaker : l'opérateur se prépare à créer le point de terminaison.

  • ReconcilingEndpoint : l'opérateur crée, met à jour ou supprime des ressources de point de terminaison. Si l'HostingDeployment reste dans cet état, utilisez kubectl describe pour connaître la raison dans le champ Additional.

  • OutOfService : le point de terminaison n'est pas disponible pour recevoir les demandes entrantes.

  • Creating :CreateEndpoint est en cours d'exécution.

  • Updating :UpdateEndpoint ou UpdateEndpointWeightsAndCapacities est en cours d'exécution.

  • SystemUpdating : le point de terminaison fait l'objet d'une maintenance et ne peut pas être mis à jour, supprimé ou remis à l'échelle tant qu'elle n'est pas terminée. Cette opération de maintenance ne modifie pas les valeurs spécifiées par le client telles que la configuration du VPC, le chiffrement KMS, le modèle, le type d'instance ou le nombre d'instances.

  • RollingBack : le point de terminaison ne parvient pas à effectuer une augmentation ou une réduction d'échelle, ni à modifier son poids de variante et est en cours de restauration de sa configuration précédente. Une fois la restauration terminée, le point de terminaison revient à un état InService. Cet état de transition s'applique uniquement à un point de terminaison dont la scalabilité automatique est activée et qui subit des modifications de poids ou de capacité de variante dans le cadre d'un appel UpdateEndpointWeightsAndCapacities ou lorsque l'opération UpdateEndpointWeightsAndCapacities est appelée explicitement.

  • InService : le point de terminaison est disponible pour traiter les demandes entrantes.

  • Deleting :DeleteEndpoint est en cours d'exécution.

  • Failed : le point de terminaison n'a pas pu être créé, mis à jour ou remis à l'échelle. Utilisez DescribeEndPoint:FailureReason pour obtenir des informations sur l'échec. DeleteEndpoint est la seule opération qui peut être effectuée sur un point de terminaison défaillant.

Description d'HostingDeployment

Vous pouvez obtenir des détails de débogage à l'aide de la commande describe kubectl.

kubectl describe hostingdeployment

Le résultat doit être similaire à ce qui suit :

Name: host-xgboost Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"HostingDeployment","metadata":{"annotations":{},"name":"host-xgboost","namespace":"def..." API Version: sagemaker.aws.amazon.com/v1 Kind: HostingDeployment Metadata: Creation Timestamp: 2019-11-22T19:40:00Z Finalizers: sagemaker-operator-finalizer Generation: 1 Resource Version: 4258134 Self Link: /apis/sagemaker.aws.amazon.com/v1/namespaces/default/hostingdeployments/host-xgboost UID: def0e83e-0d5f-11ea-aa45-0a3507uiduid Spec: Containers: Container Hostname: xgboost Image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest Model Data URL: s3://my-bucket/inference/xgboost-mnist/model.tar.gz Models: Containers: xgboost Execution Role Arn: arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole Name: xgboost-model Primary Container: xgboost Production Variants: Initial Instance Count: 1 Instance Type: ml.c5.large Model Name: xgboost-model Variant Name: all-traffic Region: us-east-2 Status: Creation Time: 2019-11-22T19:40:04Z Endpoint Arn: arn:aws:sagemaker:us-east-2:123456789012:endpoint/host-xgboost-def0e83e0d5f11eaaaexample Endpoint Config Name: host-xgboost-1-def0e83e0d5f11e-e08f6c510d5f11eaaa450aexample Endpoint Name: host-xgboost-def0e83e0d5f11eaaa450a350733ba06 Endpoint Status: Creating Endpoint URL: https://runtime.sagemaker.us-east-2.amazonaws.com/endpoints/host-xgboost-def0e83e0d5f11eaaaexample/invocations Last Check Time: 2019-11-22T19:43:57Z Last Modified Time: 2019-11-22T19:40:04Z Model Names: Name: xgboost-model Value: xgboost-model-1-def0e83e0d5f11-df5cc9fd0d5f11eaaa450aexample Events: <none>

Le champ de statut fournit plus d'informations à l'aide des champs suivants :

  • Additional : informations supplémentaires sur l'état du déploiement d'hébergement. Ce champ est facultatif et n'est renseigné qu'en cas d'erreur.

  • Creation Time : lorsque le point de terminaison a été créé dans SageMaker.

  • Endpoint ARN : ARN du point de terminaison SageMaker.

  • Endpoint Config Name : nom SageMaker de la configuration du point de terminaison.

  • Endpoint Name : nom SageMaker du point de terminaison.

  • Endpoint Status : état du point de terminaison.

  • Endpoint URL : URL HTTPS qui peut être utilisée pour accéder au point de terminaison. Pour plus d'informations, veuillez consulter Déploiement d'un modèle dans Amazon SageMaker.

  • FailureReason : si une commande de création, de mise à jour ou de suppression échoue, la cause est indiquée ici.

  • Last Check Time : dernière fois que l'opérateur a vérifié l'état du point de terminaison.

  • Last Modified Time : date et heure de la dernière modification du point de terminaison.

  • Model Names : paire clé-valeur de noms de modèles HostingDeployment aux noms de modèles SageMaker.

Appel du point de terminaison

Une fois que l'état du point de terminaison est InService, vous pouvez appeler le point de terminaison de deux manières : à l'aide de la CLI AWS, qui effectue l'authentification et la signature des demandes d'URL, ou à l'aide d'un client HTTP comme cURL. Si vous utilisez votre propre client, vous devez effectuer la signature et authentification d'URL AWS v4 par vous-même.

Pour appeler le point de terminaison à l'aide de la CLI AWS, exécutez la commande suivante. Assurez-vous de remplacer la région et le nom du point de terminaison par la région et le nom du point de terminaison SageMaker de votre point de terminaison. Ces informations peuvent être obtenues à partir du résultat de kubectl describe.

# Invoke the endpoint with mock input data. aws sagemaker-runtime invoke-endpoint \ --region us-east-2 \ --endpoint-name <endpoint name> \ --body $(seq 784 | xargs echo | sed 's/ /,/g') \ >(cat) \ --content-type text/csv > /dev/null

Par exemple, si votre région est us-east-2 et votre nom de configuration de point de terminaison est host-xgboost-f56b6b280d7511ea824b129926example, la commande suivante invoquerait le point de terminaison :

aws sagemaker-runtime invoke-endpoint \ --region us-east-2 \ --endpoint-name host-xgboost-f56b6b280d7511ea824b1299example \ --body $(seq 784 | xargs echo | sed 's/ /,/g') \ >(cat) \ --content-type text/csv > /dev/null 4.95847082138

Ici, 4.95847082138 est la prédiction du modèle pour les données simulées.

Mise à jour d'HostingDeployment

  1. Une fois qu'un HostingDeployment a l'état InService, il peut être mis à jour. Environ 10 minutes peuvent être nécessaires pour que l'HostingDeployment soit en service. Utilisez la commande suivante pour vérifier que l'état est InService :

    kubectl get hostingdeployments
  2. HostingDeployment peut être mis à jour avant que l'état ne soit InService. L'opérateur attend que le point de terminaison SageMaker soit InService avant d'appliquer la mise à jour.

    Pour appliquer une mise à jour, modifiez le fichier hosting.yaml. Par exemple, remplacez le champ initialInstanceCount de 1 à 2 comme suit :

    apiVersion: sagemaker.aws.amazon.com/v1 kind: HostingDeployment metadata: name: host-xgboost spec: region: us-east-2 productionVariants: - variantName: all-traffic modelName: xgboost-model initialInstanceCount: 2 instanceType: ml.c5.large models: - name: xgboost-model executionRoleArn: arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole primaryContainer: xgboost containers: - xgboost containers: - containerHostname: xgboost modelDataUrl: s3://my-bucket/inference/xgboost-mnist/model.tar.gz image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
  3. Enregistrez le fichier, puis utilisez kubectl pour appliquer votre mise à jour comme suit. Vous devez voir l'état passer de InService à ReconcilingEndpoint, puis à Updating.

    $ kubectl apply -f hosting.yaml hostingdeployment.sagemaker.aws.amazon.com/host-xgboost configured $ kubectl get hostingdeployments NAME STATUS SAGEMAKER-ENDPOINT-NAME host-xgboost ReconcilingEndpoint host-xgboost-def0e83e0d5f11eaaa450a350abcdef $ kubectl get hostingdeployments NAME STATUS SAGEMAKER-ENDPOINT-NAME host-xgboost Updating host-xgboost-def0e83e0d5f11eaaa450a3507abcdef

SageMaker déploie un nouvel ensemble d'instances avec vos modèles, bascule le trafic pour utiliser les nouvelles instances et draine les anciennes instances. Dès que ce processus commence, l'état devient Updating. Une fois la mise à jour terminée, votre point de terminaison devient InService. Ce processus prend environ 10 minutes.

Suppression de l'HostingDeployment

  1. Utiliser kubectl pour supprimer un HostingDeployment à l'aide de la commande suivante :

    kubectl delete hostingdeployments host-xgboost

    Le résultat doit être similaire à ce qui suit :

    hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
  2. Pour vérifier que le déploiement d'hébergement a été supprimé, utilisez la commande suivante :

    kubectl get hostingdeployments No resources found.

Les points de terminaison supprimés n'entraînent pas de frais pour les ressources SageMaker.