Planen Sie Pipeline-Jobs für maschinelles Lernen

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

In diesem Artikel erfahren Sie, wie Sie Machine Learning-Pipelines für die Ausführung in Azure planen. Sie können Routineaufgaben wie das erneute Trainieren von Modellen planen oder Batchvorhersagen basierend auf verstrichener Zeit regelmäßig aktualisieren.

In diesem Artikel erfahren Sie, wie Sie Zeitpläne mithilfe der Azure Machine Learning CLI, des Azure Machine Learning SDK v2 für Python oder der Benutzeroberfläche von Azure Machine Learning Studio erstellen, abrufen, aktualisieren und deaktivieren.

Tipp

Wenn Sie Aufträge über einen externen Orchestrator wie Azure Data Factory oder Microsoft Fabric planen möchten, sollten Sie Ihre Pipelineaufträge ggf. unter einem Batchendpunkt bereitstellen. Weitere Informationen finden Sie unter Bereitstellen vorhandener Pipelineaufträge für Batchendpunkte und Ausführen von Azure Machine Learning-Modellen in Fabric mithilfe von Batchendpunkten (Vorschau).

Voraussetzungen

Begrenzungen

  • Azure Machine Learning v2-Zeitpläne unterstützen keine ereignisbasierten Auslöser.
  • CLI- und SDK v2-Zeitpläne unterstützen die Angabe komplexer Serienmuster, die mehrere Auslöserzeitstempel enthalten. Die Studio-Benutzeroberfläche zeigt das komplexe Muster an, unterstützt jedoch keine Bearbeitung.
  • Die Studio-Benutzeroberfläche unterstützt nur v2-Zeitpläne und kann keine v1-Zeitpläne auflisten oder darauf zugreifen, die auf veröffentlichten Pipelines oder Pipelineendpunkten basieren. Sie können einen Zeitplan für eine nicht veröffentlichte Pipeline erstellen.
  • Wenn die Serie als 31. oder 30. Tag jedes Monats festgelegt ist, löst der Zeitplan keine Aufträge in Monaten aus, die weniger Tage haben.
  • DAYS- und MONTHS-Werte werden in Cron-Zeitplanausdrücken nicht unterstützt. Für diese Parameter angegebene Werte werden ignoriert und als * behandelt.

Erstellen eines Zeitplans

Wenn Sie über einen Pipelineauftrag mit zufriedenstellender Leistung und zufriedenstellenden Ausgaben verfügen, können Sie einen Zeitplan einrichten, um den Auftrag regelmäßig automatisch auszulösen. Dazu müssen Sie einen Zeitplan erstellen, der den Auftrag einem Auslöser zuordnet. Der Auslöser kann entweder ein recurrence-Muster oder ein cron-Ausdruck sein, das bzw. der das Intervall und die Häufigkeit angibt, mit dem der Auftrag ausgeführt werden soll.

In beiden Fällen müssen Sie zuerst einen Pipelineauftrag definieren, entweder inline oder durch Angabe eines vorhandenen Pipelineauftrags. Sie können Pipelines in YAML definieren und über die CLI ausführen, Pipelines inline in Python erstellen oder Pipelines in Azure Machine Learning Studio erstellen. Sie können Pipelineaufträge lokal oder aus vorhandenen Aufträgen im Arbeitsbereich erstellen.

Sie können v2-Zeitpläne für v2- oder v1-Pipelineaufträge mithilfe der Studio-Benutzeroberfläche, des SDK v2 oder der CLI v2 erstellen. Sie müssen vorhandene Pipelines nicht zuerst veröffentlichen, um Zeitpläne für Pipelineaufträge einzurichten.

Die Codebeispiele in diesem Artikel stammen aus Arbeiten mit Zeitplänen in Azure Machine Learning CLI 2.0.

Definieren eines zeitbasierten Zeitplans mit einem Serienmuster

Der folgende YAML-Code definiert eine Zeitplanserie für einen Pipelineauftrag. Der erforderliche type-Parameter gibt an, dass es sich beim trigger-Typ um recurrence handelt.

$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

Geben Sie die folgenden Zeitplanparameter an:

