SageMaker Operators for Kubernetes - Amazon SageMaker

SageMaker Operators for Kubernetes

SageMaker Operators for Kubernetes facilite l'entraînement, le réglage et le déploiement des modèles de machine learning (ML) dans SageMaker pour les développeurs et les scientifiques des données utilisant Kubernetes. Vous pouvez installer ces opérateurs SageMaker sur votre cluster Kubernetes dans Amazon Elastic Kubernetes Service (Amazon EKS) pour créer des tâches SageMaker de manière native à l'aide de l'API Kubernetes et des outils Kubernetes en ligne de commande tels que kubectl. Ce guide vous montre comment configurer les opérateurs. Le guide explique également comment utiliser les opérateurs pour exécuter l'entraînement du modèle, le réglage des hyperparamètres et l'inférence (en temps réel et par lots).

Il n'y a pas frais supplémentaires liés à l'utilisation de ces opérateurs. Vous engagez des frais pour toutes les ressources SageMaker que vous utilisez par l'intermédiaire de ces opérateurs. Les présentes procédures et directives supposent que vous connaissez Kubernetes et ses commandes de base.

Qu'est-ce qu'un opérateur ?

Kubernetes repose sur ce qu'on appelle le modèle de contrôleur. Ce modèle permet aux applications et aux outils d'écouter un gestionnaire d'état central (ETCD) et d'agir quand quelque chose se produit. Exemples de ces applications : cloud-controller-manager et controller-manager. Le modèle de contrôleur vous permet de créer des expériences découplées sans avoir à vous soucier de la façon dont les autres composants sont intégrés. Pour ajouter de nouvelles fonctionnalités à Kubernetes, les développeurs peuvent étendre l'API Kubernetes en créant une ressource personnalisée qui contient leur logique et leurs composants spécifiques à l'application ou au domaine. Les opérateurs dans Kubernetes permettent aux utilisateurs d'appeler ces ressources personnalisées de manière native et d'automatiser les flux associés.

Prerequisites

Ce guide suppose que vous avez remplir les conditions préalables suivantes :

  • Vous devez avoir installé les outils suivants sur la machine client utilisée pour accéder à votre cluster Kubernetes :

    • kubectl version 1.13 ou ultérieure. Vous devez utiliser une version de kubectl différente au plus d'une version mineure par rapport à votre plan de contrôle de cluster Amazon EKS. Par exemple, un client kubectl 1.13 fonctionne avec des clusters Kubernetes 1.13 et 1.14. OpenID Connect (OIDC) n'est pas pris en charge dans les versions antérieures à 1.13.

    • eksctl version 0.7.0 ou ultérieure

    • AWS CLI version 1.16.232 ou ultérieure

    • (facultatif) Helm version 3.0 ou ultérieure

    • aws-iam-authenticator

  • Vous devez avoir l'autorisation de créer des rôles et d'attacher des politiques à des rôles.

  • Vous devez avoir créé un cluster Kubernetes sur lequel exécuter les opérateurs. Il doit s'agir de Kubernetes version 1.13 ou 1.14. Pour la création automatisée de cluster à l'aide de eksctl, veuillez consulter Mise en route avec eksctl. L'allocation d'un cluster prend de 20 à 30 minutes.

Présentation des autorisations

SageMaker Operators for Kubernetes vous permet de gérer les tâches dans SageMaker à partir de votre cluster Kubernetes. Les opérateurs accèdent aux ressources SageMaker en votre nom. Le rôle IAM que l'opérateur assume pour interagir avec des ressources AWS diffère des informations d'identification que vous utilisez pour accéder au cluster Kubernetes. Le rôle diffère également du rôle que SageMaker assume lors de l'exécution de vos tâches de machine learning. L'image suivante explique cette conception et ce flux.

Configuration IAM basée sur le rôle IAM et déploiement de l'opérateur

Les sections suivantes décrivent les étapes de configuration et de déploiement de l'opérateur.

Déploiement de la portée du cluster

Avant de pouvoir déployer votre opérateur à l'aide d'un rôle IAM, associez un fournisseur OpenID Connect (OIDC) à votre rôle pour vous authentifier auprès du service IAM.

