Partager via


ParallelRunConfig Classe

Définit la configuration d’un objet ParallelRunStep.

Pour obtenir un exemple d’utilisation de ParallelRunStep, consultez le notebook https://aka.ms/batch-inference-notebooks.

Pour obtenir le guide de résolution des problèmes, consultez https://aka.ms/prstsg. Vous trouverez plus de références ici.

Initialisez l’objet config.

Héritage
azureml.pipeline.core._parallel_run_config_base._ParallelRunConfigBase
ParallelRunConfig

Constructeur

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)

Paramètres

Nom Description
environment
Obligatoire

Définition de l’environnement qui configure l’environnement Python. Il peut être configuré pour utiliser un environnement Python existant ou pour configurer un environnement temporaire pour l’expérience. La définition de l’environnement est chargée de définir les dépendances d’application nécessaires, comme les packages conda ou pip.

entry_script
Obligatoire
str

Script utilisateur qui sera exécuté en parallèle sur plusieurs nœuds. Il s’agit du chemin du fichier local. Si source_directory est spécifié, entry_script est un chemin relatif dans le répertoire. Dans le cas contraire, il peut s’agir de n’importe quel chemin d’accès accessible sur l’ordinateur. Le entry_script doit contenir deux fonctions : init() : cette fonction doit être utilisée pour toute préparation coûteuse ou courante pour les inférences ultérieures, par exemple, la désérialisation et le chargement du modèle dans un objet global. run(mini_batch) : méthode à paralléliser. Chaque appel aura un mini-lot. « mini_batch» : l’inférence par lots va appeler la méthode d’exécution et transmettre soit une liste, soit un dataframe Pandas en tant qu’argument de la méthode. Chaque entrée de min_batch sera un filepath (chemin de fichier) si l’entrée est un FileDataset, ou un dataframe Pandas si l’entrée est un TabularDataset. La méthode run() doit retourner un dataframe Pandas ou un tableau. Pour append_row output_action, les éléments retournés sont ajoutés au fichier de sortie commun. Pour summary_only, le contenu des éléments est ignoré. Pour toutes les actions de sortie, chaque élément de sortie retourné indique la réussite de son inférence dans le mini-lot d’entrée. Chaque processus Worker parallèle appelle init une fois, puis effectue une boucle sur la fonction run jusqu’à ce que tous les mini-lots soient traités.

error_threshold
Obligatoire
int

nombre d’échecs d’enregistrement pour TabularDataset et d’échecs de fichiers pour FileDataset qui doivent être ignorés pendant le traitement. Si le nombre d’erreurs dépasse cette valeur, le travail sera interrompu. Le seuil d’erreurs concerne la totalité de l’entrée et non chacun des mini-lots envoyés à la méthode. La plage est [-1, int.max]. -1 indique d’ignorer toutes les défaillances lors du traitement.

output_action
Obligatoire
str

Mode d’organisation de la sortie. Les valeurs actuellement prises en charge sont « append_row » et « summary_only ».

  1. « append_row » : toutes les valeurs générées par les appels de la méthode run() sont agrégées dans un fichier unique nommé parallel_run_step.txt, qui est créé dans l’emplacement de sortie.
  2. « summary_only » : le script utilisateur doit stocker la sortie elle-même. Une ligne de sortie est toujours attendue pour chaque élément d’entrée réussi traité. Le système utilise cette sortie uniquement pour le calcul du seuil d’erreur (en ignorant la valeur réelle de la ligne).
compute_target
Obligatoire

Cible de calcul à utiliser pour l’exécution ParallelRunStep. Ce paramètre peut être spécifié sous la forme d’un objet de cible de calcul ou du nom d’une cible de calcul dans l’espace de travail.

node_count
Obligatoire
int

Nombre de nœuds dans la cible de calcul utilisée pour l’exécution de ParallelRunStep.

process_count_per_node
int

Nombre de processus Worker par nœud pour exécuter le script d’entrée en parallèle. Pour une machine GPU, la valeur par défaut est 1. Pour un ordinateur UC, la valeur par défaut est le nombre de cœurs. Un processus Worker appellera run() de manière répétée en transmettant le mini lot qu’il obtient. Le nombre total de processus Worker dans votre travail est process_count_per_node * node_count, qui détermine le nombre maximal de run() à exécuter en parallèle.

Valeur par défaut: None
mini_batch_size

Pour une entrée FileDataset, ce champ correspond au nombre de fichiers que le script utilisateur peut traiter dans un appel de la méthode run(). Pour une entrée TabularDataset, ce champ correspond à la taille approximative des données que le script utilisateur peut traiter dans un appel de la méthode run(). Les exemples de valeurs sont 1 024, 1 024 Ko, 10 Mo et 1 Go. (Facultatif, la valeur par défaut est 10 fichiers pour FileDataset et 1 Mo pour TabularDataset.)

