Compartir vía


Esquema YAML del trabajo paralelo de la CLI (v2)

SE APLICA A: Extensión de ML de la CLI de Azure v2 (actual)

Importante

El trabajo paralelo solo se puede usar como un solo paso dentro de un trabajo de canalización de Azure Machine Learning. Por lo tanto, no hay ningún esquema JSON de origen para el trabajo paralelo en este momento. En este documento se enumeran las claves válidas y sus valores al crear un trabajo paralelo en una canalización.

Nota

La sintaxis de YAML que se detalla en este documento se basa en el esquema JSON de la versión más reciente de la extensión ML de la CLI v2. Se garantiza que esta sintaxis solo funciona con la versión más reciente de la extensión ML de la CLI v2. Dispone de los esquemas de las versiones de anteriores de la extensión en https://azuremlschemasprod.azureedge.net/.

Sintaxis de YAML

Clave Tipo Descripción Valores permitidos Valor predeterminado
type const Necesario. Tipo de trabajo. parallel
inputs object Diccionario de entradas al trabajo paralelo. La clave es un nombre para la entrada dentro del contexto del trabajo y el valor es el valor de entrada.

Se puede hacer referencia a las entradas en program_arguments mediante la expresión ${{ inputs.<input_name> }}.

Las entradas de trabajo paralelas se pueden hacer referencia mediante entradas de canalización mediante la expresión ${{ parent.inputs.<input_name> }}. Para saber cómo vincular las entradas de un paso paralelo a las entradas de la canalización, consulte la Sintaxis de expresiones para vincular las entradas y salidas entre los pasos de un trabajo de canalización.
inputs.<input_name> number, integer, boolean, string u object Uno de un valor literal (de tipo número, entero, booleano o cadena) o un objeto que contiene una especificación de datos de entrada de trabajo.
outputs object Diccionario de configuraciones de salida del trabajo paralelo. La clave es un nombre para la salida dentro del contexto del trabajo y el valor es la configuración de salida.

Las salidas de los trabajos paralelos pueden ser referenciadas por las salidas de la canalización mediante la expresión ${{ parents.outputs.<output_name> }}. Para saber cómo vincular las salidas de un paso paralelo a las salidas de la canalización, consulte la Sintaxis de expresiones para vincular las entradas y salidas entre los pasos de un trabajo de canalización.
outputs.<output_name> object Puede dejar el objeto vacío, en cuyo caso de forma predeterminada la salida será de tipo uri_folder y Azure Machine Learning generará una ubicación de salida para la salida basándose en la siguiente ruta de acceso con plantilla: {settings.datastore}/azureml/{job-name}/{output-name}/. Los archivos en el directorio de salida se escribirán a través del montaje de lectura y escritura. Si desea especificar un modo diferente de salida, proporcione un objeto que contenga la especificación de salida del trabajo.
compute string Nombre del destino de proceso en el que se ejecutará el trabajo. El valor puede ser una referencia a un cálculo existente en el área de trabajo (utilizando la sintaxis azureml:<compute_name>) o local para designar la ejecución local.

Al usar el trabajo paralelo en la canalización, puede dejar esta configuración vacía, en cuyo caso el proceso se seleccionará automáticamente mediante default_compute de la canalización.
local
task object Necesario. Plantilla para definir las tareas distribuidas para el trabajo paralelo. Consulte Atributos de la clave task.
input_data object Necesario. Defina qué datos de entrada se dividirán en mini lotes para ejecutar el trabajo paralelo. Solo se aplica para hacer referencia a uno de los trabajos paralelosinputs mediante la expresión ${{ inputs.<input_name> }}.
mini_batch_size string Defina el tamaño de cada minilote para dividir la entrada.

Si el input_data es una carpeta o un conjunto de archivos, este número define el recuento de archivos para cada minilote. Por ejemplo: 10, 100.
Si el input_data es un dato tabular de mltable, este número define el tamaño físico de proxy para cada minilote. Por ejemplo, 100 kb, 100 mb.
1
partition_keys list Claves usadas para particionar el conjunto de datos en minilotes.