Créer un fournisseur OpenID Connect (OIDC) pour votre cluster

Les instructions suivantes montrent comment créer et associer un fournisseur OIDC à votre cluster Amazon EKS.

  1. Définissez les variables d'environnement CLUSTER_NAME et AWS_REGION locales comme suit :

    # Set the Region and cluster export CLUSTER_NAME="<your cluster name>" export AWS_REGION="<your region>"
  2. Utilisez la commande suivante pour associer le fournisseur OIDC à votre cluster. Pour de plus amples informations, veuillez consulter Activation des rôles IAM pour les comptes de service sur votre cluster.

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${AWS_REGION} --approve

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

    [_] eksctl version 0.10.1 [_] using region us-east-1 [_] IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"

Maintenant que le cluster dispose d'un fournisseur d'identité OIDC, vous pouvez créer un rôle et accorder l'autorisation Kubernetes ServiceAccount pour assumer le rôle.

Obtenir l'ID OIDC

Pour configurer le compte ServiceAccount, procurez-vous l'URL du diffuseur OpenID Connect à l'aide de la commande suivante :

aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text

La commande renvoie un URL telle que la suivante :

https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

Dans cette URL, la valeur D48675832CA65BD10A532F597OIDCID est l'ID OIDC. L'ID OIDC de votre cluster est différent. Vous avez besoin de cette valeur d'ID OIDC pour créer un rôle.

Si votre sortie est None, cela signifie que votre version client est ancienne. Pour contourner ce problème, exécutez la commande suivante :

aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC

L'URL OIDC est renvoyée comme suit :

OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

Créer un rôle IAM

  1. Créez un fichier nommé trust.json et insérez le bloc de code de relation d'approbation suivant. Assurez-vous de remplacer tous les espaces réservés <OIDC ID>, <AWS account number> et <EKS Cluster region> par des valeurs correspondant à votre cluster.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com", "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default" } } } ] }
  2. Exécutez la commande suivante pour créer un rôle avec la relation d'approbation définie dans trust.json. Ce rôle permet au cluster Amazon EKS d'obtenir et d'actualiser les informations d'identification à partir d'IAM.

    aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text

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

    ROLE arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z / ABCDEFSFODNN7EXAMPLE my-role ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS sts.amazonaws.com system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default PRINCIPAL arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/

    Notez l'ROLE ARN que vous transmettez à votre opérateur.

Attacher la politique AmazonSageMakerFullAccess au rôle

Pour donner au rôle un accès à SageMaker, attachez la politique AmazonSageMakerFullAccess. Si vous souhaitez limiter les autorisations à l'opérateur, vous pouvez créer votre propre politique personnalisée et l'attacher.

Pour attacher AmazonSageMakerFullAccess, exécutez la commande suivante :

aws iam attach-role-policy --role-name <role name> --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess

Le compte Kubernetes ServiceAccount sagemaker-k8s-operator-default doit disposer des autorisations AmazonSageMakerFullAccess. Confirmez cette donnée lorsque vous installez l'opérateur.

Déploiement de l'opérateur

Lors du déploiement de votre opérateur, vous pouvez utiliser un fichier YAML ou les Charts de Helm.

Déployer l'opérateur avec YAML

Il s'agit du moyen le plus simple de déployer vos opérateurs. Procédez comme suit :

  1. Téléchargez le script du programme d'installation à l'aide de la commande suivante :

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/installer.yaml
  2. Modifiez le fichier installer.yaml pour remplacer eks.amazonaws.com/role-arn. Remplacez le présent ARN par l'Amazon Resource Name (ARN) du rôle basé sur OIDC que vous avez créé.

  3. Utilisez la commande suivante pour déployer le cluster :

    kubectl apply -f installer.yaml
Déployer l'opérateur à l'aide des Charts de Helm

