Partager via


Planifier des travaux de pipeline Machine Learning

S’APPLIQUE À :Extension Azure CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)

Dans cet article, vous allez apprendre à planifier des pipelines de Machine Learning pour qu’ils s’exécutent sur Azure. Vous pouvez planifier des tâches de routine telles que la reformation de modèles ou la mise à jour régulière de prédictions par lots en fonction du temps écoulé.

Cet article vous montre comment créer, récupérer, mettre à jour et désactiver des planifications à l’aide de l’interface de ligne de commande Azure Machine Learning, du SDK Azure Machine Learning v2 pour Python ou de l’interface utilisateur d’Azure Machine Learning studio.

Conseil

Pour planifier des travaux à l’aide d’un orchestrateur externe, comme Azure Data Factory ou Microsoft Fabric, envisagez de déployer vos travaux de pipeline sous un point de terminaison par lots. Pour plus d’informations, consultez Déployer des travaux de pipeline existants sur des points de terminaison par lots et Exécuter des modèles Azure Machine Learning à partir de Fabric à l’aide de points de terminaison par lots (préversion).

Prérequis

Limites

  • Les planifications Azure Machine Learning v2 ne prend pas en charge les déclencheurs basés sur les événements.
  • Les planifications CLI et SDK v2 prennent en charge la spécification de modèles de périodicité complexes qui contiennent plusieurs horodatages de déclencheur. L’interface utilisateur du studio affiche les modèles complexes, mais ne prend pas en charge la modification.
  • L’interface utilisateur du studio prend uniquement en charge les planifications v2 et ne peut pas répertorier ou accéder aux planifications v1 basées sur des pipelines ou des points de terminaison de pipeline publiés. Vous pouvez créer une planification pour un pipeline non publié.
  • Si la périodicité est définie comme le 31e ou le 30e jour de chaque mois, la planification ne déclenche pas de travaux pour les mois au nombre de jours inférieur.
  • Les valeurs DAYS et MONTHS ne sont pas prises en charge dans les expressions de planification Cron. Les valeurs passées pour ces paramètres sont ignorées et traitées comme *.

Créer une planification

Quand votre travail de pipeline offre des performances et des sorties satisfaisantes, vous pouvez configurer une planification pour déclencher automatiquement le travail à une fréquence régulière. Pour ce faire, vous devez créer une planification qui associe le travail à un déclencheur. Le déclencheur peut être un modèle recurrence ou une expression cron qui spécifie l’intervalle et la fréquence d’exécution du travail.

Dans les deux cas, vous devez d’abord définir un travail de pipeline, par inline ou en spécifiant un travail de pipeline existant. Vous pouvez définir des pipelines dans YAML et les exécuter à partir de l’interface CLI, créer des pipelines inline en Python ou composer des pipelines dans Azure Machine Learning studio. Vous pouvez créer des travaux de pipeline localement ou à partir de travaux existants dans l’espace de travail.

Vous pouvez créer des planifications v2 pour les travaux de pipeline v2 ou v1 à l’aide de l’interface utilisateur du studio, du SDK v2 ou de l’interface CLI v2. Vous n’avez pas besoin de publier d’abord des pipelines existants pour configurer des planifications pour les travaux de pipeline.

Les exemples de code de cet article proviennent de Travailler avec des planifications dans l’interface CLI Azure Machine Learning 2.0.

Définir une planification basée sur le temps avec un modèle de périodicité

Le code YAML suivant définit une planification périodique pour un travail de pipeline. Le paramètre type requis spécifie que le type trigger est 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

Vous devez ou pouvez fournir les paramètres de planification suivants :