Valeur par défaut: None
source_directory
str

Chemins du dossier qui contient le entry_script et les fichiers complémentaires utilisés pour une exécution sur la cible de calcul.

Valeur par défaut: None
description
str

Description du service Batch utilisé à des fins d’affichage.

Valeur par défaut: None
logging_level
str

Chaîne du nom du niveau de journalisation, définie dans « Logging ». Les valeurs possibles sont « WARNING », « INFO »et « DEBUG ». (Facultatif : la valeur par défaut est « INFO ».)

Valeur par défaut: INFO
run_invocation_timeout
int

Délai d’expiration en secondes de chaque appel à la méthode run(). (La valeur par défaut facultative est 60.)

Valeur par défaut: 60
run_max_try
int

Nombre maximal de nouvelles tentatives pour un mini-lot ayant échoué ou dont le délai a expiré. La plage est [1, int.max]. La valeur par défaut est 3. Un mini-lot dont le nombre de dépilements est supérieur à cette valeur n’est pas retraité mais directement supprimé.

Valeur par défaut: 3
append_row_file_name
str

Nom du fichier de sortie si output_action a la valeur « append_row ». (Facultatif, la valeur par défaut est « parallel_run_step.txt »)

Valeur par défaut: None
allowed_failed_count
int

Nombre de mini-lots ayant échoué qui doivent être ignorés pendant le traitement. Si le nombre d’échec dépasse cette valeur, le travail est abandonné. Ce seuil concerne l’ensemble de l’entrée plutôt que le mini-lot envoyé à la méthode run(). La plage est [-1, int.max]. -1 indique d’ignorer toutes les défaillances lors du traitement. Un mini-lot peut échouer la première fois qu’il est traité, puis réussir à la deuxième tentative. Une vérification entre la première et la deuxième fois le compte la tentative comme un échec. Une vérification après la deuxième tentative ne la compte pas comme un échec. Les arguments –error_threshold, –allowed_failed_count and –allowed_failed_percent peuvent fonctionner ensemble. Si plusieurs éléments sont spécifiés, le travail est abandonné si l’une des valeurs est dépassée.

Valeur par défaut: None
allowed_failed_percent

Pourcentage de mini-lots ayant échoué qui doivent être ignorés pendant le traitement. Si le pourcentage d’échec dépasse cette valeur, le travail est abandonné. Ce seuil concerne l’ensemble de l’entrée plutôt que le mini-lot envoyé à la méthode run(). La plage est [0, 100]. 100 ou 100.0 indique d’ignorer toutes les défaillances lors du traitement. La vérification démarre une fois tous les mini-lots planifiés. Les arguments –error_threshold, –allowed_failed_count and –allowed_failed_percent peuvent fonctionner ensemble. Si plusieurs éléments sont spécifiés, le travail est abandonné si l’une des valeurs est dépassée.

Valeur par défaut: None
partition_keys

Clés utilisées pour partitionner le jeu de données en mini-lots. Si la valeur est spécifiée, les données avec la même clé sont partitionnées dans le même mini-lot. Si à la fois partition_keys et mini_batch_size sont spécifiés, une erreur est générée. Il doit s’agir d’une liste d’éléments str, chacun d’entre eux étant une clé utilisée pour partitionner le jeu de données d’entrée. Toutefois, si elle est promue en PipelineParameter, les valeurs par défaut doivent être l’élément str de vidage JSON de la liste, car le type de liste n’est pas pris en charge dans PipelineParameter actuellement. Les entrées doivent être des jeux de données partitionnés et partition_keys doit être un sous-ensemble des clés de chaque jeu de données d’entrée pour que cela fonctionne.

Valeur par défaut: None
environment_variables

Dictionnaire des noms et valeurs des variables d’environnement. Ces variables d’environnement sont définies sur le processus où le script utilisateur est en cours d’exécution.

Valeur par défaut: None
environment
Obligatoire

Définition de l’environnement qui configure l’environnement Python. Il peut être configuré pour utiliser un environnement Python existant ou pour configurer un environnement temporaire pour l’expérience. La définition de l’environnement est chargée de définir les dépendances d’application nécessaires, comme les packages conda ou pip.

entry_script
Obligatoire
str