Utilisez le Chart de Helm fourni pour installer l'opérateur.

  1. Clonez le répertoire du programme d'installation Helm à l'aide de la commande suivante :

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. Accédez au dossier amazon-sagemaker-operator-for-k8s/hack/charts/installer. Modifiez le fichier rolebased/values.yaml, qui inclut des paramètres de haut niveau pour le Chart. Remplacez le présent ARN du rôle par l'Amazon Resource Name (ARN) du rôle basé sur OIDC que vous avez créé.

  3. Installez le Chart de Helm à l'aide de la commande suivante :

    kubectl create namespace sagemaker-k8s-operator-system helm install --namespace sagemaker-k8s-operator-system sagemaker-operator rolebased/

    Si vous décidez d'installer l'opérateur dans un autre espace de noms que celui spécifié, vous devez ajuster l'espace de noms défini dans le fichier trust.json du rôle IAM pour qu'ils correspondent.

  4. Après un instant, le Chart est installé avec un nom généré de manière aléatoire. Exécutez les commandes suivantes pour vérifier que l'installation a bien été effectuée :

    helm ls

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

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION sagemaker-operator sagemaker-k8s-operator-system 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0

Vérification du déploiement de l'opérateur

  1. Vous devriez pouvoir afficher les définitions de ressources personnalisées SageMaker pour chaque opérateur déployé sur votre cluster en exécutant la commande suivante :

    kubectl get crd | grep sagemaker

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

    batchtransformjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z endpointconfigs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hostingdeployments.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z models.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z trainingjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z
  2. Assurez-vous que le pod de l'opérateur fonctionne correctement. Utilisez la commande suivante afin de répertorier tous les pods :

    kubectl -n sagemaker-k8s-operator-system get pods

    Vous devez voir un pod nommé sagemaker-k8s-operator-controller-manager-***** dans l'espace de noms sagemaker-k8s-operator-system comme suit :

    NAME READY STATUS RESTARTS AGE sagemaker-k8s-operator-controller-manager-12345678-r8abc 2/2 Running 0 23s

Déploiement limité aux espaces de noms

Vous avez la possibilité d'installer votre opérateur dans la portée d'un espace de noms Kubernetes individuel. Dans ce mode, le contrôleur contrôle et rapproche les ressources avec SageMaker uniquement si les ressources sont créées dans cet espace de noms. Cela permet de contrôler plus finement quel contrôleur gère quelles ressources. Ceci est utile pour le déploiement sur plusieurs comptes AWS ou le contrôle des utilisateurs qui ont accès à des tâches particulières.

Ce guide explique comment installer un opérateur dans un espace de noms prédéfini particulier. Pour déployer un contrôleur dans un deuxième espace de noms, suivez le guide du début à la fin et modifiez l'espace de noms à chaque étape.

Créer un fournisseur OpenID Connect (OIDC) pour votre cluster Amazon EKS

Les instructions suivantes montrent comment créer et associer un fournisseur OIDC à votre cluster Amazon EKS.

  1. Définissez les variables d'environnement CLUSTER_NAME et AWS_REGION locales comme suit :

    # Set the region and cluster export CLUSTER_NAME="<your cluster name>" export AWS_REGION="<your region>"
  2. Utilisez la commande suivante pour associer le fournisseur OIDC à votre cluster. Pour de plus amples informations, veuillez consulter Activation des rôles IAM pour les comptes de service sur votre cluster.

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${AWS_REGION} --approve

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

    [_] eksctl version 0.10.1 [_] using region us-east-1 [_] IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"

Maintenant que le cluster dispose d'un fournisseur d'identité OIDC, créez un rôle et accordez l'autorisation Kubernetes ServiceAccount pour assumer le rôle.

Obtenir votre ID OIDC

Pour configurer le compte ServiceAccount, procurez-vous d'abord l'URL du diffuseur OpenID Connect à l'aide de la commande suivante :

aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text

La commande renvoie une URL telle que la suivante :

https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

Dans cette URL, la valeur D48675832CA65BD10A532F597OIDCID est l'ID OIDC. L'ID OIDC de votre cluster sera différent. Vous avez besoin de cette valeur d'ID OIDC pour créer un rôle.

Si votre sortie est None, cela signifie que votre version client est ancienne. Pour contourner ce problème, exécutez la commande suivante :

aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC

L'URL OIDC est renvoyée comme suit :

OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

