Compartir a través de


ParallelRunConfig Clase

Define la configuración de un ParallelRunStep objeto .

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

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

Inicialice el objeto config.

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 usar un entorno de Python existente o para configurar un entorno temporal para el experimento. La definición de entorno es responsable de definir las dependencias de aplicación necesarias, como paquetes conda o pip.

entry_script
Requerido
str

Script de usuario que se ejecutará en paralelo en varios nodos. Esto se especifica como una ruta de acceso del archivo local. Si source_directory se especifica , es entry_script una ruta de acceso relativa dentro del directorio. De lo contrario, puede ser cualquier ruta de acceso accesible en la máquina. El entry_script debe contener dos funciones: init(): esta función debe usarse para cualquier preparación costosa o común para las 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 miniproceso. 'mini_batch': la inferencia por lotes invocará el método run y pasará una lista o un DataFrame de Pandas como argumento al método . Cada entrada de min_batch será una ruta de acceso a archivos si la entrada es FileDataset, un DataFrame de Pandas si la entrada es tabularDataset. El método run() debe devolver un DataFrame 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á la función run hasta que se procesen todos los miniprocesos.

error_threshold
Requerido
int

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

output_action
Requerido
str

Cómo se debe organizar la salida. Los valores admitidos actuales son "append_row" y "summary_only".

  1. 'append_row': todas las invocaciones de método run() de salida de valores 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 propia salida. Todavía se espera una fila de salida para cada elemento de entrada correcto procesado. El sistema usa esta salida solo para el cálculo del umbral de error (ignorando el valor real de la fila).
compute_target
Requerido

Destino de proceso que se va a 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 en el área de trabajo.

node_count
Requerido
int

Número de nodos del destino de proceso usado 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 la máquina gpu, el valor predeterminado es 1. En el caso de la 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.

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 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 run(). Los valores de ejemplo son 1024, 1024 KB, 10 MB y 1 GB. (opcional, el valor predeterminado es 10 archivos para FileDataset y 1MB para TabularDataset).

Valor predeterminado: None
source_directory
str

Ruta de acceso a la carpeta que contiene los entry_script archivos auxiliares y 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 "registro". 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 para cada invocación del método run(). (opcional, el valor predeterminado es 60).

Valor predeterminado: 60
run_max_try
int

Número de intentos máximos para un lote de mini error o de tiempo de espera. El intervalo es [1, int.max]. El valor predeterminado es 3. Un mini lote con recuento de desqueue mayor que no se procesará de nuevo 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 mini lotes con errores que se deben omitir durante el procesamiento. Si el recuento de errores supera 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 omitir todos los errores durante el procesamiento. Un mini lote puede producir un error en la primera vez que se procesa y, a continuación, se realiza correctamente en el segundo intento. La comprobación entre la primera y la segunda vez la contará como errónea. La comprobación después de la segunda vez no la contará como con errores. El argumento –error_threshold, –allowed_failed_count y –allowed_failed_percent puede funcionar conjuntamente. Si se especifica más de uno, se anulará el trabajo si supera alguno de ellos.

Valor predeterminado: None
allowed_failed_percent

Porcentaje de mini lotes con errores que se deben omitir durante el procesamiento. Si el porcentaje con error supera 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 omiten todos los errores durante el procesamiento. La comprobación se inicia después de que se hayan programado todos los mini lotes. El argumento –error_threshold, –allowed_failed_count y –allowed_failed_percent puede funcionar conjuntamente. Si se especifica más de uno, se anulará el trabajo si supera alguno 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 cada uno de los cuales es 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 la cadena de volcado json de la lista porque el tipo de lista no se admite en PipelineParameter por ahora. Las entradas deben tener particiones de conjuntos de datos y el 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 en el que 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 usar un entorno de Python existente o para configurar un entorno temporal para el experimento. La definición de entorno es responsable de definir las dependencias de aplicación necesarias, como paquetes conda o pip.

entry_script
Requerido
str

