Créer des actions sur les règles à l'aide d'Amazon CloudWatch et de AWS Lambda - Amazon SageMaker

Créer des actions sur les règles à l'aide d'Amazon CloudWatch et de AWS Lambda

Amazon CloudWatch collecte les journaux des tâches d'entraînement du modèle Amazon SageMaker et les journaux des tâches de traitement des règles Amazon SageMaker Debugger. Configurez Debugger avec Amazon CloudWatch Events et AWS Lambda pour effectuer une action en fonction du statut d'évaluation de la règle Debugger.

CloudWatch Logs pour les règles Debugger et les tâches d'entraînement

Pour rechercher les journaux de tâches d'entraînement et les journaux de tâches de règles Debugger
  1. Ouvrez la console CloudWatch à l'adresse https://console.aws.amazon.com/ CloudWatch/.

  2. Dans le panneau de navigation de gauche, sous le nœud Log (Journal), choisissez Log Groupes (Groups de journaux).

  3. Dans la liste des groupes de journaux, procédez comme suit :

    • Choisissez /aws/sagemaker/TrainingJobs pour les journaux de tâches d'entraînement.

    • Choisissez /aws/Sagemaker/ProcessingJobs pour les journaux de tâches de règles Debugger.

Vous pouvez utiliser le statut de la tâche d'entraînement et de règle Debugger dans les journaux CloudWatch Logs pour effectuer d'autres actions en cas de problèmes d'entraînement.

Pour plus d'informations sur la surveillance des tâches d'entraînement à l'aide de CloudWatch, consultez Surveillance d'Amazon SageMaker.

Configurer Debugger pour automatiser l'arrêt des tâches d'entraînement à l'aide de CloudWatch et de Lambda

Les règles Debugger contrôlent le statut des tâches d'entraînement, et une règle CloudWatch Events contrôle le statut d'évaluation de la tâche d'entraînement de règle Debugger.

Étape 1 : Créer une fonction Lambda

Pour créer une fonction Lambda
  1. Ouvrez la console AWS Lambda à l'adresse https://console.aws.amazon.com/lambda/.

  2. Dans le panneau de navigation, choisissez Functions (Fonctions), puis Create function (Créer une fonction).

  3. Sur la page Create function (Créer une fonction), choisissez l'option Author from scratch (Créer à partir de zéro).

  4. Dans la section Basic information (Informations de base), saisissez un Function name (Nom de fonction) (par exemple,debugger-rule-stop-training-job).

  5. Pour Runtime, sélectionnez Python 3.7.

  6. Pour Permissions (Autorisations), développez la liste d'options déroulante et choisissez Change default execution role (Modifier le rôle d'exécution par défaut).

  7. Pour Execution role (Rôle d'exécution), choisissez Use an existing role (Utiliser un rôle existant) et choisissez le rôle IAM que vous utilisez pour les tâches d'entraînement sur SageMaker.

    Note

    Assurez-vous d'utiliser le rôle d'exécution avec AmazonSageMakerFullAccess et AWSLambdaBasicExecutionRole attachées. Sinon, la fonction Lambda ne réagira pas correctement aux changements de statut de la règle Debugger de la tâche d'entraînement. Si vous ne savez pas quel rôle d'exécution est utilisé, exécutez le code suivant dans une cellule de bloc-notes Jupyter pour récupérer la sortie du rôle d'exécution :

    import sagemaker sagemaker.get_execution_role()
  8. Dans le bas de la page, choisissez Create function.

La figure suivante illustre un exemple de page Create function (Créer une fonction) avec les champs de saisie et les sélections remplis.


                        Page Create function (Créer une fonction).

Etape 2 : Configurer la fonction Lambda

Pour configurer la fonction Lambda
  1. Dans la section Function code (Code de fonction) de la page de configuration, collez le script Python suivant dans le volet de l'éditeur de code Lambda. La fonction lambda_handler contrôle le statut d'évaluation de la règle Debugger collecté par CloudWatch et déclenche l'opération d'API StopTrainingJob. Le client AWS SDK for Python (Boto3) pour SageMaker fournit une méthode de haut niveau, stop_training_job, ce qui déclenche l'opération d'API StopTrainingJob.

    import json import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): training_job_name = event.get("detail").get("TrainingJobName") logging.info(f'Evaluating Debugger rules for training job: {training_job_name}') eval_statuses = event.get("detail").get("DebugRuleEvaluationStatuses", None) if eval_statuses is None or len(eval_statuses) == 0: logging.info("Couldn't find any debug rule statuses, skipping...") return { 'statusCode': 200, 'body': json.dumps('Nothing to do') } # should only attempt stopping jobs with InProgress status training_job_status = event.get("detail").get("TrainingJobStatus", None) if training_job_status != 'InProgress': logging.debug(f"Current Training job status({training_job_status}) is not 'InProgress'. Exiting") return { 'statusCode': 200, 'body': json.dumps('Nothing to do') } client = boto3.client('sagemaker') for status in eval_statuses: logging.info(status.get("RuleEvaluationStatus") + ', RuleEvaluationStatus=' + str(status)) if status.get("RuleEvaluationStatus") == "IssuesFound": secondary_status = event.get("detail").get("SecondaryStatus", None) logging.info( f'About to stop training job, since evaluation of rule configuration {status.get("RuleConfigurationName")} resulted in "IssuesFound". ' + f'\ntraining job "{training_job_name}" status is "{training_job_status}", secondary status is "{secondary_status}"' + f'\nAttempting to stop training job "{training_job_name}"' ) ) try: client.stop_training_job( TrainingJobName=training_job_name ) except Exception as e: logging.error( "Encountered error while trying to " "stop training job {}: {}".format( training_job_name, str(e) ) ) raise e return None

    Pour plus d'informations sur l'interface de l'éditeur de code Lambda, consultez Créer des fonctions à l'aide de l'éditeur de console AWS Lambda.

  2. Ignorez tous les autres paramètres et choisissez Save (Enregistrer) en haut de la page de configuration.

