Programación de trabajos de canalización de Machine Learning

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

En este artículo, aprenderá a programar mediante código una canalización para que se ejecute en Azure y a usar la interfaz de usuario de programación para hacer lo mismo. Puede crear una programación basada en el tiempo transcurrido. Las programaciones basadas en tiempo se pueden usar para encargarse de tareas rutinarias, como volver a entrenar modelos o realizar predicciones por lotes con regularidad para mantenerlos actualizados. Después de aprender a crear programaciones, aprenderá a recuperarlas y a actualizarlas y desactivarlas mediante la CLI, el SDK y la interfaz de usuario de Estudio.

Sugerencia

Si necesita programar trabajos mediante un orquestador externo, como Azure Data Factory o Microsoft Fabric, considere la posibilidad de implementar los trabajos de canalización en un punto de conexión por lotes. Obtenga más información sobre cómo implementar trabajos en un punto de conexión por lotesy cómo consumir puntos de conexión por lotes de Microsoft Fabric.

Requisitos previos

Programación de un trabajo de canalización

Para ejecutar una canalización de manera periódica, deberá crear una programación. Schedule asocia un trabajo y un desencadenador. El desencadenador puede ser cron, que usa la expresión cron para describir la espera entre ejecuciones, o recurrence que especifica qué frecuencia se va a usar para desencadenar el trabajo. En cada caso, primero debe definir un trabajo de canalización, que puede ser trabajos de canalización existentes o un trabajo de canalización alineado. Consulte Creación de un trabajo de canalización en la CLI y Creación de un trabajo de canalización en el SDK.

Puede programar un trabajo de canalización yaml en local o un trabajo de canalización existente en el área de trabajo.

Crear una programación

Creación de una programación basada en tiempo con el patrón de periodicidad

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: simple_recurrence_job_schedule
display_name: Simple recurrence job schedule
description: a simple hourly recurrence job schedule

trigger:
  type: recurrence
  frequency: day #can be minute, hour, day, week, month
  interval: 1 #every day
  schedule:
    hours: [4,5,10,11,12]
    minutes: [0,30]
  start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
  time_zone: "Pacific Standard Time" # optional - default will be UTC

create_job: ./simple-pipeline-job.yml
# create_job: azureml:simple-pipeline-job

trigger contiene las propiedades siguientes:

  • (Obligatorio)type especifica que el tipo de programación es recurrence. También puede ser cron, consulte los detalles de la siguiente sección.

La lista sigue a continuación.

Nota

Las siguientes propiedades que deben especificarse se aplican a la CLI y al SDK.

  • (Obligatorio)frequency especifica la unidad de tiempo que describe la frecuencia con la que se activa la programación. Puede ser minute, hour, day, week, month.

  • (Obligatorio)interval especifica cada cuánto tiempo se activa la programación según la frecuencia, que es el número de unidades de tiempo que hay que esperar hasta que la programación se active de nuevo.

  • (Opcional) schedule define el patrón de periodicidad, que contiene hours, minutes y weekdays.

    • Cuando frequency es day, el patrón puede especificar hours y minutes.
    • Cuando frequency es week y month, el patrón puede especificar hours, minutes y weekdays.
    • hours debe ser un entero o una lista, de 0 a 23.
    • minutes debe ser un entero o una lista, de 0 a 59.
    • weekdays puede ser una cadena o una lista de monday a sunday.
    • Si schedule se omite, los trabajos se desencadenarán según la lógica de start_time, frequency y interval.
  • (Opcional) start_time describe la fecha y hora de inicio con zona horaria. Si start_time se omite, start_time será igual al tiempo de creación del trabajo. Si la hora de inicio ya ha pasado, el primer trabajo se ejecutará en el siguiente tiempo de ejecución calculado.

  • (Opcional) end_time describe la fecha y hora de finalización con zona horaria. Si end_time se omite, la programación continuará desencadenando trabajos hasta que la programación se deshabilite de manualmente.

  • (Opcional) time_zone especifica la zona horaria de la periodicidad. Si se omite, es UTC de manera predeterminada. Para obtener más información sobre los valores de zona horaria, consulte el apéndice de los valores de zona horaria.

Creación de una programación basada en tiempo con la expresión cron

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: simple_cron_job_schedule
display_name: Simple cron job schedule
description: a simple hourly cron job schedule

trigger:
  type: cron
  expression: "0 * * * *"
  start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
  time_zone: "Pacific Standard Time" # optional - default will be UTC