Script de usuario que se ejecutará en paralelo en varios nodos. Esto se especifica como una ruta de acceso del archivo local. Si source_directory se especifica , es entry_script una ruta de acceso relativa dentro del directorio. De lo contrario, puede ser cualquier ruta de acceso accesible en la máquina. El entry_script debe contener dos funciones: init(): esta función debe usarse para cualquier preparación costosa o común para las 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 miniproceso. 'mini_batch': la inferencia por lotes invocará el método run y pasará una lista o un DataFrame de Pandas como argumento al método . Cada entrada de min_batch será una ruta de acceso a archivos si la entrada es FileDataset, un DataFrame de Pandas si la entrada es tabularDataset. El método run() debe devolver un DataFrame 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á la función run hasta que se procesen todos los miniprocesos.

error_threshold
Requerido
int

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

output_action
Requerido
str

Cómo se debe organizar la salida. Los valores admitidos actuales son "append_row" y "summary_only".

  1. 'append_row': todas las invocaciones de método run() de salida de valores 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 propia salida. Todavía se espera una fila de salida para cada elemento de entrada correcto procesado. El sistema usa esta salida solo para el cálculo del umbral de error (ignorando el valor real de la fila).
compute_target
Requerido

Destino de proceso que se va a 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 en el área de trabajo.

node_count
Requerido
int

Número de nodos del destino de proceso usado 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 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 run(). Los valores de ejemplo son 1024, 1024 KB, 10 MB y 1 GB. (opcional, el valor predeterminado es 10 archivos para FileDataset y 1MB para TabularDataset).

source_directory
Requerido
str

Ruta de acceso a la carpeta que contiene los entry_script archivos auxiliares y 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 "registro". Los valores posibles son "WARNING", "INFO" y "DEBUG". (opcional, el valor predeterminado es 'INFO').

run_invocation_timeout
Requerido
int

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

run_max_try
Requerido
int

Número de intentos máximos para un lote de mini error o de tiempo de espera. El intervalo es [1, int.max]. El valor predeterminado es 3. Un mini lote con recuento de desqueue mayor que no se procesará de nuevo 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 mini lotes con errores que se deben omitir durante el procesamiento. Si el recuento de errores supera 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 omitir todos los errores durante el procesamiento. Un mini lote puede producir un error en la primera vez que se procesa y, a continuación, se realiza correctamente en el segundo intento. La comprobación entre la primera y la segunda vez la contará como errónea. La comprobación después de la segunda vez no la contará como con errores. El argumento –error_threshold, –allowed_failed_count y –allowed_failed_percent puede funcionar conjuntamente. Si se especifica más de uno, se anulará el trabajo si supera alguno de ellos.

allowed_failed_percent
Requerido

Porcentaje de mini lotes con errores que se deben omitir durante el procesamiento. Si el porcentaje con error supera 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 omiten todos los errores durante el procesamiento. La comprobación se inicia después de que se hayan programado todos los mini lotes. El argumento –error_threshold, –allowed_failed_count y –allowed_failed_percent puede funcionar conjuntamente. Si se especifica más de uno, se anulará el trabajo si supera alguno 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 cada uno de los cuales es 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 la cadena de volcado json de la lista porque el tipo de lista no se admite en PipelineParameter por ahora. Las entradas deben tener particiones de conjuntos de datos y el 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 en el que se ejecuta el script de usuario.

Comentarios

La clase ParallelRunConfig se usa para proporcionar configuración para la ParallelRunStep clase . ParallelRunConfig y ParallelRunStep se pueden usar juntos 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 recuento de nodos y otros parámetros ajustables para acelerar el procesamiento paralelo se puede controlar con la ParallelRunConfig clase . ParallelRunStep puede funcionar con o TabularDatasetFileDataset como entrada.

Para usar ParallelRunStep y ParallelRunConfig:

  • Cree un ParallelRunConfig objeto 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, define entradas y salidas para el paso.

  • Use el objeto ParallelRunStep configurado en un Pipeline elemento igual que lo haría con otros tipos de pasos de canalización.

En los artículos siguientes se describen ejemplos de cómo trabajar con 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 obtener más información sobre este ejemplo, vea el cuaderno https://aka.ms/batch-inference-notebooks.

Métodos

load_yaml

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

save_to_yaml

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

load_yaml

Cargue los 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 de la que se van a leer los datos de configuración.

path
Requerido
str

Ruta de acceso desde la que se carga la configuración.

save_to_yaml

Exporte los 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 a la que se va a guardar el archivo.