Script utilisateur qui sera exécuté en parallèle sur plusieurs nœuds. Il s’agit du chemin du fichier local. Si source_directory est spécifié, entry_script est un chemin relatif dans le répertoire. Dans le cas contraire, il peut s’agir de n’importe quel chemin d’accès accessible sur l’ordinateur. Le entry_script doit contenir deux fonctions : init() : cette fonction doit être utilisée pour toute préparation coûteuse ou courante pour les inférences ultérieures, par exemple, la désérialisation et le chargement du modèle dans un objet global. run(mini_batch) : méthode à paralléliser. Chaque appel aura un mini-lot. « mini_batch» : l’inférence par lots va appeler la méthode d’exécution et transmettre soit une liste, soit un dataframe Pandas en tant qu’argument de la méthode. Chaque entrée de min_batch sera un filepath (chemin de fichier) si l’entrée est un FileDataset, ou un dataframe Pandas si l’entrée est un TabularDataset. La méthode run() doit retourner un dataframe Pandas ou un tableau. Pour append_row output_action, les éléments retournés sont ajoutés au fichier de sortie commun. Pour summary_only, le contenu des éléments est ignoré. Pour toutes les actions de sortie, chaque élément de sortie retourné indique la réussite de son inférence dans le mini-lot d’entrée. Chaque processus Worker parallèle appelle init une fois, puis effectue une boucle sur la fonction run jusqu’à ce que tous les mini-lots soient traités.

error_threshold
Obligatoire
int

nombre d’échecs d’enregistrement pour TabularDataset et d’échecs de fichiers pour FileDataset qui doivent être ignorés pendant le traitement. Si le nombre d’erreurs dépasse cette valeur, le travail sera interrompu. Le seuil d’erreurs concerne la totalité de l’entrée et non chacun des mini-lots envoyés à la méthode. La plage est [-1, int.max]. -1 indique d’ignorer toutes les défaillances lors du traitement.

output_action
Obligatoire
str

Mode d’organisation de la sortie. Les valeurs actuellement prises en charge sont « append_row » et « summary_only ».

  1. « append_row » : toutes les valeurs générées par les appels de la méthode run() sont agrégées dans un fichier unique nommé parallel_run_step.txt, qui est créé dans l’emplacement de sortie.
  2. « summary_only » : le script utilisateur doit stocker la sortie elle-même. Une ligne de sortie est toujours attendue pour chaque élément d’entrée réussi traité. Le système utilise cette sortie uniquement pour le calcul du seuil d’erreur (en ignorant la valeur réelle de la ligne).
compute_target
Obligatoire

Cible de calcul à utiliser pour l’exécution ParallelRunStep. Ce paramètre peut être spécifié sous la forme d’un objet de cible de calcul ou du nom d’une cible de calcul dans l’espace de travail.

node_count
Obligatoire
int

Nombre de nœuds dans la cible de calcul utilisée pour l’exécution de ParallelRunStep.

process_count_per_node
Obligatoire
int

Nombre de processus Worker par nœud pour exécuter le script d’entrée en parallèle. Pour un ordinateur GPU, la valeur par défaut est 1. Pour un ordinateur processeur, la valeur par défaut est le nombre de cœurs. Un processus Worker appellera run() de manière répétée en transmettant le mini lot qu’il obtient. Le nombre total de processus Worker dans votre travail est process_count_per_node * node_count, qui détermine le nombre maximal de run() à exécuter en parallèle.

mini_batch_size
Obligatoire
str ou int

Pour une entrée FileDataset, ce champ correspond au nombre de fichiers que le script utilisateur peut traiter dans un appel de la méthode run(). Pour une entrée TabularDataset, ce champ correspond à la taille approximative des données que le script utilisateur peut traiter dans un appel de la méthode run(). Les exemples de valeurs sont 1 024, 1 024 Ko, 10 Mo et 1 Go. (Facultatif, la valeur par défaut est 10 fichiers pour FileDataset et 1 Mo pour TabularDataset.)

source_directory
Obligatoire
str

Chemins du dossier qui contient le entry_script et les fichiers complémentaires utilisés pour une exécution sur la cible de calcul.

description
Obligatoire
str

Description du service Batch utilisé à des fins d’affichage.

logging_level
Obligatoire
str

Chaîne du nom du niveau de journalisation, définie dans « Logging ». Les valeurs possibles sont « WARNING », « INFO »et « DEBUG ». (Facultatif : la valeur par défaut est « INFO ».)

run_invocation_timeout
Obligatoire
int

Délai d’expiration en secondes de chaque appel à la méthode run(). (La valeur par défaut facultative est 60.)

run_max_try
Obligatoire
int

Nombre maximal de nouvelles tentatives pour un mini-lot ayant échoué ou dont le délai a expiré. La plage est [1, int.max]. La valeur par défaut est 3. Un mini-lot dont le nombre de dépilements est supérieur à cette valeur n’est pas retraité mais directement supprimé.

append_row_file_name
Obligatoire
str

Nom du fichier de sortie si output_action a la valeur « append_row ». (Facultatif, la valeur par défaut est « parallel_run_step.txt »)

allowed_failed_count
Obligatoire
int