Parameter

  • frequency (erforderlich) ist die Zeiteinheit, auf deren Grundlage die Zeitpläne ausgelöst werden. Mögliche Werte: minutes, hours, days, weeks oder months.
  • interval (erforderlich) ist die Anzahl der Zeiteinheiten zwischen Zeitplanserien.
  • schedule (optional) definiert das Serienmuster, das hours, minutes und weekdays enthalten kann. Wird kein Wert angegeben, werden Aufträge gemäß der Logik von start_time, frequency und interval ausgelöst.
    • Handelt es sich bei frequency um day, kann das Muster hours und minutes angeben.
    • Handelt es sich bei frequency um week oder month, kann das Muster hours, minutes und weekdays angeben.
      • hours ist eine ganze Zahl oder eine Liste von 0 bis 23.
      • minutes ist eine ganze Zahl oder eine Liste von 0 bis 59.
      • weekdays ist eine Zeichenfolge oder eine Liste von monday bis sunday.
  • start_time (optional) ist das Startdatum und die Uhrzeit mit Zeitzone. Wird kein Wert angegeben, entspricht der Standard der Zeitplanerstellungszeit. Wenn die Startzeit in der Vergangenheit liegt, wird der erste Job zur nächsten berechneten Laufzeit ausgeführt.
  • end_time (optional) ist das Enddatum und die Uhrzeit mit Zeitzone. Wird kein Wert angegeben, bleibt der Zeitplan bis zur manuellen Deaktivierung aktiv.
  • time_zone (optional) gibt die Zeitzone des Serienzeitplans an. Wird kein Wert angegeben, wird standardmäßig koordinierte Weltzeit (UTC) verwendet. Weitere Informationen zu Zeitzonenwerten finden Sie im Anhang zu Zeitzonenwerten.

Nachdem Sie den Zeitplan-YAML-Code erstellt haben, erstellen Sie mit folgendem Befehl einen Zeitplan über die 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

Definieren eines zeitbasierten Zeitplans mit Cron-Ausdruck

Mit einem Cron-Ausdruck kann ein flexibleres und angepasstes Serienmuster angegeben werden. Ein standardmäßiger Crontab-Ausdruck besteht aus den durch Leerzeichen getrennten Feldern MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK. Der Platzhalter * steht für alle Werte für ein Feld.

In einem Cron-Ausdruck im Azure Machine Language-Zeitplan:

  • MINUTES ist eine ganze Zahl oder eine Liste von 0 bis 59.
  • HOURS ist eine ganze Zahl oder eine Liste von 0 bis 23.
  • DAYS-Werte werden nicht unterstützt und immer als * behandelt. Der Wert * für DAYS bedeutet also alle Tage eines Monats, was je nach Monat und Jahr variiert.
  • MONTHS-Werte werden nicht unterstützt und immer als * behandelt.
  • DAYS-OF-WEEK ist eine ganze Zahl oder eine Liste von 0 bis 6. Dabei steht 0 für Sonntag. Namen von Tagen werden ebenfalls akzeptiert.

Beispielsweise steht der Ausdruck 15 16 * * 1 für jeden Montag, 16:15 Uhr UTC. Weitere Informationen zur Verwendung von Crontab-Ausdrücken finden Sie im Wiki für Crontab-Ausdrücke auf GitHub.

Der folgende YAML-Code definiert eine Zeitplanserie für einen Pipelineauftrag. Der erforderliche type-Parameter gibt an, dass es sich beim trigger-Typ um cron handelt.

$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

Geben Sie die folgenden Zeitplanparameter an:

Parameter

  • expression (erforderlich) ist ein standardmäßiger Crontab-Ausdruck, der einen Serienzeitplan ausdrückt.
  • start_time (optional) ist das Startdatum und die Uhrzeit mit Zeitzone des Zeitplans. Beispielsweise bedeutet start_time: "2022-05-10T10:15:00-04:00", dass der Zeitplan am 10. Mai 2022 um 10:15:00 Uhr in der Zeitzone UTC-4 beginnt. Wird kein Wert angegeben, entspricht der Standard der Zeitplanerstellungszeit. Wenn die Startzeit in der Vergangenheit liegt, wird der erste Job zur nächsten berechneten Laufzeit ausgeführt.
  • end_time (optional) ist das Enddatum und die Uhrzeit mit Zeitzone. Wird kein Wert angegeben, bleibt der Zeitplan bis zur manuellen Deaktivierung aktiv.
  • time_zone (optional) gibt die Zeitzone des Serienzeitplans an. Wenn dieser Wert nicht angegeben wird, wird standardmäßig UTC verwendet.

Nachdem Sie den Zeitplan-YAML-Code erstellt haben, erstellen Sie mit folgendem Befehl einen Zeitplan über die 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

Ändern von Auftragseinstellungen beim Definieren von Zeitplänen

Manchmal sollen die durch Zeitpläne ausgelösten Aufträge andere Konfigurationen als die Testaufträge haben. Wenn Sie einen Zeitplan mit einem vorhandenen Auftrag definieren, können Sie die Auftragseinstellungen ändern. Mit diesem Ansatz können Sie mehrere Zeitpläne definieren, für die derselbe Auftrag mit unterschiedlichen Eingaben verwendet wird.

