Opérateur TrainingJob - Amazon SageMaker

Opérateur TrainingJob

Les opérateurs de tâches d'entraînement rapprochent votre spécification de tâche d'entraînement spécifiée avec SageMaker en la lançant pour vous dans SageMaker. Pour en savoir plus sur les tâches d'entraînement SageMaker, veuillez consulter la Documentation relative à l'API CreateTrainingJob.

Création de TrainingJob à l'aide d'un fichier YAML

  1. Téléchargez l'exemple de fichier YAML pour l'entraînement à l'aide de la commande suivante :

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-trainingjob.yaml
  2. Modifiez le fichier xgboost-mnist-trainingjob.yaml pour remplacer le paramètre roleArn par votre <sagemaker-execution-role> et outputPath par votre compartiment Amazon S3 auquel le rôle d'exécution SageMaker a un accès en écriture. L'roleArn doit disposer d'autorisations pour que SageMaker puisse accéder à Amazon S3, Amazon CloudWatch et à d'autres services en votre nom. Pour plus d'informations sur la création d'un SageMaker ExecutionRole, veuillez consulter Rôles SageMaker. Appliquez le fichier YAML à l'aide de la commande suivante :

    kubectl apply -f xgboost-mnist-trainingjob.yaml

Création de TrainingJob à l'aide d'un Chart de Helm

Vous pouvez utiliser les Charts de Helm pour exécuter des TrainingJobs.

  1. Clonez le référentiel GitHub pour obtenir la source à 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/training-jobs/ et modifiez le fichier values.yaml pour remplacer des valeurs comme rolearn et outputpath par des valeurs qui correspondent à votre compte. L'ARN de rôle doit disposer d'autorisations pour que SageMaker puisse accéder à Amazon S3, Amazon CloudWatch et à d'autres services en votre nom. Pour plus d'informations sur la création d'un SageMaker ExecutionRole, veuillez consulter Rôles SageMaker.

Création de TrainingJob

Lorsque les rôles et les compartiments Amazon S3 ont été remplacés par des valeurs appropriées dans values.yaml, vous pouvez créer une tâche d'entraînement à l'aide de la commande suivante :

helm install . --generate-name

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

NAME: chart-12345678 LAST DEPLOYED: Wed Nov 20 23:35:49 2019 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thanks for installing the sagemaker-k8s-trainingjob.

Vérifier votre Chart de Helm d'entraînement

Pour vérifier que le Chart de Helm a bien été créé, exécutez :

helm ls

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

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION chart-12345678 default 1 2019-11-20 23:35:49.9136092 +0000 UTC deployed sagemaker-k8s-trainingjob-0.1.0 rolebased-12345678 default 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0

helm install crée une ressource Kubernetes TrainingJob. L'opérateur lance la tâche d'entraînement à proprement dit dans SageMaker et met à jour la ressource Kubernetes TrainingJob pour refléter l'état de la tâche dans SageMaker. Vous engagez des frais pour les ressources SageMaker utilisées pendant la durée de votre tâche. Vous ne payez pas de frais une fois votre tâche terminée ou arrêtée.

Remarque : SageMaker ne vous permet pas de mettre à jour une tâche d'entraînement en cours d'exécution. Vous ne pouvez pas modifier un paramètre et réappliquer le fichier/la config. Modifiez le nom des métadonnées ou supprimez la tâche existante et créez-en une autre. À l'instar des opérateurs de tâche d'entraînement existants tels que TFJob dans Kubeflow, update n'est pas pris en charge.

Répertorier les TrainingJobs

Utilisez la commande suivante pour répertorier toutes les tâches créées à l'aide de l'opérateur Kubernetes :

kubectl get TrainingJob

Le résultat pour toutes les tâches répertoriées doit ressembler à ce qui suit :

kubectl get trainingjobs NAME STATUS SECONDARY-STATUS CREATION-TIME SAGEMAKER-JOB-NAME xgboost-mnist-from-for-s3 InProgress Starting 2019-11-20T23:42:35Z xgboost-mnist-from-for-s3-examplef11eab94e0ed4671d5a8f

Une tâche d'entraînement reste répertoriée après son achèvement ou son échec. Vous pouvez supprimer une tâche TrainingJob de la liste en suivant la procédure Supprimer une tâche d'entraînement. Les tâches achevées ou arrêtées n'entraînent pas de frais pour les ressources SageMaker.

Valeurs du statut de TrainingJob

Le champ STATUS peut comporter l'une des valeurs suivantes :

  • Completed

  • InProgress

  • Failed

  • Stopped

  • Stopping

Ces statuts proviennent directement de la documentation sur les API officielle de SageMaker.

En plus du statut officiel de SageMaker, il est possible que le STATUS soit SynchronizingK8sJobWithSageMaker. Cela signifie que l'opérateur n'a pas encore traité la tâche.