Nombre de mini-lots ayant échoué qui doivent être ignorés pendant le traitement. Si le nombre d’échec dépasse cette valeur, le travail est abandonné. Ce seuil concerne l’ensemble de l’entrée plutôt que le mini-lot envoyé à la méthode run(). La plage est [-1, int.max]. -1 indique d’ignorer toutes les défaillances lors du traitement. Un mini-lot peut échouer la première fois qu’il est traité, puis réussir à la deuxième tentative. Une vérification entre la première et la deuxième fois le compte la tentative comme un échec. Une vérification après la deuxième tentative ne la compte pas comme un échec. Les arguments –error_threshold, –allowed_failed_count and –allowed_failed_percent peuvent fonctionner ensemble. Si plusieurs éléments sont spécifiés, le travail est abandonné si l’une des valeurs est dépassée.

allowed_failed_percent
Obligatoire

Pourcentage de mini-lots ayant échoué qui doivent être ignorés pendant le traitement. Si le pourcentage d’échec dépasse cette valeur, le travail est abandonné. Ce seuil concerne l’ensemble de l’entrée plutôt que le mini-lot envoyé à la méthode run(). La plage est [0, 100]. 100 ou 100.0 indique d’ignorer toutes les défaillances lors du traitement. La vérification démarre une fois tous les mini-lots planifiés. Les arguments –error_threshold, –allowed_failed_count and –allowed_failed_percent peuvent fonctionner ensemble. Si plusieurs éléments sont spécifiés, le travail est abandonné si l’une des valeurs est dépassée.

partition_keys
Obligatoire

Clés utilisées pour partitionner le jeu de données en mini-lots. Si la valeur est spécifiée, les données avec la même clé sont partitionnées dans le même mini-lot. Si à la fois partition_keys et mini_batch_size sont spécifiés, une erreur est générée. Il doit s’agir d’une liste d’éléments str, chacun d’entre eux étant une clé utilisée pour partitionner le jeu de données d’entrée. Toutefois, si elle est promue en PipelineParameter, les valeurs par défaut doivent être l’élément str de vidage JSON de la liste, car le type de liste n’est pas pris en charge dans PipelineParameter actuellement. Les entrées doivent être des jeux de données partitionnés et partition_keys doit être un sous-ensemble des clés de chaque jeu de données d’entrée pour que cela fonctionne.

environment_variables
Obligatoire

Dictionnaire des noms et valeurs des variables d’environnement. Ces variables d’environnement sont définies sur le processus où le script utilisateur est en cours d’exécution.

Remarques

La classe ParallelRunConfig est utilisée pour fournir la configuration de la classe ParallelRunStep. ParallelRunConfig et ParallelRunStep peuvent être utilisés conjointement pour traiter de grandes quantités de données en parallèle. Les cas d’usage courants sont l’entraînement d’un modèle ML ou l’exécution de l’inférence hors connexion pour générer des prédictions sur un lot d’observations. ParallelRunStep divise vos données en plusieurs lots qui seront traités en parallèle. La taille du lot, le nombre de nœuds et d’autres paramètres réglables permettant d’accélérer le traitement parallèle peuvent être contrôlés avec la classe ParallelRunConfig. ParallelRunStep peut fonctionner avec l’entrée TabularDataset ou FileDataset.

Pour utiliser ParallelRunStep et ParallelRunConfig :

  • Créez un objet ParallelRunConfig pour spécifier le mode d’exécution du traitement par lots, en définissant les paramètres pour contrôler la taille de lot, le nombre de nœuds par cible de calcul et une référence à votre script Python personnalisé.

  • Créez un objet ParallelRunStep qui utilise l’objet ParallelRunConfig et qui définit les entrées et sorties de l’étape.

  • Utilisez l’objet ParallelRunStep configuré dans un Pipeline comme vous le feriez avec d’autres types d’étapes de pipeline.

Vous trouverez des exemples d’utilisation des classes ParallelRunStep et ParallelRunConfig pour l’inférence de lot dans les articles suivants :


   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
   )

Pour plus d’informations sur cet exemple, consultez le notebook https://aka.ms/batch-inference-notebooks.

Méthodes

load_yaml

Chargez les données de configuration de série de tests parallèle à partir d’un fichier YAML.

save_to_yaml

Exporte les données de configuration de série de tests vers un fichier YAML.

load_yaml

Chargez les données de configuration de série de tests parallèle à partir d’un fichier YAML.

static load_yaml(workspace, path)

Paramètres

Nom Description
workspace
Obligatoire

Espace de travail à partir duquel les données de configuration sont lues.

path
Obligatoire
str

Chemin à partir duquel charger la configuration.

save_to_yaml

Exporte les données de configuration de série de tests vers un fichier YAML.

save_to_yaml(path)

Paramètres

Nom Description
path
Obligatoire
str

Chemin où enregistrer le fichier.