

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configure Debugger para la finalización automática de tareas de formación mediante CloudWatch Lambda
<a name="debugger-stop-training"></a>

Las reglas del Depurador controlan el estado de las tareas de formación, y la regla de CloudWatch Eventos supervisa el estado de evaluación de las tareas de formación con la regla del Depurador. En las siguientes secciones se describe el proceso necesario para automatizar la finalización de un trabajo de formación mediante CloudWatch Lambda.

**Topics**
+ [Paso 1: Crear una función de Lambda](#debugger-lambda-function-create)
+ [Paso 2: configurar la función de Lambda](#debugger-lambda-function-configure)
+ [Paso 3: Crear una regla de CloudWatch eventos y vincularla a la función Lambda para Debugger](#debugger-cloudwatch-events)

## Paso 1: Crear una función de Lambda
<a name="debugger-lambda-function-create"></a>

**Cómo crear una función de Lambda**

1. Abra la AWS Lambda consola en. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. En el panel de navegación de la izquierda, seleccione **Funciones** y **Crear una función**.

1. En la página **Crear una función**, seleccione la opción **Crear desde cero**.

1. En la sección **Información básica**, introduzca un **nombre de función** (por ejemplo, **debugger-rule-stop-training-job**).

1. En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.

1. En **Permisos**, expanda la opción desplegable y seleccione **Cambiar el rol de ejecución predeterminado**.

1. En **Función de ejecución**, selecciona **Usar una función existente** y elige la función de IAM que utilizarás para formar trabajos sobre SageMaker IA.
**nota**  
Debe utilizar el rol de ejecución con `AmazonSageMakerFullAccess` y `AWSLambdaBasicExecutionRole` asociados. De lo contrario, la función de Lambda no reaccionará correctamente a los cambios del estado de la regla del depurador en el trabajo de entrenamiento. Si no está seguro de qué función de ejecución se está utilizando, ejecute el siguiente código en un cuaderno de Jupyter para recuperar el resultado del rol de ejecución:  

   ```
   import sagemaker
   sagemaker.get_execution_role()
   ```

1. En la parte inferior de la página, elija **Create function**.

En la siguiente imagen se ve un ejemplo de la página **Crear una función**, con los campos de entrada y las selecciones completadas.

![\[Página Crear una función.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/debugger/debugger-lambda-create.png)


## Paso 2: configurar la función de Lambda
<a name="debugger-lambda-function-configure"></a>

**Para configurar la función de Lambda**

1. En la sección **Código de la función** de la página de configuración, pegue el siguiente script de Python en el panel del editor de código Lambda. La `lambda_handler` función monitorea el estado de evaluación de las reglas del depurador recopilado por la `StopTrainingJob` API CloudWatch y activa la operación. La AWS SDK para Python (Boto3) `client` opción para SageMaker IA proporciona un método de alto nivel que activa la operación de la `StopTrainingJob` API. `stop_training_job`

   ```
   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
   ```

   Para obtener más información sobre la interfaz del editor de código Lambda, consulte [Creación de funciones mediante el editor de consola AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/code-editor.html).

1. Omita todos los demás ajustes y seleccione **Guardar**, en la parte superior de la página de configuración.

## Paso 3: Crear una regla de CloudWatch eventos y vincularla a la función Lambda para Debugger
<a name="debugger-cloudwatch-events"></a>

**Para crear una regla de CloudWatch eventos y vincularla a la función Lambda para Debugger**

1. Abra la CloudWatch consola en. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)

1. En el panel de navegación de la izquierda, seleccione **Reglas** en el nodo **Eventos**.

1. Seleccione **Creación de regla**.

1. En la sección **Fuente del evento** de la página **Paso 1: Crear regla**, elija **SageMaker AI** para el **nombre del servicio** y elija **SageMaker AI Training Job State Change para el** **tipo de evento**. La vista previa del patrón de eventos tendrá un aspecto similar al de las siguientes cadenas JSON de ejemplo: 

   ```
   {
       "source": [
           "aws.sagemaker"
       ],
       "detail-type": [
           "SageMaker Training Job State Change"
       ]
   }
   ```

1. En la sección **Objetivos**, elija **Agregar objetivo\$1** y elija la función **debugger-rule-stop-trainingLambda -job** que creó. Este paso vincula la regla de CloudWatch eventos con la función Lambda.

1. Seleccione **Configurar los detalles** y vaya a la página **Paso 2: configurar detalles de la regla**.

1. Especifique el nombre de la definición de la CloudWatch regla. Por ejemplo, **debugger-cw-event-rule**.

1. Para terminar, elija **Crear una regla**.

1. Vuelva a la página de configuración de la función de Lambda y actualice la página. Confirme que está configurada correctamente en el panel **Diseño**. La regla CloudWatch Events debe registrarse como activador de la función Lambda. El diseño de la configuración debe ser similar al siguiente ejemplo:  
<a name="lambda-designer-example"></a>![\[Panel de diseño para la CloudWatch configuración.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/debugger/debugger-lambda-designer.png)