Compartir a través de


ParallelRunConfig Clase

Define la configuración de un objeto ParallelRunStep.

Para obtener un ejemplo del uso de ParallelRunStep, vea el cuaderno https://aka.ms/batch-inference-notebooks.

Para consultar la guía de solución de problemas, vea https://aka.ms/prstsg. Puede encontrar más referencias allí.

Inicialice el objeto config.

Herencia
azureml.pipeline.core._parallel_run_config_base._ParallelRunConfigBase
ParallelRunConfig

Constructor

ParallelRunConfig(environment, entry_script, error_threshold, output_action, compute_target, node_count, process_count_per_node=None, mini_batch_size=None, source_directory=None, description=None, logging_level='INFO', run_invocation_timeout=60, run_max_try=3, append_row_file_name=None, allowed_failed_count=None, allowed_failed_percent=None, partition_keys=None, environment_variables=None)

Parámetros

Nombre Description
environment
Requerido

Definición de entorno que configura el entorno de Python. Se puede configurar para que use un entorno de Python existente o para configurar un entorno temporal para el experimento. La definición del entorno es responsable de definir las dependencias de aplicación necesarias, como los paquetes Conda o PIP.

entry_script
Requerido
str

Script de usuario que se ejecutará en paralelo en varios nodos. Se especifica como una ruta de acceso del archivo local. Si se especifica source_directory, entry_script es una ruta de acceso relativa dentro del directorio. De lo contrario, puede ser cualquier otra ruta de acceso accesible en la máquina. entry_script debe contener dos funciones. init(): esta función debe usarse para cualquier preparación costosa o común para inferencias posteriores, por ejemplo, deserializar y cargar el modelo en un objeto global. run(mini_batch): método que se va a paralelizar. Cada invocación tendrá un minilote. "mini_batch": la inferencia por lotes invocará el método run y pasará una trama de datos de Pandas o una lista como argumento al método. Cada entrada de min_batch será una ruta de acceso si la entrada es FileDataset o una trama de datos de Pandas si es TabularDataset. El método run() debe devolver una trama de datos de Pandas o una matriz. Para append_row output_action, estos elementos devueltos se anexan al archivo de salida común. Para summary_only, se omite el contenido de los elementos. Para todas las acciones de salida, cada elemento de salida devuelto indica una inferencia correcta del elemento de entrada en el minilote de entrada. Cada proceso de trabajo paralelo llamará a init una vez y, a continuación, recorrerá en bucle la función de ejecución hasta que se procesen todos los minilotes.

error_threshold
Requerido
int

número de errores de registro para TabularDataset y errores de archivo para FileDataset que se deben omitir durante el procesamiento. Si el recuento de errores está por encima de este valor, se anulará el trabajo. El umbral de error es para toda la entrada y no para los minilotes individuales que se envían al método run(). El intervalo es [-1, int.max]. -1 indica que se omitan todos los errores durante el procesamiento.

output_action
Requerido
str

Cómo se debería organizar la salida. Los valores admitidos actualmente son "append_row" y "summary_only".

  1. "append_row": todos los valores generados por las invocaciones al método run() se agregarán en un archivo único denominado parallel_run_step.txt que se crea en la ubicación de salida.
  2. "summary_only": se espera que el script de usuario almacene la salida por sí mismo. Todavía se espera una fila de salida por cada elemento de entrada procesado correctamente. El sistema utiliza esta salida solo para el cálculo del umbral de error (se omite el valor real de la fila).
compute_target
Requerido

Destino de proceso que se usará para la ejecución de ParallelRunStep. Este parámetro se puede especificar como un objeto de destino de proceso o el nombre de un destino de proceso del área de trabajo.

node_count
Requerido
int

Número de nodos del destino de proceso usados para ejecutar ParallelRunStep.

process_count_per_node
int

Número de procesos de trabajo por nodo para ejecutar el script de entrada en paralelo. En el caso de una máquina de GPU, el valor predeterminado es 1. En una máquina de CPU, el valor predeterminado es el número de núcleos por nodo. Un proceso de trabajo llamará repetidamente a run() pasando el lote de pequeño tamaño que obtiene. El número total de procesos de trabajo del trabajo es process_count_per_node * node_count, que decide el número máximo de run() que se van a ejecutar en paralelo.

Valor predeterminado: None
mini_batch_size

Para la entrada FileDataset, este campo es el número de archivos que un script de usuario puede procesar en una llamada a run(). Para la entrada TabularDataset, este campo es el tamaño aproximado de los datos que el script de usuario puede procesar en una llamada a run(). Los valores de ejemplo son 1024, 1024 KB, 10 MB y 1 GB. (Opcional: el valor predeterminado es 10 archivos para FileDataset y 1 MB para TabularDataset).