Si se especifica, los datos con la misma clave se dividirán en el mismo minilote. Si se especifican y partition_keys mini_batch_size , las claves de partición surtirán efecto.
mini_batch_error_threshold integer Defina el número de mini lotes con errores que se podrían omitir en este trabajo paralelo. Si el recuento de minilotes con errores es mayor que este umbral, el trabajo paralelo se marcará como erróneo.

El minilote se marca como erróneo si:
: el recuento de devolución de run() es menor que el número de entradas de mini lotes.
: detecta excepciones en código run() personalizado.

"-1" es el número predeterminado, que significa ignorar todos los minilotes fallidos durante el trabajo paralelo.
[-1, int.max] -1
logging_level string Defina qué nivel de registros se volcarán en los archivos de registro de usuario. INFO, ADVERTENCIA, DEPURAR INFO
resources.instance_count integer El número de nodos que se usarán para el trabajo. 1
max_concurrency_per_instance integer Defina el número de procesos en cada nodo de proceso.

En el caso de una máquina de GPU, el valor predeterminado es 1.
Para un proceso de CPU, el valor predeterminado es el número de núcleos.
retry_settings.max_retries integer Defina el número de reintentos cuando se produce un error en el minilote o se ha agotado el tiempo de espera. Si se producen errores en todos los reintentos, el minilote se marcará como no se pudo contar por cálculo mini_batch_error_threshold. 2
retry_settings.timeout integer Defina el tiempo de espera en segundos para ejecutar la función run() personalizada. Si el tiempo de ejecución es mayor que este umbral, se anulará el minilote y se marcará como un minilote erróneo para desencadenar el reintento. (0, 259200] 60
environment_variables object Diccionario de pares de clave-valor de variables de entorno que se establecerán en el proceso donde se ejecuta el comando.

Atributos de la clave task

Clave Tipo Descripción Valores permitidos Valor predeterminado
type const Necesario. Tipo de tarea. Solo aplicable para run_function por ahora.

En el modo run_function, es necesario proporcionar code, entry_scripty program_arguments para definir el script de Python con funciones y argumentos ejecutables. Nota: El trabajo paralelo solo admite el script de Python en este modo.
run_function run_function
code string Ruta de acceso local al directorio de código fuente que se va a cargar y usar para el trabajo.
entry_script string Archivo de Python que contiene la implementación de funciones paralelas predefinidas. Para obtener más información, consulte Preparación del script de entrada para un trabajo paralelo.
environment cadena u objeto Obligatorio Entorno que se va a usar para ejecutar la tarea. Este valor puede ser una referencia a un entorno con versiones existente en el área de trabajo o una especificación de entorno en línea.

Para hacer referencia a un entorno existente, use la sintaxis azureml:<environment_name>:<environment_version> o azureml:<environment_name>@latest (para hacer referencia a la versión más reciente de un entorno).

Para definir un entorno en línea, siga el Esquema de entorno. Excluya las propiedades name y version, ya que no se admiten para entornos en línea.
program_arguments string Argumentos que se van a pasar al script de entrada. Puede contener "--<-arg_name> ${{inputs.<intput_name>}}" referencia a entradas o salidas.

El trabajo paralelo proporciona una lista de argumentos predefinidos para establecer la configuración de la ejecución en paralelo. Para obtener más información, consulte los argumentos predefinidos para el trabajo paralelo.
append_row_to string Agregue todos los retornos de cada ejecución de minilote y desindítelo en este archivo. Puede hacer referencia a una de las salidas del trabajo paralelo mediante la expresión ${{outputs.<output_name>}}

Entradas de trabajo

Clave Tipo Descripción Valores permitidos Valor predeterminado
type string Tipo de entrada de trabajo. Especifique mltable para los datos de entrada que apunte a un único origen de archivo o uri_folder para los datos de entrada que apunte a un origen de carpeta. mltable, uri_folder uri_folder
path string Ruta de acceso a los datos que se va a usar como entrada. El valor se puede especificar de varias maneras:

- Ruta de acceso local al archivo o carpeta del origen de datos, por ejemplo, path: ./iris.csv. Los datos se cargarán durante el envío del trabajo.

- URI de una ruta de acceso a la nube al archivo o carpeta que se va a usar como entrada. Los tipos de URI admitidos son azureml, https, wasbs, abfss, adl. Para más información, consulte la sintaxis Core yaml sobre cómo utilizar el formato URI azureml://.