Créez votre rôle IAM

  1. Créez un fichier nommé trust.json et insérez le bloc de code de relation d'approbation suivant. Assurez-vous de remplacer tous les espaces réservés <OIDC ID>, <AWS account number>, <EKS Cluster region> et <Namespace> par des valeurs correspondant à votre cluster. Aux fins du présent guide, my-namespace est utilisé pour la valeur <Namespace>.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com", "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default" } } } ] }
  2. Exécutez la commande suivante pour créer un rôle avec la relation d'approbation définie dans trust.json. Ce rôle permet au cluster Amazon EKS d'obtenir et d'actualiser les informations d'identification à partir d'IAM.

    aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text

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

    ROLE arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z / ABCDEFSFODNN7EXAMPLE my-role ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS sts.amazonaws.com system:serviceaccount:my-namespace:sagemaker-k8s-operator-default PRINCIPAL arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/

Notez l' ROLE ARN. Vous transmettez à votre opérateur.

Attacher la politique AmazonSageMakerFullAccess à votre rôle

Pour donner au rôle un accès à SageMaker, attachez la politique AmazonSageMakerFullAccess. Si vous souhaitez limiter les autorisations à l'opérateur, vous pouvez créer votre propre politique personnalisée et l'attacher.

Pour attacher AmazonSageMakerFullAccess, exécutez la commande suivante :

aws iam attach-role-policy --role-name <role name> --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess

Le compte Kubernetes ServiceAccount sagemaker-k8s-operator-default doit disposer des autorisations AmazonSageMakerFullAccess. Confirmez cette donnée lorsque vous installez l'opérateur.

Déployer l'opérateur dans votre espace de noms

Lors du déploiement de votre opérateur, vous pouvez utiliser un fichier YAML ou les Charts de Helm.

Déployer l'opérateur dans votre espace de noms à l'aide de YAML

Il existe deux parties pour le déploiement d'un opérateur dans la portée d'un espace de noms. La première est l'ensemble des CRD installés au niveau du cluster. Ces définitions de ressources ne doivent être installées qu'une seule fois par cluster Kubernetes. La deuxième partie concerne les autorisations de l'opérateur et le déploiement lui-même.

Si vous n'avez pas déjà installé les CRD dans le cluster, appliquez le programme d'installation CRD YAML à l'aide de la commande suivante :

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml

Pour installer l'opérateur sur le cluster :

  1. Téléchargez le programme d'installation de l'opérateur YAML à l'aide de la commande suivante :

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/operator.yaml
  2. Mettez à jour le programme d'installation YAML pour placer les ressources dans votre espace de noms spécifié à l'aide de la commande suivante :

    sed -i -e 's/PLACEHOLDER-NAMESPACE/<YOUR NAMESPACE>/g' operator.yaml
  3. Modifiez le fichier operator.yaml pour placer des ressources dans votre eks.amazonaws.com/role-arn. Remplacez le présent ARN par l'Amazon Resource Name (ARN) du rôle basé sur OIDC que vous avez créé.

  4. Utilisez la commande suivante pour déployer le cluster :

    kubectl apply -f operator.yaml
Déployer l'opérateur dans votre espace de noms à l'aide des Charts de Helm

Deux parties sont requises pour le déploiement d'un opérateur dans la portée d'un espace de noms. La première est l'ensemble des CRD installés au niveau du cluster. Ces définitions de ressources ne doivent être installées qu'une seule fois par cluster Kubernetes. La deuxième partie concerne les autorisations de l'opérateur et le déploiement lui-même. Lorsque vous utilisez les Charts de Helm, vous devez d'abord créer l'espace de noms à l'aide de kubectl.

  1. Clonez le répertoire du programme d'installation Helm à l'aide de la commande suivante :

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. Accédez au dossier amazon-sagemaker-operator-for-k8s/hack/charts/installer/namespaced. Modifiez le fichier rolebased/values.yaml, qui inclut des paramètres de haut niveau pour le Chart. Remplacez le présent ARN du rôle par l'Amazon Resource Name (ARN) du rôle basé sur OIDC que vous avez créé.

  3. Installez le Chart de Helm à l'aide de la commande suivante :

    helm install crds crd_chart/
  4. Créez l'espace de noms requis et installez l'opérateur à l'aide de la commande suivante :

    kubectl create namespace <namespace> helm install --n <namespace> op operator_chart/
  5. Après un instant, le graphique est installé avec le nom sagemaker-operator. Exécutez les commandes suivantes pour vérifier que l'installation a bien été effectuée :

    helm ls

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

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION sagemaker-operator my-namespace 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0

