Schema YAML del processo parallelo dell'interfaccia della riga di comando (v2)

SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

Importante

Il processo parallelo può essere usato solo come singolo passaggio all'interno di un processo della pipeline di Azure Machine Learning. Di conseguenza, al momento non esiste uno schema JSON di origine per il processo parallelo. Questo documento elenca le chiavi valide e i relativi valori durante la creazione di un processo parallelo in una pipeline.

Nota

La sintassi YAML descritta in dettaglio in questo documento si basa sullo schema JSON per la versione più recente dell'estensione dell'interfaccia della riga di comando di Machine Learning v2. Il funzionamento di questa sintassi è garantito solo con la versione più recente dell'estensione dell'interfaccia della riga di comando di Machine Learning v2. È possibile trovare gli schemi per le versioni di estensione precedenti in https://azuremlschemasprod.azureedge.net/.

Sintassi YAML

Chiave Type Descrizione Valori consentiti Default value
type const Obbligatorio. Tipo di processo. parallel
inputs oggetto Dizionario di input per il processo parallelo. La chiave è un nome per l'input nel contesto del processo e il valore è il valore di input.

È possibile fare riferimento agli input nell'oggetto program_arguments usando l'espressione ${{ inputs.<input_name> }} .

È possibile fare riferimento agli input di processo paralleli tramite input della pipeline usando l'espressione ${{ parent.inputs.<input_name> }} . Per informazioni su come associare gli input di un passaggio parallelo agli input della pipeline, vedere la sintassi dell'espressione per l'associazione di input e output tra i passaggi di un processo della pipeline.
inputs.<input_name> number, integer, boolean, string or object Uno dei valori letterali (di tipo number, integer, boolean o string) o un oggetto contenente una specifica dei dati di input del processo.
outputs oggetto Dizionario delle configurazioni di output del processo parallelo. La chiave è un nome per l'output nel contesto del processo e il valore è la configurazione di output.

È possibile fare riferimento agli output paralleli dei processi tramite l'espressione ${{ parents.outputs.<output_name> }} . Per informazioni su come associare gli output di un passaggio parallelo agli output della pipeline, vedere la sintassi dell'espressione per l'associazione di input e output tra i passaggi di un processo della pipeline.
outputs.<output_name> oggetto È possibile lasciare vuoto l'oggetto, nel qual caso per impostazione predefinita l'output sarà di tipo uri_folder e Azure Machine Learning genererà un percorso di output per l'output in base al percorso templatizzato seguente: {settings.datastore}/azureml/{job-name}/{output-name}/. I file nella directory di output verranno scritti tramite montaggio in lettura/scrittura. Se si vuole specificare una modalità diversa per l'output, specificare un oggetto contenente la specifica dell'output del processo.
compute string Nome della destinazione di calcolo in cui eseguire il processo. Il valore può essere un riferimento a un calcolo esistente nell'area di lavoro (usando la sintassi) o local per designare l'esecuzione azureml:<compute_name> locale.

Quando si usa il processo parallelo nella pipeline, è possibile lasciare vuota questa impostazione, nel qual caso il calcolo verrà selezionato automaticamente dalla default_compute pipeline.
local
task oggetto Obbligatorio. Modello per la definizione delle attività distribuite per il processo parallelo. Vedere Attributi della task chiave.
input_data oggetto Obbligatorio. Definire quali dati di input verranno suddivisi in mini batch per eseguire il processo parallelo. Applicabile solo per fare riferimento a uno dei processi paralleli inputs usando l'espressione ${{ inputs.<input_name> }}
mini_batch_size string Definire le dimensioni di ogni mini batch per suddividere l'input.

Se il input_data è una cartella o un set di file, questo numero definisce il numero di file per ogni mini batch. Ad esempio, 10, 100.
Se il input_data è un dato tabulare di mltable, questo numero definisce le dimensioni fisiche prossime per ogni mini batch. Ad esempio, 100 kb, 100 mb.
1
partition_keys list Chiavi usate per partizionare il set di dati in mini batch.

Se specificato, i dati con la stessa chiave verranno partizionati nello stesso mini batch. Se vengono specificati e partition_keys mini_batch_size , le chiavi di partizione avranno effetto.
mini_batch_error_threshold integer Definisce il numero di mini batch non riusciti che potrebbero essere ignorati in questo processo in parallelo. Se il numero di mini batch non riusciti è superiore a questa soglia, il processo in parallelo verrà contrassegnato come non riuscito.

