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
- Debe tener una suscripción a Azure para usar Azure Machine Learning. Si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar. Pruebe hoy mismo la versión gratuita o de pago de Azure Machine Learning.
Instale la CLI de Azure y la extensión
ml
. Siga los pasos de instalación de Instalación, configuración y uso de la CLI (v2).Cree un área de trabajo de Azure Machine Learning si aún no tiene una. Para la creación del área de trabajo, consulte Instalación, configuración y uso de la CLI (v2).
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 esrecurrence
. También puede sercron
, 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 serminute
,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 contienehours
,minutes
yweekdays
.- Cuando
frequency
esday
, el patrón puede especificarhours
yminutes
. - Cuando
frequency
esweek
ymonth
, el patrón puede especificarhours
,minutes
yweekdays
. 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 demonday
asunday
.- Si
schedule
se omite, los trabajos se desencadenarán según la lógica destart_time
,frequency
yinterval
.
- Cuando
(Opcional)
start_time
describe la fecha y hora de inicio con zona horaria. Sistart_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. Siend_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 escron
.
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
niMONTH
. 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. Sistart_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. Siend_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.
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 |
Consideraciones sobre los costos
- Las programaciones se facturan en función de su número; cada programación creará una suscripción de Azure Machine Learning de host de aplicación lógica en nombre (HOBO) del usuario.
- El costo de las aplicaciones lógicas volverá a cambiar a la suscripción de Azure del usuario y podrá encontrar los costos de los recursos HOBO que se facturan con el mismo medidor emitido por el RP original. Se muestran en el recurso de host (el área de trabajo).
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
- Obtenga más información sobre el esquema YAML de programación de la CLI (v2).
- Obtenga información sobre la creación de un trabajo de canalización en la CLI v2.
- Obtenga información sobre la creación de un trabajo de canalización en el SDK v2.
- Obtenga más información sobre la sintaxis de YAML principal de la CLI (v2).
- Obtenga más información sobre las canalizaciones.
- Obtenga más información sobre el componente.