# create_job: azureml:simple-pipeline-job
create_job: ./simple-pipeline-job.yml

La sección trigger define los detalles de la programación y contiene las siguientes propiedades:

  • (Obligatorio)type especifica que el tipo de programación es cron.

La lista sigue a continuación.

  • (Obligatorio)expression usa una expresión crontab estándar para expresar una programación periódica. Una sola expresión se compone de cinco campos delimitados por espacios:

    MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK

    • Un solo carácter comodín (*), que cubre todos los valores del campo. Por lo tanto, un * en días se refiere a todos los días de un mes (que varía con el mes y el año).

    • El expression: "15 16 * * 1" del ejemplo anterior se refiere a las 16:15 todos los lunes.

    • La tabla a continuación enumera los valores válidos para cada campo:

      Campo Intervalo Comentario
      MINUTES 0-59 -
      HOURS 0-23 -
      DAYS - No se admite. El valor se omitirá y tratará como *.
      MONTHS - No se admite. El valor se omitirá y tratará como *.
      DAYS-OF-WEEK 0-6 Cero (0) significa domingo. También se aceptan nombres de días.
    • Para obtener más información sobre cómo usar la expresión crontab, consulte Wiki de la expresión crontab en GitHub .

    Importante

    No se admiten DAYS ni MONTH. Si pasa un valor, se omitirá y se tratará como *.

  • (Opcional) start_time especifica la fecha y hora de inicio con la zona horaria de la programación. start_time: "2022-05-10T10:15:00-04:00" significa que la programación comienza desde las 10:15:00 del 10-05-2022 en la zona horaria UTC-4. Si start_time se omite, start_time será igual a la hora de creación de la programación. Si la hora de inicio ya ha pasado, el primer trabajo se ejecutará en el siguiente tiempo de ejecución calculado.

  • (Opcional) end_time describe la fecha y hora de finalización con zona horaria. Si end_time se omite, la programación continuará desencadenando trabajos hasta que la programación se deshabilite de manualmente.

  • (Opcional) time_zone especifica la zona horaria de la expresión. Si se omite, es UTC de manera predeterminada. Consulte el apéndice de valores de zona horaria.

Limitaciones:

  • Actualmente, la programación de Azure Machine Learning v2 no admite el desencadenador basado en eventos.
  • Puede especificar un patrón de periodicidad complejo que contenga varias marcas de tiempo de desencadenador mediante el SDK o la CLI v2 de Azure Machine Learning, mientras que la interfaz de usuario solo muestra el patrón complejo y no admite la edición.
  • Si establece la periodicidad en el día 31 de cada mes, en meses con menos de 31 días, la programación no desencadenará trabajos.

Cambio de los parámetros de ejecución al definir la programación

Cuando se define una programación mediante un trabajo existente, es posible cambiar la configuración del tiempo de ejecución del trabajo. Con este enfoque, puede definir varias programaciones mediante el mismo trabajo con entradas diferentes.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: cron_with_settings_job_schedule
display_name: Simple cron job schedule
description: a simple hourly cron job schedule

trigger:
  type: cron
  expression: "0 * * * *"
  start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
  time_zone: "Pacific Standard Time" # optional - default will be UTC

create_job: 
  type: pipeline
  job: ./simple-pipeline-job.yml
  # job: azureml:simple-pipeline-job
  # runtime settings
  settings:
    #default_compute: azureml:cpu-cluster
    continue_on_step_failure: true
  inputs:
    hello_string_top_level_input: ${{name}} 
  tags: 
    schedule: cron_with_settings_schedule

Las siguientes propiedades se pueden cambia cuando se define la programación:

Propiedad Descripción
configuración Diccionario de configuración que se usará al ejecutar el trabajo de canalización.
inputs Diccionario de entradas que se usará al ejecutar el trabajo de canalización.
outputs Diccionario de entradas que se usará al ejecutar el trabajo de canalización.
experiment_name Nombre del experimento del trabajo desencadenado.

Nota

Los usuarios de la interfaz de usuario de Estudio solo pueden modificar la configuración de entrada, salida y tiempo de ejecución al crear una programación. experiment_name solo se puede cambiar mediante la CLI o el SDK.

Expresiones admitidas en la programación

Al definir la programación, se admite la siguiente expresión que se resolverá en valor real durante el tiempo de ejecución del trabajo.

Expression Descripción Propiedades admitidas
${{creation_context.trigger_time}} Hora en que se desencadena la programación. Entradas de tipo de cadena del trabajo de canalización
${{name}} Nombre del trabajo. outputs.path del trabajo de canalización

