YAML-Schema für einen CLI-Parallelauftrag (v2)
GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)
Wichtig
Der Parallelauftrag kann nur als einzelner Schritt innerhalb eines Azure Machine Learning-Pipelineauftrags verwendet werden. Daher gibt es zu diesem Zeitpunkt kein Quell-JSON-Schema für einen Parallelauftrag. Dieses Dokument enthält die gültigen Schlüssel und deren Werte beim Erstellen eines Parallelauftrags in einer Pipeline.
Hinweis
Die in diesem Dokument beschriebene YAML-Syntax basiert auf dem JSON-Schema für die neueste Version der ML CLI v2-Erweiterung. Die Funktion dieser Syntax wird nur mit der neuesten Version der ML CLI v2-Erweiterung garantiert. Die Schemas für ältere Erweiterungsversionen finden Sie unter https://azuremlschemasprod.azureedge.net/.
YAML-Syntax
Schlüssel | type | BESCHREIBUNG | Zulässige Werte | Standardwert |
---|---|---|---|---|
type |
const | Erforderlich. Typ des Auftrags. | parallel |
|
inputs |
Objekt | Das Wörterbuch der Eingaben für den Parallelauftrag. Der Schlüssel ist ein Name für die Eingabe im Kontext des Auftrags, und der Wert ist der Eingabewert. Eingaben können im program_arguments mit dem Ausdruck ${{ inputs.<input_name> }} verwiesen werden. Parallelauftragseingaben können mithilfe des Ausdrucks ${{ parent.inputs.<input_name> }} durch Pipelineeingaben verwiesen werden. Informationen zum Binden der Eingaben eines parallelen Schritts an die Pipelineeingaben finden Sie unter Ausdruckssyntax zum Binden von Eingaben und Ausgaben zwischen Schritten in einem Pipelineauftrag. |
||
inputs.<input_name> |
number, integer, boolean, string oder object | Ein Literalwert (vom Typ Zahl, Integer, boolescher Wert oder Zeichenfolge) oder ein Objekt, das eine Datenspezifikation für Auftragseingaben enthält. | ||
outputs |
Objekt (object) | Das Wörterbuch der Ausgabekonfigurationen des Parallelauftrags. Der Schlüssel ist de Name für die Ausgabe im Kontext des Auftrags, und der Wert ist die Ausgabekonfiguration. Parallelauftragsausgaben können mithilfe des Ausdrucks ${{ parents.outputs.<output_name> }} durch Pipelineausgaben verwiesen werden. Informationen zum Binden der Ausgaben eines parallelen Schritts an die Pipelineausgaben finden Sie unter Ausdruckssyntax zum Binden von Eingaben und Ausgaben zwischen Schritten in einem Pipelineauftrag. |
||
outputs.<output_name> |
Objekt (object) | Sie können das Objekt leer lassen. In diesem Fall ist die Ausgabe vom Typ uri_folder , und Azure Machine Learning generiert einen Ausgabespeicherort für die Ausgabe basierend auf dem folgenden Vorlagenpfad: {settings.datastore}/azureml/{job-name}/{output-name}/ . Die Dateien im Ausgabeverzeichnis wird über die Einbindung mit Lese-/Schreibzugriff geschrieben. Wenn Sie einen anderen Modus für die Ausgabe angeben möchten, stellen Sie ein Objekt bereit, das die Auftragsausgabespezifikation enthält. |
||
compute |
Zeichenfolge | Name des Computeziels, auf dem der Auftrag ausgeführt werden soll. Dieser Wert kann entweder ein Verweis auf ein vorhandenes Compute im Arbeitsbereich (mithilfe der Syntax azureml:<compute_name> ) oder local zum Festlegen der lokalen Ausführung sein. Wenn Sie den Parallelauftrag in der Pipeline verwenden, können Sie diese Einstellung leer lassen, in diesem Fall wird die Berechnung durch die default_compute der Pipeline automatisch ausgewählt. |
local |
|
task |
Objekt (object) | Erforderlich. Die Vorlage zum Definieren der verteilten Aufgaben für den Parallelauftrag. Siehe Attribute des task -Schlüssels. |
||
input_data |
Objekt (object) | Erforderlich. Legen Sie fest, welche Eingabedaten in Mini-Batches aufgeteilt werden, um den Parallelauftrag auszuführen. Gilt nur zum Verweisen auf einen der Parallelaufträge inputs mithilfe des Ausdrucks ${{ inputs.<input_name> }} |
||
mini_batch_size |
Zeichenfolge | Legen Sie die Größe der einzelnen Mini-Batches fest, um die Eingabe aufzuteilen. Wenn input_data ein Ordner oder eine Reihe von Dateien ist, bestimmt diese Zahl die Anzahl der Dateien für jeden Mini-Batch. Beispiel: 10, 100. Wenn es sich bei input_data um Tabellendaten aus mltable handelt, bestimmt diese Zahl die ungefähre physische Größe der einzelnen Mini-Batches. Beispiel: 100 KB, 100 MB. |
1 | |
partition_keys |
list | Die Schlüssel, die zum Partitionieren von Datasets in Minibatches verwendet werden. Bei einer Angabe werden die Daten mit demselben Schlüssel in den gleichen Minibatch partitioniert. Wenn beide partition_keys und mini_batch_size angegeben werden, werden die Partitionsschlüssel wirksam. |
||
mini_batch_error_threshold |
integer | Definieren Sie die Anzahl der fehlerhaften Minibatches, die in diesem Parallelauftrag ignoriert werden könnten. Wenn die Anzahl der fehlerhaften Minibatches über diesem Schwellenwert liegt, wird der Parallelauftrag als fehlerhaft markiert. Der Minibatch wird in folgender Situation als fehlerhaft markiert: - Die Anzahl der Rückgaben von „run()“ ist kleiner als die Anzahl der Minibatcheingaben. - Es werden Ausnahmen im benutzerdefinierten run()-Code abgefangen. „-1“ ist der Standardwert, der bedeutet, dass alle fehlerhaften Minibatches bei Parallelaufträgen ignoriert werden. |
[-1, int.max] | -1 |
logging_level |
Zeichenfolge | Definieren Sie, welcher Protokolliergrad in den Benutzerprotokolldateien abgelegt werden soll. | INFO, WARNING, DEBUG | INFO |
resources.instance_count |
integer | Die Anzahl von Knoten, die für den Auftrag verwendet werden sollen. | 1 | |
max_concurrency_per_instance |
integer | Definieren Sie die Anzahl der Prozesse auf jedem Compute-Knoten. Für eine GPU-Compute-Instanz ist der Standardwert 1. Bei einer CPU-Compute-Instanz ist der Standardwert die Anzahl der Kerne. |
||
retry_settings.max_retries |
integer | Definieren Sie die Anzahl der Wiederholungsversuche, wenn ein Minibatch fehlerhaft ist oder ein Timeout auftritt. Wenn alle Wiederholungsversuche fehlerhaft sind, wird der Minibatch als fehlerhaft markiert und mit der mini_batch_error_threshold -Berechnung gezählt. |
2 | |
retry_settings.timeout |
integer | Definieren Sie den Timeout in Sekunden für die Ausführung der benutzerdefinierten run()-Funktion. Wenn die Ausführungszeit diesen Schwellenwert überschreitet, wird der Minibatch abgebrochen und als fehlerhafter Minibatch markiert, um eine Wiederholung auszulösen. | [0, 259200] | 60 |
environment_variables |
Objekt (object) | Wörterbuch der Name-Wert-Paare von Umgebungsvariablen, die für den Prozess festgelegt werden sollen, in dem der Befehl ausgeführt wird. |
Attribute des task
-Schlüssels
Schlüssel | type | BESCHREIBUNG | Zulässige Werte | Standardwert |
---|---|---|---|---|
type |
const | Erforderlich. Der Typ der Aufgabe. Gilt bisher nur für run_function .Im Modus run_function müssen Sie code , entry_script und program_arguments angeben, um das Python-Skript mit ausführbaren Funktionen und Argumenten zu definieren. Hinweis: Für „Parallelauftrag“ wird in diesem Modus nur „Python-Skript“ unterstützt. |
run_function | run_function |
code |
Zeichenfolge | Lokaler Pfad zum Quellcodeverzeichnis, das hochgeladen und für den Auftrag verwendet werden soll. | ||
entry_script |
Zeichenfolge | Die Python-Datei, die die Implementierung der vordefinierten parallelen Funktionen enthält. Weitere Informationen finden Sie unter Vorbereiten des Einstiegsskripts auf Parallelauftrag. | ||
environment |
Zeichenfolge oder Objekt | Erforderlich Die Umgebung, die für die Ausführung der Aufgabe verwendet werden soll. Der Wert kann entweder ein Verweis auf eine vorhandene versionierte Umgebung im Arbeitsbereich oder eine Inline-Umgebungsspezifikation sein. Um auf eine vorhandene Umgebung zu verweisen, verwenden Sie die Syntax azureml:<environment_name>:<environment_version> oder azureml:<environment_name>@latest (um auf die neueste Version einer Umgebung zu verweisen). Um eine Inline-Umgebung zu definieren, folgen Sie dem Umgebungsschema. Schließen Sie die Eigenschaften name und version aus, da sie für Inline-Umgebungen nicht unterstützt werden. |
||
program_arguments |
Zeichenfolge | Die Argumente, die an den Einstiegsskript übergeben werden. Kann den Verweis „--<arg_name> ${{inputs.<intput_name>}}“ auf Eingaben oder Ausgaben enthalten. Der Parallelauftrag stellt eine Liste vordefinierter Argumente bereit, um die Konfiguration der parallelen Ausführung festzulegen. Weitere Informationen finden Sie unter vordefinierte Argumente für den Parallelauftrag. |
||
append_row_to |
Zeichenfolge | Aggregieren Sie alle Rückgaben aus jedem ausgeführten Minibatch, und geben Sie sie in dieser Datei aus. Kann mithilfe des Ausdrucks ${{outputs.<output_name>}} auf eine der Ausgaben eines Parallelauftrags verweisen |
Auftragseingaben
Schlüssel | type | BESCHREIBUNG | Zulässige Werte | Standardwert |
---|---|---|---|---|
type |
Zeichenfolge | Der Typ der Auftragseingabe. Geben Sie mltable für Eingabedaten an, die auf einen Speicherort verweisen, an dem sich die mltable-Metadatei befindet, oder uri_folder für Eingabedaten, die auf eine Ordnerquelle verweisen. |
mltable , uri_folder |
uri_folder |
path |
Zeichenfolge | Der Pfad zu den Daten, die als Eingabe verwendet werden sollen. Der Wert kann auf verschiedene Arten angegeben werden: - Ein lokaler Pfad zur Datenquellendatei oder zum Datenquellenordner, z.B. path: ./iris.csv . Die Daten werden während der Auftragsübermittlung hochgeladen. - Ein URI eines Cloudpfads zur Datei oder zum Ordner, die bzw. der als Eingabe verwendet werden soll. Unterstützte URI-Typen sind azureml , https , wasbs , abfss und adl . Weitere Informationen zur Verwendung des azureml:// -URI-Formats finden Sie unter YAML-Kernsyntax. – Ein vorhandenes registriertes Azure Machine Learning-Datenobjekt, das als Eingabe verwendet werden soll. Um auf eine registriertes Datenressource zu verweisen, verwenden Sie die Syntax azureml:<data_name>:<data_version> oder azureml:<data_name>@latest (um auf die neueste Version dieser Datenressource zu verweisen), z.B. path: azureml:cifar10-data:1 oder path: azureml:cifar10-data@latest . |
||
mode |
Zeichenfolge | Modus, in dem die Daten an das Computeziel übermittelt werden sollen. Bei einer schreibgeschützten Einbindung ( ro_mount ) werden die Daten als Einbindungspfad verwendet. Ein Ordner wird als Ordner eingebunden, und eine Datei wird als Datei eingebunden. Azure Machine Learning löst die Eingabe in den Bereitstellungspfad auf. Für den Modus download werden die Daten auf das Computeziel heruntergeladen. Azure Machine Learning löst die Eingabe in den Downloadpfad auf. Wenn Sie nur die URL des Speicherorts der Datenartefakte angeben möchten, anstatt die Daten selbst einzubinden oder herunterzuladen, können Sie den Modus direct verwenden. Die URL des Speicherorts wird als Auftragseingabe übergeben. In diesem Fall sind Sie vollständig für die Handhabung der Anmeldeinformationen für den Zugriff auf den Speicher verantwortlich. |
ro_mount , download direct |
ro_mount |
Auftragsausgaben
Schlüssel | type | BESCHREIBUNG | Zulässige Werte | Standardwert |
---|---|---|---|---|
type |
Zeichenfolge | Der Typ der Auftragsausgabe. Für den Standardtyp uri_folder entspricht die Ausgabe einem Ordner. |
uri_folder |
uri_folder |
mode |
Zeichenfolge | Modus, wie Ausgabedateien an den Zielspeicher übermittelt werden. Für den Einbindungsmodus mit Lese-/Schreibzugriff (rw_mount ) ist das Ausgabeverzeichnis ein eingebundenes Verzeichnis. Im Uploadmodus werden die geschriebenen Dateien am Ende des Auftrags hochgeladen. |
rw_mount , upload |
rw_mount |
Vordefinierte Argumente für Parallelauftrag
Schlüssel | BESCHREIBUNG | Zulässige Werte | Standardwert |
---|---|---|---|
--error_threshold |
Der Schwellenwert für fehlerhafte Elemente. Die fehlerhaften Elemente werden nach der Anzahl der Lücken zwischen den Eingaben und den Rückgaben der einzelnen Minibatches gezählt. Wenn die Summe der fehlerhaften Elemente über diesem Schwellenwert liegt, wird der Parallelauftrag als fehlerhaft markiert. Hinweis: „-1“ ist der Standardwert, der bedeutet, dass alle Fehler bei Parallelaufträgen ignoriert werden. |
[-1, int.max] | -1 |
--allowed_failed_percent |
Ähnlich wie mini_batch_error_threshold , verwendet jedoch den Prozentsatz der fehlerhaften Minibatches anstelle der Anzahl. |
[0, 100] | 100 |
--task_overhead_timeout |
Der Timeout in Sekunden für die Initialisierung jedes Minibatches. Beispielsweise das Laden von Minibatchdaten und deren Übergabe an die Funktion „run()“. | [0, 259200] | 30 |
--progress_update_timeout |
Der Timeout in Sekunden für die Überwachung des Status der Minibatchausführung. Wenn innerhalb dieser Timeouteinstellung kein Statusupdate empfangen wird, wird der Parallelauftrag als fehlerhaft markiert. | [0, 259200] | Dynamisch berechnet durch andere Einstellungen. |
--first_task_creation_timeout |
Der Timeout in Sekunden zur Überwachung der Zeit zwischen dem Start des Auftrags und dem Ausführen des ersten Minibatch. | [0, 259200] | 600 |
--copy_logs_to_parent |
Boolesche Option, ob der Auftragsstatus, die Übersicht und die Protokolle in den übergeordneten Pipelineauftrag kopiert werden sollen. | True, False | Falsch |
--metrics_name_prefix |
Stellen Sie das benutzerdefinierte Präfix Ihrer Metriken in diesem Parallelauftrag bereit. | ||
--push_metrics_to_parent |
Boolesche Option, ob Push-Metriken an den übergeordneten Pipelineauftrag übertragen werden. | True, False | Falsch |
--resource_monitor_interval |
Das Zeitintervall in Sekunden für die Ablage der Nutzung von Knotenressourcen (z. B. CPU, Arbeitsspeicher) im Protokollordner unter dem Pfad „logs/sys/perf“. Hinweis: Häufiges Ablegen von Ressourcenprotokollen wird die Ausführungsgeschwindigkeit Ihres Minibatches etwas verlangsamen. Legen Sie diesen Wert auf „0“ fest, um das Ablegen der Ressourcennutzung zu beenden. |
[0, int.max] | 600 |
Hinweise
Mit den Befehlen az ml job
können Sie Azure Machine Learning-Aufträge verwalten.
Beispiele
Beispiele finden Sie im GitHub-Beispielrepository. Im Folgenden sind mehrere aufgeführt.
YAML: Verwenden des Parallelauftrags in der Pipeline
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: iris-batch-prediction-using-parallel
description: The hello world pipeline job with inline parallel job
tags:
tag: tagvalue
owner: sdkteam
settings:
default_compute: azureml:cpu-cluster
jobs:
batch_prediction:
type: parallel
compute: azureml:cpu-cluster
inputs:
input_data:
type: mltable
path: ./neural-iris-mltable
mode: direct
score_model:
type: uri_folder
path: ./iris-model
mode: download
outputs:
job_output_file:
type: uri_file
mode: rw_mount
input_data: ${{inputs.input_data}}
mini_batch_size: "10kb"
resources:
instance_count: 2
max_concurrency_per_instance: 2
logging_level: "DEBUG"
mini_batch_error_threshold: 5
retry_settings:
max_retries: 2
timeout: 60
task:
type: run_function
code: "./script"
entry_script: iris_prediction.py
environment:
name: "prs-env"
version: 1
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
conda_file: ./environment/environment_parallel.yml
program_arguments: >-
--model ${{inputs.score_model}}
--error_threshold 5
--allowed_failed_percent 30
--task_overhead_timeout 1200
--progress_update_timeout 600
--first_task_creation_timeout 600
--copy_logs_to_parent True
--resource_monitor_interva 20
append_row_to: ${{outputs.job_output_file}}