Compartir a través de


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 canalizaciones de aprendizaje automático para que se ejecuten en Azure. Puede programar tareas rutinarias como volver a entrenar modelos o actualizar periódicamente predicciones por lotes en función del tiempo transcurrido.

En este artículo se muestra cómo crear, recuperar, actualizar y desactivar programaciones mediante la CLI de Azure Machine Learning, el SDK de Azure Machine Learning v2 para Python o la interfaz de usuario de Azure Machine Learning Studio.

Sugerencia

Para programar trabajos utilizando un orquestador externo, como Azure Data Factory o Microsoft Fabric, considere la posibilidad de desplegar sus trabajos de canalización bajo un punto final por lotes. Para más información, consulte Implementación de trabajos de canalización existentes en puntos de conexión por lotes y Ejecución de modelos de Azure Machine Learning desde Fabric mediante puntos de conexión por lotes (versión preliminar).

Requisitos previos

Limitaciones

  • Las programaciones de Azure Machine Learning v2 no admiten desencadenadores basados en eventos.
  • Las programaciones de CLI y SDK v2 admiten la especificación de patrones de periodicidad complejos que contienen varias marcas de tiempo de desencadenador. La interfaz de usuario de Studio muestra los patrones complejos, pero no admite su edición.
  • La interfaz de usuario de Studio solo admite programaciones v2 y no puede enumerar ni acceder a las programaciones v1 basadas en canalizaciones publicadas o puntos de conexión de canalización. Puede crear una programación para una canalización no publicada.
  • Si la periodicidad se establece como el día 31 o 30 de cada mes, la programación no desencadena trabajos en meses que tienen menos días.
  • DAYS los valores y MONTHS no se admiten en las expresiones de programación cron. Los valores pasados para estos parámetros se omiten y se tratan como *.

Crear programación

Si tiene un trabajo de canalización con un rendimiento y unos resultados satisfactorios, puede configurar una programación para desencadenar automáticamente este trabajo de forma periódica. Para ello, debe crear una programación que asocie el trabajo a un desencadenador. El desencadenador puede ser un recurrence patrón o una cron expresión que especifica el intervalo y la frecuencia para ejecutar el trabajo.

En ambos casos, primero debe definir un trabajo de canalización, ya sea insertado o especificando un trabajo de canalización existente. Puede definir canalizaciones en YAML y ejecutarlas desde la CLI, crear canalizaciones insertadas en Python o crear canalizaciones en Azure Machine Learning Studio. Puede crear trabajos de canalización localmente o desde trabajos existentes en el área de trabajo.

Puede crear programaciones v2 para trabajos de canalización v2 o v1 mediante la interfaz de usuario de Studio, SDK v2 o la CLI v2. No es necesario publicar primero canalizaciones existentes para configurar programaciones para trabajos de canalización.

Los ejemplos de código de este artículo proceden de Trabajar con programación en la CLI de Azure Machine Learning 2.0.

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

El código YAML siguiente define una programación periódica para un trabajo de canalización. El parámetro necesario type especifica que el trigger tipo es recurrence.

$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

Debe o puede proporcionar los siguientes parámetros de programación:

Parámetros

  • frequency(obligatorio) es la unidad de tiempo en la que se activa la programación. Puede ser minutes, hours, days, weeks o months.
  • interval(obligatorio) es el número de unidades de tiempo entre periodicidades de programación.
  • schedule (opcional) define el patrón de periodicidad, que puede contener hours, minutesy weekdays. Si se omite, los trabajos se desencadenan según la lógica de start_time, frequencyy interval.
    • Cuando frequency es day, el patrón puede especificar hours y minutes.
    • Cuando frequency es week o month, el patrón puede especificar hours, minutesy weekdays.
      • hours es un entero o una lista de 0 a 23.
      • minutes es un entero o una lista de 0 a 59.
      • weekdays puede ser una cadena o una lista de monday a sunday.
  • start_time (opcional) es la fecha y hora de inicio con la zona horaria. Si se omite, el valor predeterminado es igual a la hora de creación de la programación. Si la hora de inicio ya ha pasado, el primer trabajo se ejecuta en el siguiente tiempo de ejecución calculado.
  • end_time (opcional) es la fecha y hora de finalización con la zona horaria. Si se omite, la programación permanece activa hasta que se deshabilita manualmente.
  • (Opcional) time_zone especifica la zona horaria de la periodicidad. Si se omite, el valor predeterminado es Hora universal coordinada (UTC). Para obtener más información sobre los valores de zona horaria, vaya al apéndice de los valores de zona horaria.

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 creates related resources for a schedule. It takes dozens of seconds to complete.
az ml schedule create --file simple-pipeline-job.yml --no-wait

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

Una expresión cron puede especificar un patrón de periodicidad flexible y personalizado para una programación. Una expresión crontab estándar se compone de los campos delimitados por espacios MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK. Un carácter comodín * significa todos los valores de un campo.

En una expresión cron de programación de lenguaje de Máquina de Azure:

  • MINUTES es un entero o una lista de 0 a 59.
  • HOURS es un entero o una lista de 0 a 23.
  • DAYS los valores no se admiten y siempre se tratan como *. El * valor en DAYS significa todos los días de un mes, que varía con mes y año.
  • MONTHS los valores no se admiten y siempre se tratan como *.
  • DAYS-OF-WEEK es un entero o una lista de 0 a 6, donde 0 = domingo. También se aceptan nombres de días.