Il mini batch viene contrassegnato come non riuscito se:
- Il numero di elementi restituiti da run() è inferiore al numero di input di mini batch.
- Vengono intercettate eccezioni nel codice run() personalizzato.

"-1" è il numero predefinito e indica che tutti i mini batch non riusciti durante il processo in parallelo verranno ignorati.
[-1, int.max] -1
logging_level string Definisce il livello di log di cui verrà eseguito il dump nei file di log utente. INFO, AVVISO, DEBUG INFO
resources.instance_count integer Numero di nodi da usare per il processo. 1
max_concurrency_per_instance integer Definire il numero di processi in ogni nodo di calcolo.

Per una risorsa di calcolo di GPU, il valore predefinito è 1.
Per una risorsa di calcolo della CPU, il valore predefinito è il numero di core.
retry_settings.max_retries integer Definisce il numero di tentativi quando il mini batch ha esito negativo o si verifica il timeout. Se tutti i tentativi non sono riusciti, il mini batch verrà contrassegnato come non riuscito per il calcolo mini_batch_error_threshold. 2
retry_settings.timeout integer Definisce il timeout in secondi per l'esecuzione di una funzione run() personalizzata. Se il tempo di esecuzione è superiore a questa soglia, il mini batch verrà interrotto e contrassegnato come mini batch non riuscito per attivare nuovi tentativi. (0, 259200] 60
environment_variables oggetto Dizionario delle coppie chiave-valore della variabile di ambiente da impostare nel processo in cui viene eseguito il comando.

Attributi della task chiave

Chiave Type Descrizione Valori consentiti Default value
type const Obbligatorio. Tipo di attività. Applicabile solo per run_function adesso.

In run_function modalità è necessario specificare code, entry_scripte program_arguments per definire lo script Python con funzioni eseguibili e argomenti. Nota: il processo parallelo supporta solo lo script Python in questa modalità.
run_function run_function
code string Percorso locale della directory del codice sorgente da caricare e usare per il processo.
entry_script string File Python che contiene l'implementazione di funzioni parallele predefinite. Per altre informazioni, vedere Preparare lo script di immissione al processo parallelo.
environment stringa o oggetto Obbligatorio L'ambiente da usare per l'esecuzione dell'attività. Il valore può essere un riferimento a un ambiente con controllo delle versioni esistente nell'area di lavoro o a una specifica dell'ambiente inline.

Per fare riferimento a un ambiente esistente, usare la azureml:<environment_name>:<environment_version> sintassi o azureml:<environment_name>@latest per fare riferimento alla versione più recente di un ambiente.

Per definire un ambiente inline, seguire lo schema Environment. Escludere le name proprietà e version perché non sono supportate per gli ambienti inline.
program_arguments string Argomenti da passare allo script di immissione. Può contenere "--arg_name<> ${{inputs.<>riferimento intput_name}}" agli input o agli output.

Il processo parallelo fornisce un elenco di argomenti predefiniti per impostare la configurazione dell'esecuzione parallela. Per altre informazioni, vedere argomenti predefiniti per il processo parallelo.
append_row_to string Aggrega tutti i valori restituiti da ogni esecuzione di mini batch e li restituisce come output in questo file. Può fare riferimento a uno degli output del processo in parallelo usando l'espressione ${{outputs.<output_name>}}

Input del processo

Chiave Type Descrizione Valori consentiti Valore predefinito
type string Tipo di input del processo. Specificare mltable per i dati di input che puntano a un percorso in cui è presente il meta file mltable o uri_folder per i dati di input che puntano a un'origine cartella. mltable, uri_folder uri_folder
path string Percorso dei dati da usare come input. Il valore può essere specificato in alcuni modi:

- Percorso locale del file o della cartella dell'origine dati, path: ./iris.csvad esempio . I dati verranno caricati durante l'invio del processo.

- URI di un percorso cloud del file o della cartella da usare come input. I tipi URI supportati sono azureml, https, wasbs, abfss, adl. Per altre informazioni, vedere sintassi yaml di base su come usare il azureml:// formato URI.