Paramètres

  • frequency (obligatoire) est l’unité de temps sur laquelle la planification s’enclenche. Peut être minutes, hours, days, weeks ou months.
  • interval (obligatoire) correspond au nombre d’unités de temps entre les périodicités planifiées.
  • schedule (facultatif) définit le modèle de périodicité, qui peut contenir hours, minutes et weekdays. En cas d’omission, les travaux se déclenchent en fonction de la logique de start_time, frequency et interval.
    • Quand frequency est day, le schéma peut spécifier hours et minutes.
    • Quand frequency est week ou month, le schéma peut spécifier hours, minutes et weekdays.
      • hours est un entier ou une liste comprise entre 0 et 23.
      • minutes est un entier ou une liste comprise entre 0 et 59.
      • weekdays est une chaîne ou une liste de monday à sunday.
  • start_time (facultatif) est la date et l’heure de début avec le fuseau horaire. En cas d’omission, la valeur par défaut est égale à la planification de l’heure de création. Si l’heure de début se situe dans le passé, la première tâche est exécutée à l’heure d’exécution calculée suivante.
  • end_time (facultatif) décrit la date et l’heure de fin avec le fuseau horaire. En cas d’omission, la planification reste active jusqu’à ce qu’elle soit désactivée manuellement.
  • time_zone (facultatif) spécifie le fuseau horaire de la planification de périodicité. En cas d’omission, la valeur par défaut est Temps universel coordonné (UTC). Pour plus d’informations sur les valeurs du fuseau horaire, consultez l’annexe pour connaître les valeurs de fuseau horaire.

Après avoir créé la planification YAML, utilisez la commande suivante pour créer une planification via l’interface 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

Définir une planification basée sur le temps avec l’expression Cron

Une expression Cron peut spécifier un modèle de périodicité flexible et personnalisé pour une planification. Une expression Crontab standard est composée des champs délimités par un espace MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK. Un caractère générique * signifie toutes les valeurs d’un champ.

Dans une expression Cron de planification du langage machine Azure :

  • MINUTES est un entier ou une liste comprise entre 0 et 59.
  • HOURS est un entier ou une liste comprise entre 0 et 23.
  • Les valeurs DAYS ne sont pas prises en charge et sont toujours traitées comme *. La valeur * dans DAYS signifie tous les jours d’un mois, ce qui varie selon le mois et l’année.
  • Les valeurs MONTHS ne sont pas prises en charge et sont toujours traitées comme *.
  • DAYS-OF-WEEK est un entier ou une liste comprise entre 0 et 6, où 0 = Dimanche. Les noms des jours sont également acceptés.

Par exemple, l’expression 15 16 * * 1 signifie 16:15 UTC tous les lundis. Pour découvrir plus d’informations sur les expressions Crontab, consultez le wiki des expressions Crontab sur GitHub.

Le code YAML suivant définit une planification périodique pour un travail de pipeline. Le paramètre type requis spécifie que le type trigger est 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

Vous devez ou pouvez fournir les paramètres de planification suivants :

Paramètres

  • expression (obligatoire) est une expression Crontab standard qui exprime une planification périodique.
  • start_time (facultatif) est la date et l’heure de début de planification avec le fuseau horaire. Par exemple, start_time: "2022-05-10T10:15:00-04:00" signifie que la planification commence à partir de 10:15 le 10 mai 2022 dans le fuseau horaire UTC-4. En cas d’omission, la valeur par défaut est égale à la planification de l’heure de création. Si l’heure de début se situe dans le passé, la première tâche est exécutée à l’heure d’exécution calculée suivante.
  • end_time (facultatif) décrit la date et l’heure de fin avec le fuseau horaire. En cas d’omission, la planification reste active jusqu’à ce qu’elle soit désactivée manuellement.
  • time_zone (facultatif) spécifie le fuseau horaire de la planification de périodicité. En cas d’omission, la valeur par défaut est UTC.

Après avoir créé la planification YAML, utilisez la commande suivante pour créer une planification via l’interface 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

Modifier les paramètres de travail lorsque vous définissez des planifications

Parfois, vous pouvez souhaiter que les travaux déclenchés par des planifications présentent des configurations différentes par rapport aux travaux de test. Lorsque vous définissez une planification à l’aide d’un travail existant, vous pouvez modifier les paramètres du travail. Cette approche vous permet de définir plusieurs planifications qui utilisent le même travail avec différentes entrées.

