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
- Ein Azure-Abonnement. Falls Sie kein Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
- Ein Azure Machine Learning-Arbeitsbereich. Informationen zum Erstellen eines Arbeitsbereichs finden Sie unter Schnellstart: So erstellen Sie Arbeitsbereichsressourcen, die Sie für die ersten Schritte mit Azure Machine Learning benötigen.
- Grundlegendes zu Azure Machine Learning-Pipelines. Weitere Informationen finden Sie unter Beschreibung von Azure Machine Learning-Pipelines.
- Die Azure CLI und
ml
-Erweiterung, die anhand der Anweisungen unter Installieren und Einrichten der CLI (v2) installiert wurden - Kenntnisse im Erstellen von YAML-Pipelines in Azure Machine Learning. Weitere Informationen finden Sie unter Erstellen und Ausführen von Machine Learning-Pipelines mit Komponenten und der Azure Machine Learning CLI.
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
- undMONTHS
-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
odermonths
.interval
(erforderlich) ist die Anzahl der Zeiteinheiten zwischen Zeitplanserien.schedule
(optional) definiert das Serienmuster, dashours
,minutes
undweekdays
enthalten kann. Wird kein Wert angegeben, werden Aufträge gemäß der Logik vonstart_time
,frequency
undinterval
ausgelöst.- Handelt es sich bei
frequency
umday
, kann das Musterhours
undminutes
angeben. - Handelt es sich bei
frequency
umweek
odermonth
, kann das Musterhours
,minutes
undweekdays
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 vonmonday
bissunday
.
- Handelt es sich bei
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ürDAYS
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 bedeutetstart_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
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.