Vérifier le déploiement de l'opérateur dans votre espace de noms

  1. Vous devriez pouvoir afficher les définitions de ressources personnalisées SageMaker pour chaque opérateur déployé sur votre cluster en exécutant la commande suivante :

    kubectl get crd | grep sagemaker

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

    batchtransformjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z endpointconfigs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hostingdeployments.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z models.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z trainingjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z
  2. Assurez-vous que le pod de l'opérateur fonctionne correctement. Utilisez la commande suivante afin de répertorier tous les pods :

    kubectl -n my-namespace get pods

    Vous devez voir un pod nommé sagemaker-k8s-operator-controller-manager-***** dans l'espace de noms my-namespace comme suit :

    NAME READY STATUS RESTARTS AGE sagemaker-k8s-operator-controller-manager-12345678-r8abc 2/2 Running 0 23s

Installer le plug-in kubectl des journaux SageMaker

Dans le cadre de SageMaker Operators for Kubernetes, vous pouvez utiliser le plug-in smlogs pour kubectl. Cela permet de diffuser en continu les journaux CloudWatch Logs SageMaker avec kubectl. kubectl doit être installé sur votre CHEMIN. Les commandes suivantes placent le binaire dans le répertoire sagemaker-k8s-bin de votre répertoire de base et ajoutent ce répertoire à votre PATH.

export os="linux" wget https://amazon-sagemaker-operator-for-k8s-us-east-1.s3.amazonaws.com/kubectl-smlogs-plugin/v1/${os}.amd64.tar.gz tar xvzf ${os}.amd64.tar.gz # Move binaries to a directory in your homedir. mkdir ~/sagemaker-k8s-bin cp ./kubectl-smlogs.${os}.amd64/kubectl-smlogs ~/sagemaker-k8s-bin/. # This line adds the binaries to your PATH in your .bashrc. echo 'export PATH=$PATH:~/sagemaker-k8s-bin' >> ~/.bashrc # Source your .bashrc to update environment variables: source ~/.bashrc

Utilisez la commande suivante pour vérifier que le plug-in kubectl est correctement installé :

kubectl smlogs

Si le plug-in kubectl est installé correctement, votre sortie doit ressembler à ce qui suit :

View SageMaker logs via Kubernetes Usage: smlogs [command] Aliases: smlogs, SMLogs, Smlogs Available Commands: BatchTransformJob View BatchTransformJob logs via Kubernetes TrainingJob View TrainingJob logs via Kubernetes help Help about any command Flags: -h, --help help for smlogs Use "smlogs [command] --help" for more information about a command.

Supprimer les opérateurs

Supprimer les opérateurs basés sur les clusters

Opérateurs installés à l'aide de YAML

Pour désinstaller l'opérateur de votre cluster, assurez-vous que toutes les ressources SageMaker ont été supprimées du cluster. Si vous ne le faites pas, l'opération de suppression de l'opérateur se bloque. Une fois que vous avez supprimé toutes les tâches SageMaker, utilisez kubectl pour supprimer l'opérateur du cluster. Exécutez les commandes suivantes pour arrêter toutes les tâches et supprimer l'opérateur du cluster :

# Delete all SageMaker jobs from Kubernetes kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com # Delete the operator and its resources kubectl delete -f /installer.yaml

Vous devriez voir une sortie semblable à la suivante :

$ kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com trainingjobs.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted $ kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted $ kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted $ kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted $ kubectl delete -f raw-yaml/installer.yaml namespace "sagemaker-k8s-operator-system" deleted customresourcedefinition.apiextensions.k8s.io "batchtransformjobs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "endpointconfigs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "hostingdeployments.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "hyperparametertuningjobs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "models.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "trainingjobs.sagemaker.aws.amazon.com" deleted role.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-role" deleted clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-role" deleted clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-role" deleted rolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-rolebinding" deleted clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-rolebinding" deleted clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-rolebinding" deleted service "sagemaker-k8s-operator-controller-manager-metrics-service" deleted deployment.apps "sagemaker-k8s-operator-controller-manager" deleted secrets "sagemaker-k8s-operator-abcde" deleted