Por ejemplo, la expresión 15 16 * * 1 significa 4:15 UTC cada lunes. Para más información sobre las expresiones crontab, visite la wiki de la expresión crontab en GitHub.

El código YAML siguiente define una programación periódica para un trabajo de canalización. El parámetro necesario type especifica que el trigger tipo es cron.

$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

Debe o puede proporcionar los siguientes parámetros de programación:

Parámetros

  • expression(obligatorio) es una expresión crontab estándar que expresa una programación periódica.
  • start_time (opcional) es la fecha y hora de inicio de la programación con la zona horaria. Por ejemplo, start_time: "2022-05-10T10:15:00-04:00" significa que la programación comienza a partir de las 10:15:00 a. m. el 10 de mayo de 2022 en la zona horaria UTC-4. Si se omite, el valor predeterminado es igual a la hora de creación de la programación. Si la hora de inicio ya ha pasado, el primer trabajo se ejecuta en el siguiente tiempo de ejecución calculado.
  • end_time (opcional) es la fecha y hora de finalización con la zona horaria. Si se omite, la programación permanece activa hasta que se deshabilita manualmente.
  • (Opcional) time_zone especifica la zona horaria de la periodicidad. Si se omite, el valor predeterminado es UTC.

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 creates related resources for a schedule. It takes dozens of seconds to complete.
az ml schedule create --file simple-pipeline-job.yml --no-wait

Cambiar la configuración del trabajo al definir programaciones

En ocasiones, puede que quiera que los trabajos desencadenados por programaciones tengan configuraciones diferentes a las de los trabajos de prueba. Al definir una programación mediante un trabajo existente, puede cambiar la configuración del trabajo. Este enfoque le permite definir varias programaciones que usan el mismo trabajo con entradas diferentes.

Al definir una programación, puede cambiar, settings, inputs o outputs para usarla al ejecutar el trabajo de canalización. También puede cambiar el experiment_name del trabajo desencadenado.

La siguiente definición de programación cambia la configuración de un trabajo existente.

$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

Uso de expresiones admitidas en programaciones

Al definir una programación, puede usar las siguientes expresiones de macro para definir valores de parámetro dinámicos que se resuelven en valores reales durante el tiempo de ejecución del trabajo.

Expression Descripción Propiedades admitidas
${{name}} Nombre del trabajo outputs ruta de acceso del trabajo de canalización
${{creation_context.trigger_time}} Tiempo del desencadenador del trabajo Tipo de cadena inputs del trabajo de canalización

Administración de programación

Puede enumerar, ver detalles, actualizar, deshabilitar, habilitar y eliminar programaciones en un área de trabajo.

Enumerar programaciones

az ml schedule list

Detalles de la programación de trabajos

az ml schedule show -n simple_cron_job_schedule

Actualización de una programación

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

Nota:

Para actualizar más que solo etiquetas y descripciones, considere la posibilidad de usar az ml schedule create --file update_schedule.yml.

Deshabilitación de una programación

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

Habilitación de una programación

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

Eliminación de una programación

Importante

Primero debe deshabilitar una programación para eliminarla. La eliminación es permanente e irrecuperable.

az ml schedule delete -n simple_cron_job_schedule

Consulta de trabajos desencadenados desde una programación

Los trabajos desencadenados por una programación específica tienen el nombre <schedule_name>-YYYYMMDDThhmmssZ para mostrar. Por ejemplo, si una programación denominada se named-schedule ejecuta cada 12 horas a partir de las 6 a.m. el 1 de enero de 2021, los nombres para mostrar de los trabajos creados son los siguientes:

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

Captura de pantalla de la pestaña de trabajos en Estudio de Azure Machine Learning filtrando por nombre para mostrar del trabajo.

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')]"

Sugerencia

La pestaña Historial de trabajos de la página de detalles de programación de Studio proporciona una manera sencilla de encontrar todos los trabajos desencadenados por una programación.


Compatibilidad con control de acceso basado en rol (RBAC)

Dado que las programaciones se usan para producción, es importante reducir la posibilidad y el impacto de la inoperación incorrecta. Los administradores del área de trabajo pueden restringir el acceso a la creación y administración de programaciones en un área de trabajo.

Los administradores pueden configurar las siguientes reglas de acción relacionadas con las programaciones en Azure Portal. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.

Acción Descripción Regla
Leer Obtener y enumerar programaciones Microsoft.MachineLearningServices/workspaces/schedules/read
Escribir Crear, actualizar, deshabilitar y habilitar programaciones Microsoft.MachineLearningServices/workspaces/schedules/write
Eliminar Eliminación de programaciones Microsoft.MachineLearningServices/workspaces/schedules/delete

Consideraciones sobre los costos

Las programaciones se facturan en función del número de programaciones. Cada programación crea una aplicación lógica que Azure Machine Learning hospeda en nombre del usuario (HOBO).

La aplicación lógica se cobra de vuelta a la suscripción de Azure del usuario. Los costos de recursos HOBO se facturan con el mismo medidor emitido por el proveedor de recursos original. Los cargos aparecen en el recurso de host, que es el área de trabajo de Azure Machine Learning.