Valor predeterminado: None
source_directory
str

Ruta de acceso a una carpeta que contiene entry_script y archivos compatibles que se usan para ejecutarse en el destino de proceso.

Valor predeterminado: None
description
str

Descripción para proporcionar el servicio por lotes que se usa con fines de visualización.

Valor predeterminado: None
logging_level
str

Cadena del nombre del nivel de registro, que se define en "logging". Los valores posibles son "WARNING", "INFO" y "DEBUG". (Opcional: el valor predeterminado es "INFO").

Valor predeterminado: INFO
run_invocation_timeout
int

Tiempo de espera en segundos de cada invocación del método run(). (Opcional; el valor predeterminado es 60).

Valor predeterminado: 60
run_max_try
int

Número máximo de reintentos para un minilote con errores o que ha agotado el tiempo de espera. El intervalo es [1, int.max]. El valor predeterminado es 3. Un minilote con un recuento de eliminación de la cola mayor que este no se volverá a procesar y se eliminará directamente.

Valor predeterminado: 3
append_row_file_name
str

Nombre del archivo de salida si output_action es "append_row". (Opcional, el valor predeterminado es "parallel_run_step.txt").

Valor predeterminado: None
allowed_failed_count
int

Número de minilotes con errores que se deben omitir durante el procesamiento. Si el recuento de errores está por encima de este valor, se anulará el trabajo. Este umbral es para toda la entrada en lugar del minilote individual enviado al método run(). El intervalo es [-1, int.max]. -1 indica que se omitan todos los errores durante el procesamiento. Un minilote puede producir un error la primera vez que se procesa y, a continuación, se realiza correctamente en el segundo intento. Si se comprueba entre la primera y la segunda vez, se cuenta como con errores. La comprobación después de la segunda vez no se cuenta como con errores. Los argumentos –error_threshold, –allowed_failed_count y –allowed_failed_percent pueden funcionar juntos. Si se especifica más de uno, el trabajo se anulará si supera cualquiera de ellos.

Valor predeterminado: None
allowed_failed_percent

Porcentaje de minilotes con errores que se deben omitir durante el procesamiento. Si el porcentaje de errores está por encima de este valor, se anulará el trabajo. Este umbral es para toda la entrada en lugar del minilote individual enviado al método run(). El intervalo es [0, 100]. -100 o 100,0 indica que se omitan todos los errores durante el procesamiento. La comprobación se inicia después de que se hayan programado todos los minilotes. Los argumentos –error_threshold, –allowed_failed_count y –allowed_failed_percent pueden funcionar juntos. Si se especifica más de uno, el trabajo se anulará si supera cualquiera de ellos.

Valor predeterminado: None
partition_keys

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 partition_keys y mini_batch_size, se producirá un error. Debe ser una lista de elementos str que son una clave que se usa para particionar el conjunto de datos de entrada. Sin embargo, si se promueve a PipelineParameter, los valores predeterminados deben ser el str de volcado JSON de la lista, ya que el tipo de lista no se admite en PipelineParameter por ahora. Las entradas deben ser conjuntos de datos con particiones y partition_keys debe ser un subconjunto de las claves de cada conjunto de datos de entrada para que funcione.

Valor predeterminado: None
environment_variables

Diccionario de nombres y valores de variables de entorno. Estas variables de entorno se establecen en el proceso donde se ejecuta el script de usuario.

Valor predeterminado: None
environment
Requerido

Definición de entorno que configura el entorno de Python. Se puede configurar para que use un entorno de Python existente o para configurar un entorno temporal para el experimento. La definición del entorno es responsable de definir las dependencias de aplicación necesarias, como los paquetes Conda o PIP.

entry_script
Requerido
str

Script de usuario que se ejecutará en paralelo en varios nodos. Se especifica como una ruta de acceso del archivo local. Si se especifica source_directory, entry_script es una ruta de acceso relativa dentro del directorio. De lo contrario, puede ser cualquier otra ruta de acceso accesible en la máquina. entry_script debe contener dos funciones. init(): esta función debe usarse para cualquier preparación costosa o común para inferencias posteriores, por ejemplo, deserializar y cargar el modelo en un objeto global. run(mini_batch): método que se va a paralelizar. Cada invocación tendrá un minilote. "mini_batch": la inferencia por lotes invocará el método run y pasará una trama de datos de Pandas o una lista como argumento al método. Cada entrada de min_batch será una ruta de acceso si la entrada es FileDataset o una trama de datos de Pandas si es TabularDataset. El método run() debe devolver una trama de datos de Pandas o una matriz. Para append_row output_action, estos elementos devueltos se anexan al archivo de salida común. Para summary_only, se omite el contenido de los elementos. Para todas las acciones de salida, cada elemento de salida devuelto indica una inferencia correcta del elemento de entrada en el minilote de entrada. Cada proceso de trabajo paralelo llamará a init una vez y, a continuación, recorrerá en bucle la función de ejecución hasta que se procesen todos los minilotes.