Wenn Sie einen Zeitplan definieren, können Sie settings, inputs oder outputs ändern, die beim Ausführen des Pipelineauftrags verwendet werden sollen. Sie können auch experiment_name des ausgelösten Auftrags ändern.

Durch die folgende Zeitplandefinition werden die Einstellungen eines vorhandenen Auftrags geändert.

$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

Verwenden von Ausdrücken, die in Zeitplänen unterstützt werden

Beim Definieren eines Zeitplans können Sie die folgenden Makroausdrücke verwenden, um dynamische Parameterwerte zu definieren, die während der Auftragslaufzeit in tatsächliche Werte aufgelöst werden.

Ausdruck BESCHREIBUNG Unterstützte Eigenschaften
${{name}} Name des Auftrags outputs-Pfad des Pipelineauftrags
${{creation_context.trigger_time}} Auslösezeit des Auftrags Zeichenfolgentyp inputs des Pipelineauftrags

Zeitplan verwalten

Sie können Zeitpläne in einem Arbeitsbereich auflisten, detailliert anzeigen, aktualisieren, deaktivieren, aktivieren und löschen.

Auflisten von Zeitplänen

az ml schedule list

Anzeigen von Zeitplandetails

az ml schedule show -n simple_cron_job_schedule

Aktualisieren Sie einen Zeitplan

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

Hinweis

Wenn nicht nur Tags und Beschreibungen aktualisiert werden sollen, sollten Sie az ml schedule create --file update_schedule.yml verwenden.

Deaktivieren eines Zeitplans

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

Aktivieren Sie einen Zeitplan

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

Löschen eines Zeitplans

Wichtig

Zum Löschen eines Zeitplans müssen Sie diesen zunächst deaktivieren. Die Löschung ist dauerhaft und kann nicht rückgängig gemacht werden.

az ml schedule delete -n simple_cron_job_schedule

Fragen Sie ausgelöste Jobs von einem Zeitplan ab

Aufträge, die von einem bestimmten Zeitplan ausgelöst werden, weisen den Anzeigenamen <schedule_name>-YYYYMMDDThhmmssZ auf. Wenn beispielsweise ein Zeitplan mit dem Namen named-schedule ab dem 1. Januar 2021 um 6 Uhr alle zwölf Stunden ausgeführt wird, lauten die Anzeigenamen der erstellten Aufträge wie folgt:

  • benannter Zeitplan 20210101T060000Z
  • benannter Zeitplan 20210101T180000Z
  • benannter Zeitplan 20210102T060000Z
  • named-schedule-20210102T180000Z und so weiter

Screenshot der Registerkarte Aufträge in Azure Machine Learning Studio, die nach Anzeigenamen des Auftrags gefiltert wird.

Sie können auch die JMESPath-Abfrage der Azure CLI anwenden, um die durch einen Zeitplannamen ausgelösten Aufträge abzufragen.

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

Tipp

Auf der Registerkarte Auftragsverlauf auf der Detailseite des Zeitplans in Studio können Aufträge, die durch einen Zeitplan ausgelöst wurden, einfach gefunden werden.


Unterstützung für rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC)

Da Zeitpläne für die Produktion verwendet werden, ist es wichtig, das Risiko und die Auswirkungen von Fehlfunktionen zu reduzieren. Arbeitsbereichsadministratoren können den Zugriff auf die Zeitplanerstellung und -verwaltung in einem Arbeitsbereich einschränken.

Administratoren können im Azure-Portal die folgenden Aktionsregeln für Zeitpläne konfigurieren. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf Azure Machine Learning-Arbeitsbereiche.

Aktion BESCHREIBUNG Regel
Lesen Sie Abrufen und Auflisten von Zeitplänen Microsoft.MachineLearningServices/workspaces/schedules/read
Schreiben Erstellen, Aktualisieren, Deaktivieren und Aktivieren von Zeitplänen Microsoft.MachineLearningServices/workspaces/schedules/write
Löschen Löschen von Zeitplänen Microsoft.MachineLearningServices/workspaces/schedules/delete

Kostenaspekte

Zeitpläne werden basierend auf der Anzahl der Zeitpläne in Rechnung gestellt. Jeder Zeitplan erstellt eine Logik-App, die von Azure Machine Learning im Auftrag des Benutzers gehostet wird (Host On Behalf Of, HOBO).

Die Logik-App wird über das Azure-Abonnement des Benutzers abgerechnet. Die Kosten für HOBO-Ressourcen werden mit derselben Verbrauchseinheit abgerechnet, die vom ursprünglichen Ressourcenanbieter ausgegeben wird. Die Gebühren werden unter der Hostressource angezeigt. Hierbei handelt es sich um den Azure Machine Learning-Arbeitsbereich.