Opérateurs installés à l'aide des Charts de Helm

Pour supprimer les CRD de l'opérateur, supprimez tout d'abord toutes les tâches en cours d'exécution. Supprimez ensuite le Chart de Helm utilisé pour déployer les opérateurs à l'aide des commandes suivantes :

# get the helm charts $ helm ls # delete the charts $ helm delete <chart name>

Supprimer les opérateurs basés sur des espaces de noms

Opérateurs installés avec YAML

Pour désinstaller l'opérateur de votre cluster, assurez-vous que toutes les ressources SageMaker ont été supprimées du cluster. Si vous ne le faites pas, l'opération de suppression de l'opérateur se bloque. Une fois que vous avez supprimé toutes les tâches SageMaker, utilisez kubectl pour supprimer d'abord l'opérateur de l'espace de noms, puis les CRD du cluster. Exécutez les commandes suivantes pour arrêter toutes les tâches et supprimer l'opérateur du cluster :

# Delete all SageMaker jobs from Kubernetes kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com
# Delete the operator using the same yaml file that was used to install the operator kubectl delete -f operator.yaml # Now delete the CRDs using the CRD installer yaml kubectl delete -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml # Now you can delete the namespace if you want kubectl delete namespace <namespace>

Opérateurs installés avec des Charts de Helm

Pour supprimer les CRD de l'opérateur, supprimez tout d'abord toutes les tâches en cours d'exécution. Supprimez ensuite le Chart de Helm utilisé pour déployer les opérateurs à l'aide des commandes suivantes :

# Delete the operator $ helm delete -n <namespace> op # delete the crds $ helm delete crds # optionally delete the namespace $ kubectl delete namespace <namespace>

Troubleshooting

Débogage d'une tâche ayant échoué

  • Vous pouvez vérifier le statut de la tâche en exécutant la commande suivante :

    kubectl get <CRD Type> <job name>
  • Si la tâche a été créée dans SageMaker, vous pouvez utiliser la commande suivante pour afficher leSTATUS et le SageMaker Job Name :

    kubectl get <crd type> <job name>
  • Vous pouvez utiliser smlogs pour trouver la cause du problème à l'aide de la commande suivante :

    kubectl smlogs <crd type> <job name>
  • Vous pouvez également utiliser la commande describe pour obtenir plus de détails sur la tâche à l'aide de la commande suivante. Le résultat a un champ additional qui contient plus d'informations sur le statut de la tâche.

    kubectl describe <crd type> <job name>
  • Si la tâche n'a pas été créée dans SageMaker, utilisez les journaux du pod de l'opérateur pour trouver la cause du problème comme suit :

    $ kubectl get pods -A | grep sagemaker # Output: sagemaker-k8s-operator-system sagemaker-k8s-operator-controller-manager-5cd7df4d74-wh22z 2/2 Running 0 3h33m $ kubectl logs -p <pod name> -c manager -n sagemaker-k8s-operator-system

Suppression d'un CRD de l'opérateur

Si la suppression d'une tâche ne fonctionne pas, vérifiez si l'opérateur est en cours d'exécution. Si l'opérateur n'est pas en cours d'exécution, vous devez supprimer le finalisateur en procédant comme suit :

  1. Dans un nouveau terminal, ouvrez la tâche dans un éditeur en utilisant kubectl edit comme suit :

    $ kubectl edit <crd type> <job name>
  2. Modifiez la tâche pour supprimer le finalisateur en supprimant les deux lignes suivantes du fichier. Enregistrez le fichier et la tâche est supprimée.

    finalizers: - sagemaker-operator-finalizer

Images et SMLogs dans chaque région

Le tableau suivant répertorie les images d'opérateur et les SMLogs disponibles dans chaque région.

Région Image du contrôleur Linux SMLogs
us-east-1 957583890962.dkr.ecr.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
us-east-2 922499468684.dkr.ecr.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
us-west-2 640106867763.dkr.ecr.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
eu-west-1 613661167059.dkr.ecr.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz