Freigeben über


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, downloaddirect 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}}

Nächste Schritte