error_threshold
Requerido
int

número de errores de registro para TabularDataset y errores de archivo para FileDataset que se deben omitir durante el procesamiento. Si el recuento de errores está por encima de este valor, se anulará el trabajo. El umbral de error es para toda la entrada y no para los minilotes individuales que se envían al método run(). El intervalo es [-1, int.max]. -1 indica que se omitan todos los errores durante el procesamiento.

output_action
Requerido
str

Cómo se debería organizar la salida. Los valores admitidos actualmente son "append_row" y "summary_only".

  1. "append_row": todos los valores generados por las invocaciones al método run() se agregarán en un archivo único denominado parallel_run_step.txt que se crea en la ubicación de salida.
  2. "summary_only": se espera que el script de usuario almacene la salida por sí mismo. Todavía se espera una fila de salida por cada elemento de entrada procesado correctamente. El sistema utiliza esta salida solo para el cálculo del umbral de error (se omite el valor real de la fila).
compute_target
Requerido

Destino de proceso que se usará para la ejecución de ParallelRunStep. Este parámetro se puede especificar como un objeto de destino de proceso o el nombre de un destino de proceso del área de trabajo.

node_count
Requerido
int

Número de nodos del destino de proceso usados para ejecutar ParallelRunStep.

process_count_per_node
Requerido
int

Número de procesos de trabajo por nodo para ejecutar el script de entrada en paralelo. En el caso de una máquina de GPU, el valor predeterminado es 1. Para una máquina de CPU, el valor predeterminado es el número de núcleos. Un proceso de trabajo llamará repetidamente a run() pasando el lote de pequeño tamaño que obtiene. El número total de procesos de trabajo del trabajo es process_count_per_node * node_count, que decide el número máximo de run() que se van a ejecutar en paralelo.

mini_batch_size
Requerido
str o int

Para la entrada FileDataset, este campo es el número de archivos que un script de usuario puede procesar en una llamada a run(). Para la entrada TabularDataset, este campo es el tamaño aproximado de los datos que el script de usuario puede procesar en una llamada a run(). Los valores de ejemplo son 1024, 1024 KB, 10 MB y 1 GB. (Opcional: el valor predeterminado es 10 archivos para FileDataset y 1 MB para TabularDataset).

source_directory
Requerido
str

Ruta de acceso a una carpeta que contiene entry_script y archivos compatibles que se usan para ejecutarse en el destino de proceso.

description
Requerido
str

Descripción para proporcionar el servicio por lotes que se usa con fines de visualización.

logging_level
Requerido
str

Cadena del nombre del nivel de registro, que se define en "logging". Los valores posibles son "WARNING", "INFO" y "DEBUG". (Opcional: el valor predeterminado es "INFO").

run_invocation_timeout
Requerido
int

Tiempo de espera en segundos de cada invocación del método run(). (Opcional; el valor predeterminado es 60).

run_max_try
Requerido
int

Número máximo de reintentos para un minilote con errores o que ha agotado el tiempo de espera. El intervalo es [1, int.max]. El valor predeterminado es 3. Un minilote con un recuento de eliminación de la cola mayor que este no se volverá a procesar y se eliminará directamente.

append_row_file_name
Requerido
str

Nombre del archivo de salida si output_action es "append_row". (Opcional, el valor predeterminado es "parallel_run_step.txt").

allowed_failed_count
Requerido
int

Número de minilotes con errores que se deben omitir durante el procesamiento. Si el recuento de errores está por encima de este valor, se anulará el trabajo. Este umbral es para toda la entrada en lugar del minilote individual enviado al método run(). El intervalo es [-1, int.max]. -1 indica que se omitan todos los errores durante el procesamiento. Un minilote puede producir un error la primera vez que se procesa y, a continuación, se realiza correctamente en el segundo intento. Si se comprueba entre la primera y la segunda vez, se cuenta como con errores. La comprobación después de la segunda vez no se cuenta como con errores. Los argumentos –error_threshold, –allowed_failed_count y –allowed_failed_percent pueden funcionar juntos. Si se especifica más de uno, el trabajo se anulará si supera cualquiera de ellos.