Administración de programación

Crear una programación

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Después de crear el código yaml de programación, podrá usar el siguiente comando para crear una programación a través de la CLI.

# This action will create related resources for a schedule. It will take dozens of seconds to complete.
az ml schedule create --file cron-schedule.yml --no-wait

Enumeración de programaciones en un área de trabajo

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

az ml schedule list

Comprobación de detalles de programación

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

az ml schedule show -n simple_cron_job_schedule

Actualización de una programación

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

az ml schedule update -n simple_cron_job_schedule  --set description="new description" --no-wait

Nota

Si quiere actualizar algo más que solo etiquetas o descripciones, se recomienda usar az ml schedule create --file update_schedule.yml

Deshabilitación de una programación

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

az ml schedule disable -n simple_cron_job_schedule --no-wait

Habilitación de una programación

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

az ml schedule enable -n simple_cron_job_schedule --no-wait

Consulta de trabajos desencadenados desde una programación

Todo el nombre para mostrar de los trabajos desencadenados por programación tendrá el nombre para mostrar como <schedule_name>-YYYYMMDDThhmmssZ. Por ejemplo, si se crea una programación con un nombre de programación con nombre mediante una ejecución programada cada 12 horas a partir de las 6:00 del 1 de enero de 2021, los nombres para mostrar de los trabajos creados serán los siguientes:

  • named-schedule-20210101T060000Z
  • named-schedule-20210101T180000Z
  • named-schedule-20210102T060000Z
  • named-schedule-20210102T180000Z, etc.

Screenshot of the jobs tab in the Azure Machine Learning studio filtering by job display name.

También puede aplicar la consulta JMESPath de la CLI de Azure para consultar los trabajos que desencadena un nombre de programación.

# query triggered jobs from schedule, please replace the simple_cron_job_schedule to your schedule name
az ml job list --query "[?contains(display_name,'simple_cron_schedule')]"

Nota

Para encontrar una manera más sencilla de buscar todos los trabajos desencadenados por una programación, consulte el historial de trabajos en la página de detalles de programación mediante la interfaz de usuario de Estudio.


Eliminación de una programación

Importante

Hay que deshabilitar una programación para eliminarla. La acción de eliminar es irrecuperable. Después de eliminar una programación, nunca podrá acceder a ella ni recuperarla.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

az ml schedule delete -n simple_cron_job_schedule

Compatibilidad con RBAC (control de acceso basado en rol)

Dado que las programaciones se suelen usar en entornos de producción, para reducir el impacto de operaciones incorrectas, es posible que los administradores del área de trabajo quieran restringir el acceso a la creación y administración de programaciones dentro de un área de trabajo.

Actualmente hay tres reglas de acción relacionadas con las programaciones y que puede configurar en Azure Portal. Puede obtener más información sobre cómo administrar el acceso a un área de trabajo de Azure Machine Learning.

Acción Descripción Regla
Lectura Obtener y enumerar programaciones en un área de trabajo de Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/read
Escritura Crear, actualizar, deshabilitar y habilitar programaciones en el área de trabajo de Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/write
Eliminar Eliminar una programación en el área de trabajo de Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/delete

Preguntas más frecuentes

  • ¿Por qué mis programaciones creadas por el SDK no aparecen en la interfaz de usuario?

    La interfaz de usuario de programaciones es para las programaciones v2. Por lo tanto, las programaciones v1 no se mostrarán ni se podrá acceder a ellas mediante la interfaz de usuario.

    Sin embargo, las programaciones v2 también admiten trabajos de canalización v1. No es necesario publicar primero la canalización, y puede configurar directamente programaciones para un trabajo de canalización.

  • ¿Por qué mis programaciones no desencadenan el trabajo en el momento que definí antes?

    • De forma predeterminada, las programaciones usarán la zona horaria UTC para calcular la hora del desencadenador. Puede especificar la zona horaria en el asistente para la creación o actualizar la zona horaria en la página de detalles de la programación.
    • Si establece la periodicidad en el día 31 de cada mes, en meses con menos de 31 días, la programación no desencadenará trabajos.
    • Si usa expresiones cron, MONTH no se admite. Si pasa un valor, se omitirá y se tratará como *. Esta es una limitación conocida.
  • ¿Se admiten programaciones basadas en eventos?

    • No, la programación v2 no admite programaciones basadas en eventos.

Pasos siguientes