- Recurso de datos de Azure Machine Learning registrado existente que se va a usar como entrada. Para hacer referencia a un recurso de datos registrado, use la sintaxis azureml:<data_name>:<data_version> o azureml:<data_name>@latest (para hacer referencia a la versión más reciente de ese recurso de datos), por ejemplo, path: azureml:cifar10-data:1 o path: azureml:cifar10-data@latest.
mode string Modo de cómo se deben entregar los datos al destino de proceso.

Para el montaje de solo lectura (ro_mount), el conjunto de datos se consumirá como una ruta de acceso de montaje. Una carpeta se montará como una carpeta y un archivo se montará como un archivo. Azure Machine Learning resolverá la entrada en la ruta de acceso de montaje.

Para el modo download, los datos se descargarán en el destino de proceso. Azure Machine Learning resolverá la entrada a la ruta de acceso descargada.

Si solo desea la dirección URL de la ubicación de almacenamiento de los artefactos de datos en lugar de montar o descargar los datos en sí, puede usar el modo direct. Pasará la dirección URL de la ubicación de almacenamiento como entrada del trabajo. En este caso, el usuario es el único responsable de controlar las credenciales para acceder al almacenamiento.
ro_mount, , download, direct ro_mount

Salidas de trabajo

Clave Tipo Descripción Valores permitidos Valor predeterminado
type string Tipo de salida del trabajo. Para el tipo predeterminado uri_folder, la salida corresponderá a una carpeta. uri_folder uri_folder
mode string Modo de cómo se entregarán los archivos de salida al almacenamiento de destino. Para el modo de montaje de lectura y escritura (rw_mount), el directorio de salida será un directorio montado. En el modo de carga, los archivos escritos se cargan al final del trabajo. rw_mount, upload rw_mount

Argumentos predefinidos para el trabajo paralelo

Clave Descripción Valores permitidos Valor predeterminado
--error_threshold El umbral de elementos con errores. Los elementos con errores se cuentan por la diferencia numérica entre las entradas y las devoluciones de cada minilote. Si la suma de elementos con error es superior a este umbral, el trabajo paralelo se marcará como erróneo.

Nota: "-1" es el número predeterminado, que significa ignorar todos los errores durante el trabajo paralelo.
[-1, int.max] -1
--allowed_failed_percent De forma similar a mini_batch_error_threshold pero usa el porcentaje de mini lotes con errores en lugar del recuento. [0, 100] 100
--task_overhead_timeout Tiempo de espera en segundo para la inicialización de cada minilote. Por ejemplo, cargue los datos de mini lotes y páselo a la función run(). (0, 259200] 30
--progress_update_timeout Tiempo de espera en segundo lugar para supervisar el progreso de la ejecución del minilote. Si no se reciben actualizaciones de progreso dentro de esta configuración de tiempo de espera, el trabajo paralelo se marcará como erróneo. (0, 259200] Calculado dinámicamente por otra configuración.
--first_task_creation_timeout Tiempo de espera en segundo lugar para supervisar el tiempo entre el inicio del trabajo en la ejecución del primer minilote. (0, 259200] 600
--copy_logs_to_parent Opción booleana para si copia el progreso del trabajo, la información general y los registros en el trabajo de canalización primario. True, False False
--metrics_name_prefix Proporcione el prefijo personalizado de las métricas en este trabajo paralelo.
--push_metrics_to_parent Opción booleana para si inserta métricas en el trabajo de canalización principal. True, False False
--resource_monitor_interval El intervalo de tiempo en segundos para volcar el uso de recursos del nodo (por ejemplo, cpu, memoria) para registrar la carpeta en la ruta de acceso "logs/sys/perf".

Nota: Los registros de recursos de volcado de memoria frecuentes ralentizarán ligeramente la velocidad de ejecución del minilote. Establezca este valor en "0" para detener el uso de recursos de volcado.
[0, int.max] 600

Comentarios

Los comandos az ml job se puede usar para administrar los trabajos de Azure Machine Learning.

Ejemplos

Hay ejemplos disponibles en el repositorio de GitHub de ejemplos. A continuación, se muestran varios.

YAML: Uso de trabajos paralelos en la canalización

$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}}

Pasos siguientes