Programación de ejecuciones de canalizaciones - Amazon SageMaker AI

Programación de ejecuciones de canalizaciones

Puede programar las ejecuciones de Canalizaciones de Amazon SageMaker con Amazon EventBridge. Canalizaciones de Amazon SageMaker se admite como destino en Amazon EventBridge. Esto le permite iniciar la ejecución de su canalización de creación de modelos en función de cualquier evento del bus de eventos. Con EventBridge, puede automatizar las ejecuciones de sus canalizaciones y responder automáticamente a eventos como cambios en el estado del punto de conexión o el trabajo de entrenamiento. Los eventos incluyen la carga de un nuevo archivo en su bucket de Amazon S3, un cambio en el estado de su punto de conexión de Amazon SageMaker AI debido a una deriva y temas relacionados con Amazon Simple Notification Service (SNS).

Las siguientes acciones de Canalizaciones se pueden iniciar automáticamente: 

  • StartPipelineExecution

Para obtener más información sobre la programación de trabajos de SageMaker AI, consulte Automating SageMaker AI with Amazon EventBridge.

Programación de un canalización con Amazon EventBridge

Para iniciar la ejecución de una canalización con eventos de Amazon CloudWatch, debe crear una regla de EventBridge. Al crear una regla para eventos, se especifica una acción objetivo que se llevará a cabo cuando EventBridge reciba un evento que coincida con la regla. Cuando un evento coincide con la regla, EventBridge envía el evento al objetivo especificado y activa la acción definida en la regla.

Los siguientes tutoriales muestran cómo programar la ejecución de una canalización con EventBridge mediante la consola de EventBridge o la AWS CLI. 

Requisitos previos

  • Un rol que EventBridge puede asumir con el permiso SageMaker::StartPipelineExecution. Este rol se puede generar automáticamente si crea una regla desde la consola de EventBridge; de lo contrario, tendrá que crear este rol usted mismo. Para obtener más información sobre la creación de un rol de SageMaker AI, consulte Roles de SageMaker.

  • Una canalización de Amazon SageMaker AI para programar. Para crear una canalización de Amazon SageMaker AI, consulte Definición de una canalización.

Creación de una regla de EventBridge mediante la consola de EventBridge

El siguiente procedimiento describe cómo crear una regla de EventBridge mediante la consola de EventBridge. 

  1. Vaya a la consola de EventBridge.

  2. Seleccione Reglas en la parte izquierda.

  3. Seleccione Create Rule.

  4. Escriba un nombre y la descripción de la regla.

  5. Seleccione cómo desea iniciar esta regla. Para la regla, tiene las siguientes opciones:

    • Patrón de eventos: la regla se inicia cuando se produce un evento que coincide con el patrón. Puede elegir un patrón predefinido que coincida con un determinado tipo de evento o puede crear un patrón personalizado. Si selecciona un patrón predefinido, puede editarlo para personalizarlo. Para obtener más información acerca de patrones de eventos, consulte Event Patterns in CloudWatch Events.

    • Programación: la regla se inicia periódicamente según una programación específica. Puede utilizar una programación de tasa fija que se inicie de forma periódica durante un número específico de minutos, horas o semanas. También puede usar una expresión cron para crear una programación más detallada, como “el primer lunes de cada mes a las 8 de la mañana”. No se admite la programación en un bus de eventos personalizado o de socio.

  6. Seleccione el bus de eventos que desee.

  7. Seleccione los objetivos que desee invocar cuando un evento coincida con su patrón de eventos o cuando se inicie la programación. Puede agregar hasta 5 objetivos por regla. Seleccione SageMaker Pipeline en la lista desplegable de objetivos.

  8. Seleccione la canalización que desea iniciar en la lista desplegable de canalizaciones.

  9. Agregue parámetros para pasarlos a la ejecución de la canalización mediante un par de nombre y valor. Los valores de parámetros pueden ser estáticos o dinámicos. Para obtener más información sobre los parámetros de las canalizaciones de Amazon SageMaker AI, consulte AWS::Events::Rule SageMakerPipelineParameters.

    • Los valores estáticos se transfieren a la ejecución de la canalización cada vez que se inicia la canalización. Por ejemplo, si se especifica {"Name": "Instance_type", "Value": "ml.4xlarge"} en la lista de parámetros, se pasa como parámetro en la StartPipelineExecutionRequest cada vez que EventBridge inicia la canalización.

    • Los valores dinámicos se especifican mediante una ruta JSON. EventBridge analiza el valor de la carga de un evento y, a continuación, lo pasa a la ejecución de la canalización. Por ejemplo: $.detail.param.value

  10. Seleccione el rol que se va a usar para esta regla. Puede crear un nuevo rol o utilizar uno existente.

  11. De forma opcional, puede agregar una etiqueta.

  12. Seleccione Create para finalizar la regla.