Lorsque vous définissez une planification, vous pouvez modifier le settings, inputs ou outputs à utiliser lors de l’exécution du travail de pipeline. Vous pouvez également modifier le experiment_name du travail déclenché.

La définition de planification suivante modifie les paramètres d’un travail existant.

$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

Utiliser des expressions prises en charge dans les planifications

Lorsque vous définissez une planification, vous pouvez utiliser les expressions macro suivantes pour définir des valeurs de paramètres dynamiques qui sont résolues en valeurs réelles pendant le runtime du travail.

Expression Description Propriétés prises en charge
${{name}} Nom du travail Chemin outputs du travail de pipeline
${{creation_context.trigger_time}} Heure de déclenchement du travail Type de chaîne inputs du travail de pipeline

Gérer la planification

Vous pouvez répertorier, afficher les détails, mettre à jour, désactiver, activer et supprimer des planifications dans un espace de travail.

Répertorier les planifications

az ml schedule list

Afficher les détails de la planification

az ml schedule show -n simple_cron_job_schedule

Créer une planification

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

Remarque

Pour mettre à jour plus que de simples balises et la description, envisagez d’utiliser az ml schedule create --file update_schedule.yml.

Désactiver une planification

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

Activer une planification

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

Supprimer une planification

Important

Vous devez d’abord désactiver une planification pour la supprimer. La suppression est permanente et irréversible.

az ml schedule delete -n simple_cron_job_schedule

Interroger des travaux déclenchés à partir d’une planification

Les travaux déclenchés par une planification spécifique présentent tous le nom d’affichage <schedule_name>-YYYYMMDDThhmmssZ. Par exemple, si une planification nommée named-schedule s’exécute toutes les 12 heures à compter du 1er janvier 2021, à 06:00, les noms d’affichage des travaux créés sont les suivants :

  • named-schedule-20210101T060000Z
  • named-schedule-20210101T180000Z
  • named-schedule-20210102T060000Z
  • nommé-schedule-20210102T180000Z, et ainsi de suite

Capture d'écran de l'onglet « Tâches » dans le studio Azure Machine Learning, avec filtrage par nom d'affichage du travail.

Vous pouvez également appliquer une requête JMESPath Azure CLI pour interroger les travaux déclenchés par un nom de planification.

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

Conseil

L’onglet Historique des travaux de la page des détails de la planification dans le studio fournit un moyen simple de rechercher tous les travaux déclenchés par une planification.


Prise en charge du contrôle d’accès en fonction du rôle (RBAC)

Étant donné que les planifications sont utilisées pour la production, il est important de réduire la possibilité et l’impact d’une opération incorrecte. Les administrateurs d’espace de travail peuvent restreindre l’accès à la création et à la gestion de la planification dans un espace de travail.

Les administrateurs peuvent configurer les règles d’action suivantes relatives aux planifications dans le portail Azure. Pour plus d’informations, consultez Gérer l’accès aux espaces de travail Azure Machine Learning.

Action Description Règle
Lire Obtenir et répertorier des planifications Microsoft.MachineLearningServices/workspaces/schedules/read
Write Créer, mettre à jour, désactiver et activer des planifications Microsoft.MachineLearningServices/workspaces/schedules/write
Supprimer Supprimer des planifications Microsoft.MachineLearningServices/workspaces/schedules/delete

Considérations relatives aux coûts

Les planifications sont facturées en fonction du nombre de planifications. Chaque planification crée une application logique qui héberge Azure Machine Learning au nom de l’utilisateur (HOBO).

L’application logique revient à l’abonnement Azure de l’utilisateur. Les coûts des ressources HOBO sont facturés à l’aide du même compteur émis par le fournisseur de ressources d’origine. Les frais apparaissent sous la ressource hôte, qui est l’espace de travail Azure Machine Learning.