Valeurs du statut secondaire

Les statuts secondaires proviennent directement de la documentation sur les API officielle de SageMaker. Ils contiennent des informations plus détaillées sur le statut de la tâche.

Description de TrainingJob

Vous pouvez obtenir plus d'informations sur la tâche d'entraînement en utilisant la commande describe kubectl. Elle est généralement utilisée pour déboguer un problème ou vérifier les paramètres d'une tâche d'entraînement. Pour obtenir des informations sur votre tâche d'entraînement, utilisez la commande suivante :

kubectl describe trainingjob xgboost-mnist-from-for-s3

Le résultat de votre tâche d'entraînement doit ressembler à ce qui suit :

Name: xgboost-mnist-from-for-s3 Namespace: default Labels: <none> Annotations: <none> API Version: sagemaker.aws.amazon.com/v1 Kind: TrainingJob Metadata: Creation Timestamp: 2019-11-20T23:42:35Z Finalizers: sagemaker-operator-finalizer Generation: 2 Resource Version: 23119 Self Link: /apis/sagemaker.aws.amazon.com/v1/namespaces/default/trainingjobs/xgboost-mnist-from-for-s3 UID: 6d7uiui-0bef-11ea-b94e-0ed467example Spec: Algorithm Specification: Training Image: 8256416981234.dkr.ecr.us-east-2.amazonaws.com/xgboost:1 Training Input Mode: File Hyper Parameters: Name: eta Value: 0.2 Name: gamma Value: 4 Name: max_depth Value: 5 Name: min_child_weight Value: 6 Name: num_class Value: 10 Name: num_round Value: 10 Name: objective Value: multi:softmax Name: silent Value: 0 Input Data Config: Channel Name: train Compression Type: None Content Type: text/csv Data Source: S 3 Data Source: S 3 Data Distribution Type: FullyReplicated S 3 Data Type: S3Prefix S 3 Uri: https://s3-us-east-2.amazonaws.com/my-bucket/sagemaker/xgboost-mnist/train/ Channel Name: validation Compression Type: None Content Type: text/csv Data Source: S 3 Data Source: S 3 Data Distribution Type: FullyReplicated S 3 Data Type: S3Prefix S 3 Uri: https://s3-us-east-2.amazonaws.com/my-bucket/sagemaker/xgboost-mnist/validation/ Output Data Config: S 3 Output Path: s3://my-bucket/sagemaker/xgboost-mnist/xgboost/ Region: us-east-2 Resource Config: Instance Count: 1 Instance Type: ml.m4.xlarge Volume Size In GB: 5 Role Arn: arn:aws:iam::12345678910:role/service-role/AmazonSageMaker-ExecutionRole Stopping Condition: Max Runtime In Seconds: 86400 Training Job Name: xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0example Status: Cloud Watch Log URL: https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logStream:group=/aws/sagemaker/TrainingJobs;prefix=<example>;streamFilter=typeLogStreamPrefix Last Check Time: 2019-11-20T23:44:29Z Sage Maker Training Job Name: xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94eexample Secondary Status: Downloading Training Job Status: InProgress Events: <none>

Affichage des journaux à partir de TrainingJobs

Utilisez la commande suivante pour consulter les journaux depuis la tâche d'entraînement kmeans-mnist :

kubectl smlogs trainingjob xgboost-mnist-from-for-s3

Votre sortie doit ressembler à ce qui suit : Les journaux des instances sont classés par ordre chronologique.

"xgboost-mnist-from-for-s3" has SageMaker TrainingJobName "xgboost-mnist-from-for-s3-123456789" in region "us-east-2", status "InProgress" and secondary status "Starting" xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC Arguments: train xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] Running standalone xgboost training. xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] File size need to be processed in the node: 1122.95mb. Available memory size in the node: 8586.0mb xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] Determined delimiter of CSV input is ',' xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [23:45:22] S3DistributionType set as FullyReplicated

Suppression de TrainingJobs

Utilisez la commande suivante pour arrêter une tâche d'entraînement sur Amazon SageMaker :

kubectl delete trainingjob xgboost-mnist-from-for-s3

Cette commande supprime la tâche d'entraînement SageMaker de Kubernetes. Cette commande renvoie le résultat suivant :

trainingjob.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted

Si la tâche est toujours en cours sur SageMaker, elle s'arrête. Vous ne payez pas de frais pour vos ressources SageMaker une fois votre tâche terminée ou arrêtée.

Remarque : SageMaker ne supprime pas les tâches d'entraînement. Les tâches arrêtées continuent de s'afficher sur la console SageMaker. La commande delete prend environ 2 minutes pour nettoyer les ressources de SageMaker.