La regla ya está en vigor y lista para iniciar las ejecuciones de la canalización.

Creación de una regla de EventBridge con la AWS CLI

El siguiente procedimiento describe cómo crear una regla de EventBridge mediante la AWS CLI.

  1. Cree una regla para que se inicie. Al crear una regla de EventBridge mediante la AWS CLI, tiene dos opciones para iniciar la regla: patrón de eventos y programación.

    • Patrón de eventos: la regla se inicia cuando se produce un evento que coincide con el patrón. Puede elegir un patrón predefinido que coincida con un determinado tipo de evento o puede crear un patrón personalizado. Si selecciona un patrón predefinido, puede editarlo para personalizarlo.  Puede crear una regla con un patrón de eventos mediante el siguiente comando:

      aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
    • Programación: la regla se inicia periódicamente según una programación específica. Puede utilizar una programación de tasa fija que se inicie de forma periódica durante un número específico de minutos, horas o semanas. También puede usar una expresión cron para crear una programación más detallada, como “el primer lunes de cada mes a las 8 de la mañana”. No se admite la programación en un bus de eventos personalizado o de socio. Puede crear una regla con una programación mediante el siguiente comando:

      aws events put-rule --name <RULE_NAME> --schedule-expression <YOUR_CRON_EXPRESSION> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
  2. Agregue los objetivos que desee invocar cuando un evento coincida con su patrón de eventos o cuando se inicie la programación. Puede agregar hasta 5 objetivos por regla.  Para cada objetivo, debe especificar lo siguiente: 

    • ARN: el ARN del recurso de la canalización.

    • ARN del rol: el ARN del rol que debe asumir EventBridge para ejecutar la canalización.

    • Parámetros: los parámetros de la canalización de Amazon SageMaker AI que se van a pasar.

  3. Ejecute el siguiente comando para pasar una canalización de Amazon SageMaker AI como un objetivo a su regla mediante put-targets:

    aws events put-targets --rule <RULE_NAME> --event-bus-name <EVENT_BUS_NAME> --targets "[{\"Id\": <ID>, \"Arn\": <RESOURCE_ARN>, \"RoleArn\": <ROLE_ARN>, \"SageMakerPipelineParameter\": { \"SageMakerParameterList\": [{\"Name\": <NAME>, \"Value\": <VALUE>}]} }]"] 

Programación de una canalización con el SageMaker Python SDK

En las siguientes secciones, se muestra cómo configurar los permisos para acceder a los recursos de EventBridge y crear la programación de sus canalizaciones mediante el SageMaker Python SDK.

Permisos necesarios

Debe tener los permisos necesarios para utilizar el programador de canalizaciones. Realice los siguientes pasos para configurar sus permisos:

  1. Asocie la siguiente política de privilegios mínimos al rol de IAM utilizado para crear los disparadores de canalización o utilice la política administrada de AWS AmazonEventBridgeSchedulerFullAccess.

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Action": [ "scheduler:ListSchedules", "scheduler:GetSchedule", "scheduler:CreateSchedule", "scheduler:UpdateSchedule", "scheduler:DeleteSchedule" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringLike": { "iam:PassedToService": "scheduler.amazonaws.com" } } } ] }
  2. Establezca una relación de confianza con EventBridge añadiendo la entidad principal del servicio scheduler.amazonaws.com a la política de confianza de este rol. Asegúrese de asociar la siguiente política de confianza al rol de ejecución si inicializa el cuaderno en SageMaker Studio.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "scheduler.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