Étape 3 : Créer une règle CloudWatch Events et la lier à la fonction Lambda pour Debugger

Pour créer une règle CloudWatch Events et la lier à la fonction Lambda pour Debugger
  1. Ouvrez la console CloudWatch à l'adresse https://console.aws.amazon.com/ CloudWatch/.

  2. Dans le panneau de navigation de gauche, choisissez Rules (Règles) sous le nœud Events (Événements).

  3. Choisissez Create rule.

  4. Dans la section Event source (Source de l'événement) de la page Step 1: Create rule (Étape 1 : Créer une règle), choisissez SageMaker pour Service Name (Nom du service), puis choisissez SageMaker Training Job State Change (Modification du statut de la tâche d'entraînement SageMaker pour Event Type (Type d'événement). La prévisualisation du modèle d'événement doit ressembler à l'exemple de chaînes JSON suivant :

    { "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
  5. Dans Targets (Cibles), choisissez Add target* (Ajouter une cible*), puis choisissez l'option Lambda debugger-rule-stop-training-job que vous avez créée. Cette étape lie la règle CloudWatch Events à la fonction Lambda.

  6. Choisissez Configure details (Configurer les détails) et accédez à la page Step 2: Configure rule details (Étape 2 : Configurer les détails de la règle).

  7. Spécifiez le nom de la définition de règle CloudWatch. Par exemple, debugger-cw-event-rule.

  8. Choisissez Create rule (Créer la règle) pour terminer.

  9. Revenez dans la page de configuration de la fonction Lambda et actualisez la page. Vérifiez qu'elle est correctement configurée dans le panneau Designer (Concepteur). La règle CloudWatch Events doit être enregistrée comme déclencheur pour la fonction Lambda. La conception de configuration doit ressembler à l'exemple suivant :

    
                                Panneau Designer pour la configuration CloudWatch.

Exécuter des exemples de blocs-notes pour tester l'arrêt automatique des tâches d'entraînement

Vous pouvez exécuter les exemples de blocs-notes suivants, conçus pour tester l'arrêt d'une tâche d'entraînement à l'aide des règles intégrées de Debugger.

Désactiver la règle CloudWatch Events pour arrêter l'utilisation de l'arrêt automatique des tâches d'entraînement

Si vous souhaitez désactiver l'arrêt automatique des tâches d'entraînement, vous devez désactiver la règle CloudWatch Events. Dans le panneau Designer (Concepteur) de Lambda, choisissez le bloc EventBridge (CloudWatch Events) lié à la fonction Lambda. Un panneau EventBridge s'affiche sous le panneau Designer (Concepteur) (par exemple, consultez la capture d'écran précédente). Cochez la case située à côté de EventBridge (CloudWatch Events): debugger-cw-event-rule, puis choisissez Disable (Désactiver). Si vous souhaitez utiliser la fonctionnalité d'arrêt automatisé ultérieurement, vous pourrez réactiver la règle CloudWatch Events.