: asset di dati di Azure Machine Learning registrato esistente da usare come input. Per fare riferimento a un asset di dati registrato, usare la azureml:<data_name>:<data_version> sintassi o azureml:<data_name>@latest (per fare riferimento alla versione più recente di tale asset di dati), ad esempio path: azureml:cifar10-data:1 o path: azureml:cifar10-data@latest.
mode string Modalità di distribuzione dei dati alla destinazione di calcolo.

Per il montaggio di sola lettura (ro_mount), i dati verranno utilizzati come percorso di montaggio. Una cartella verrà montata come cartella e un file verrà montato come file. Azure Machine Learning risolverà l'input nel percorso di montaggio.

Per download la modalità i dati verranno scaricati nella destinazione di calcolo. Azure Machine Learning risolverà l'input nel percorso scaricato.

Se si vuole solo l'URL della posizione di archiviazione degli artefatti dati anziché montare o scaricare i dati stessi, è possibile usare la direct modalità . Passerà l'URL della posizione di archiviazione come input del processo. In questo caso, si è completamente responsabili della gestione delle credenziali per accedere all'archiviazione.
ro_mount, download, direct ro_mount

Output del processo

Chiave Type Descrizione Valori consentiti Valore predefinito
type string Tipo di output del processo. Per il tipo predefinito uri_folder , l'output corrisponderà a una cartella. uri_folder uri_folder
mode string Modalità di consegna dei file di output alla risorsa di archiviazione di destinazione. Per la modalità di montaggio in lettura/scrittura (rw_mount) la directory di output sarà una directory montata. Per la modalità di caricamento, i file scritti verranno caricati alla fine del processo. rw_mount, upload rw_mount

Argomenti predefiniti per il processo parallelo

Chiave Descrizione Valori consentiti Default value
--error_threshold Soglia di elementi non riusciti. Gli elementi non riusciti vengono conteggiati in base al divario numerico tra gli input e gli elementi restituiti da ogni mini batch. Se la somma degli elementi non riusciti è superiore a questa soglia, il processo in parallelo verrà contrassegnato come non riuscito.

Nota: "-1" è il numero predefinito e indica che tutti gli errori durante il processo in parallelo verranno ignorati.
[-1, int.max] -1
--allowed_failed_percent Simile a mini_batch_error_threshold, ma usa la percentuale di mini batch non riusciti anziché il conteggio. [0, 100] 100
--task_overhead_timeout Timeout in secondi per l'inizializzazione di ogni mini batch. Ad esempio, caricaremento dei dati del mini batch e passaggio alla funzione run(). (0, 259200] 30
--progress_update_timeout Timeout in secondi per il monitoraggio dello stato di avanzamento dell'esecuzione di mini batch. Se non vengono ricevuti aggiornamenti dello stato entro questa impostazione di timeout, il processo in parallelo verrà contrassegnato come non riuscito. (0, 259200] Calcolato dinamicamente da altre impostazioni.
--first_task_creation_timeout Timeout in secondi per il monitoraggio del tempo tra l'avvio del processo e l'esecuzione del primo mini batch. (0, 259200] 600
--copy_logs_to_parent Opzione booleana per specificare se copiare lo stato del processo, la panoramica e i log nel processo della pipeline padre. Vero, falso Falso
--metrics_name_prefix Specificare il prefisso personalizzato delle metriche in questo processo parallelo.
--push_metrics_to_parent Opzione booleana per specificare se eseguire il push delle metriche nel processo della pipeline padre. Vero, falso Falso
--resource_monitor_interval Intervallo di tempo in secondi per eseguire il dump dell'utilizzo delle risorse del nodo (ad esempio CPU, memoria) nella cartella di log nel percorso "logs/sys/perf".

Nota: i log delle risorse di dump frequenti rallentano leggermente la velocità di esecuzione del mini batch. Impostare questo valore su "0" per interrompere il dump dell'utilizzo delle risorse.
[0, int.max] 600

Osservazioni:

I az ml job comandi possono essere usati per la gestione dei processi di Azure Machine Learning.

Esempi

Gli esempi sono disponibili nel repository GitHub di esempi. Di seguito sono riportati alcuni esempi.

YAML: uso di processi paralleli nella 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}}

Passaggi successivi