Creación de una programación de canalización

Con el constructor PipelineSchedule, puede programar una canalización para que se ejecute una vez o en un intervalo predeterminado. La programación de canalización debe ser del tipo at, rate o cron. Este conjunto de tipos de programación es una extensión de las opciones de programación de EventBridge. Para obtener más información sobre cómo usar la clase PipelineSchedule, consulte sagemaker.workflow.triggers.PipelineSchedule. En el siguiente ejemplo, se muestra cómo crear cada tipo de programación con PipelineSchedule.

from sagemaker.workflow.triggers import PipelineSchedule # schedules a pipeline run for 12/13/2023 at time 10:15:20 UTC my_datetime_schedule = PipelineSchedule( name="<schedule-name>", at=datetime(2023, 12, 13, 10, 15, 20) ) # schedules a pipeline run every 5 minutes my_rate_schedule = PipelineSchedule( name="<schedule-name>", rate=(5, "minutes") ) # schedules a pipeline run at 10:15am UTC on the last Friday of each month during the years 2022 to 2023 my_cron_schedule = PipelineSchedule( name="<schedule-name>", cron="15 10 ? * 6L 2022-2023" )
nota

Si crea una programación única y necesita acceder a la hora actual, utilice datetime.utcnow() en lugar de datetime.now(). Esta última no almacena el contexto de la zona actual, por lo que se pasa una hora incorrecta a EventBridge.

Asociación del disparador a la canalización

Para asociar su PipelineSchedule a su canalización, invoque la llamada a put_triggers en el objeto de canalización que haya creado con una lista de disparadores. Si recibe un ARN de respuesta, habrá creado correctamente la programación en su cuenta y EventBridge empezará a invocar la canalización de destino a la hora o al ritmo especificados. Debe especificar un rol con los permisos correctos para asociar los disparadores a una canalización principal. Si no lo proporciona, Canalizaciones busca el rol predeterminado que se usa para crear la canalización desde el archivo de configuración.

En el siguiente ejemplo, se muestra cómo asociar una programación a una canalización.

scheduled_pipeline = Pipeline( name="<pipeline-name>", steps=[...], sagemaker_session=<sagemaker-session>, ) custom_schedule = PipelineSchedule( name="<schedule-name>", at=datetime(year=2023, month=12, date=25, hour=10, minute=30, second=30) ) scheduled_pipeline.put_triggers(triggers=[custom_schedule], role_arn=<role>)

Descripción de los disparadores actuales

Para recuperar información sobre los disparadores de canalización que ha creado, puede invocar la API describe_trigger() con el nombre del disparador. Este comando devuelve detalles sobre la expresión de programación creada, como la hora de inicio, el estado de activación y otra información útil. En el siguiente fragmento de código, se muestra un ejemplo de invocación:

scheduled_pipeline.describe_trigger(name="<schedule-name>")

Limpieza de recursos de disparadores

Antes de eliminar su canalización, limpie los disparadores existentes para evitar que se pierdan recursos en su cuenta. Debe eliminar los disparadores antes de destruir la canalización principal. Puede eliminar los disparadores pasando una lista de nombres de disparadores a la API delete_triggers. En el siguiente fragmento, se muestra cómo eliminar los disparadores.

pipeline.delete_triggers(trigger_names=["<schedule-name>"])
nota

Tenga en cuenta las siguientes limitaciones al eliminar los disparadores:

  • La opción de eliminar los disparadores especificando los nombres de los disparadores solo está disponible en el SageMaker Python SDK. Al eliminar la canalización en la CLI o en una llamada a la API DeletePipeline, no se eliminan los disparadores. Como resultado, los disparadores quedan huérfanos y SageMaker AI intenta iniciar una ejecución para una canalización inexistente.

  • Además, si está utilizando otra sesión de cuaderno o ya ha eliminado el destino de la canalización, limpie las programaciones huérfanas mediante la CLI del programador o la consola de EventBridge.