allowed_failed_percent
Requerido

Porcentaje de minilotes con errores que se deben omitir durante el procesamiento. Si el porcentaje de errores está por encima de este valor, se anulará el trabajo. Este umbral es para toda la entrada en lugar del minilote individual enviado al método run(). El intervalo es [0, 100]. -100 o 100,0 indica que se omitan todos los errores durante el procesamiento. La comprobación se inicia después de que se hayan programado todos los minilotes. Los argumentos –error_threshold, –allowed_failed_count y –allowed_failed_percent pueden funcionar juntos. Si se especifica más de uno, el trabajo se anulará si supera cualquiera de ellos.

partition_keys
Requerido

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 partition_keys y mini_batch_size, se producirá un error. Debe ser una lista de elementos str que son una clave que se usa para particionar el conjunto de datos de entrada. Sin embargo, si se promueve a PipelineParameter, los valores predeterminados deben ser el str de volcado JSON de la lista, ya que el tipo de lista no se admite en PipelineParameter por ahora. Las entradas deben ser conjuntos de datos con particiones y partition_keys debe ser un subconjunto de las claves de cada conjunto de datos de entrada para que funcione.

environment_variables
Requerido

Diccionario de nombres y valores de variables de entorno. Estas variables de entorno se establecen en el proceso donde se ejecuta el script de usuario.

Comentarios

La clase ParallelRunConfig se usa para proporcionar la configuración de la clase ParallelRunStep. ParallelRunConfig y ParallelRunStep se pueden usar conjuntamente para procesar grandes cantidades de datos en paralelo. Los casos de uso comunes son el entrenamiento de un modelo de aprendizaje automático o la ejecución de inferencia sin conexión para generar predicciones sobre un lote de observaciones. ParallelRunStep funciona mediante la separación de los datos en lotes que se procesan en paralelo. El tamaño del lote, el número de nodos y otros parámetros ajustables para acelerar el procesamiento paralelo se pueden controlar con la clase ParallelRunConfig. ParallelRunStep puede funcionar con TabularDataset o FileDataset como entrada.

Para usar ParallelRunStep y ParallelRunConfig:

  • Cree un objeto ParallelRunConfig para especificar cómo se realiza el procesamiento por lotes, con parámetros para controlar el tamaño del lote, el número de nodos por destino de proceso y una referencia al script de Python personalizado.

  • Cree un objeto ParallelRunStep que use el objeto ParallelRunConfig y defina las entradas y salidas del paso.

  • Use el objeto ParallelRunStep configurado en una Pipeline como lo haría con otros tipos de pasos de canalización.

En los siguientes artículos se analizan ejemplos de trabajo con las clases ParallelRunStep y ParallelRunConfig para la inferencia por lotes:


   from azureml.pipeline.steps import ParallelRunStep, ParallelRunConfig

   parallel_run_config = ParallelRunConfig(
       source_directory=scripts_folder,
       entry_script=script_file,
       mini_batch_size="5",        # or partition_keys=["key1", "key2"], which is another way to partition the
                                   # input to mini-batches, refer to the parameter description for details
       error_threshold=10,         # Optional, allowed failed count on mini batch items
       allowed_failed_count=15,    # Optional, allowed failed count on mini batches
       allowed_failed_percent=10,  # Optional, allowed failed percent on mini batches
       run_max_try=3,
       output_action="append_row",
       environment=batch_env,
       compute_target=compute_target,
       node_count=2)

   parallelrun_step = ParallelRunStep(
       name="predict-digits-mnist",
       parallel_run_config=parallel_run_config,
       inputs=[ named_mnist_ds ],
       output=output_dir,
       arguments=[ "--extra_arg", "example_value" ],
       allow_reuse=True
   )

Para más información sobre este ejemplo, consulte el cuaderno https://aka.ms/batch-inference-notebooks.

Métodos

load_yaml

Cargue datos de configuración de ejecución en paralelo desde un archivo YAML.

save_to_yaml

Exporta datos de configuración de ejecución en paralelo a un archivo YAML.

load_yaml

Cargue datos de configuración de ejecución en paralelo desde un archivo YAML.

static load_yaml(workspace, path)

Parámetros

Nombre Description
workspace
Requerido

Área de trabajo desde la que se leerán los datos de configuración.

path
Requerido
str

La ruta de acceso desde la que se carga la configuración.

save_to_yaml

Exporta datos de configuración de ejecución en paralelo a un archivo YAML.

save_to_yaml(path)

Parámetros

Nombre Description
path
Requerido
str

Ruta de acceso en la que se guardará el archivo.