Entraînement distribué avec des conteneurs

Cette page explique le système de compatibilité des conteneurs personnalisés avec la structure d'entraînement distribué sur AI Platform Training.

Avec des conteneurs personnalisés, vous pouvez procéder à un entraînement distribué à l'aide de n'importe quel framework de ML acceptant la distribution. Bien que la terminologie employée ici repose sur le modèle distribué de TensorFlow, vous pouvez recourir à tout autre framework de ML présentant une structure de distribution similaire. Par exemple, l'entraînement distribué dans MXNet utilise un programmeur, des nœuds de calcul et des serveurs. Cela correspond à la structure d'entraînement distribué des conteneurs personnalisés AI Platform Training, qui utilise un maître, des nœuds de calcul et des serveurs de paramètres.

Structure du cluster d'entraînement

Si vous exécutez une tâche d'entraînement distribué avec AI Platform Training, vous spécifiez plusieurs machines (nœuds) dans un cluster d'entraînement. Le service d'entraînement alloue les ressources pour les types de machines que vous spécifiez. La tâche en cours d'exécution sur un nœud spécifique s'appelle une instance dupliquée. Conformément au modèle TensorFlow distribué, chaque instance dupliquée du cluster d'entraînement se voit attribuer un seul rôle ou une seule tâche dans l'entraînement distribué :

  • Nœud de calcul maître : une seule instance dupliquée est désignée comme nœud de calcul maître (également appelé nœud de calcul principal). Cette tâche gère les autres instances et consigne l'état de la tâche dans sa globalité.

  • Nœud(s) de calcul : une ou plusieurs instances dupliquées peuvent être désignées comme nœuds de calcul. Ces instances dupliquées exécutent ce qui leur incombe conformément à la configuration de la tâche.

  • Serveur(s) de paramètres : une ou plusieurs instances dupliquées peuvent être désignées comme serveurs de paramètres. Ces instances dupliquées stockent les paramètres du modèle et coordonnent l'état du modèle partagé entre les nœuds de calcul.

  • Évaluateur{s} : une ou plusieurs instances dupliquées peuvent être désignées comme évaluateurs. Ces instances dupliquées peuvent être utilisées pour évaluer votre modèle. Si vous utilisez TensorFlow, notez que celui-ci s'attend généralement à ce que vous n'utilisiez pas plus d'un évaluateur.

Mappage d'API

Les quatre rôles différents que vous pouvez attribuer aux machines de votre cluster d'entraînement correspondent à quatre champs à spécifier dans TrainingInput, qui représente les paramètres d'entrée d'une tâche d'entraînement :

  • masterConfig.imageUri représente l'URI de l'image du conteneur à exécuter sur le nœud de calcul maître.
  • Les champs workerConfig.imageUri, parameterServerConfig.imageUri et evaluatorConfig.imageUri représentent les URI d'image de conteneur à exécuter respectivement sur les nœuds de calcul, les serveurs et les évaluateurs. Si aucune valeur n'est définie pour ces champs, AI Platform Training utilise la valeur de masterConfig.imageUri.

Vous pouvez également définir les valeurs de chacun de ces champs avec leurs indicateurs correspondants dans gcloud ai-platform jobs submit training :

  • Pour la configuration du nœud de calcul maître, utilisez --master-image-uri.
  • Pour la configuration des nœuds de calcul, utilisez --worker-image-uri.
  • Pour la configuration des serveurs de paramètres, utilisez --parameter-server-image-uri.
  • Il n'existe actuellement aucune option permettant de spécifier l'URI de l'image du conteneur pour les évaluateurs. Vous pouvez spécifier evaluatorConfig.imageUri dans un fichier de configuration config.yaml.

Consultez un exemple illustrant comment envoyer une tâche d'entraînement distribué avec des conteneurs personnalisés.

Fonctionnement de CLUSTER_SPEC

AI Platform Training insère une variable d'environnement, CLUSTER_SPEC, sur chaque instance dupliquée afin de décrire la façon dont le cluster global est configuré. À l'instar de la variable d'environnement TF_CONFIG de TensorFlow, CLUSTER_SPEC décrit chaque instance dupliquée du cluster, y compris son index et son rôle (nœud de calcul maître, nœud de calcul ou évaluateur).

Lorsque vous procédez à un entraînement distribué avec TensorFlow, TF_CONFIG est analysé pour créer tf.train.ClusterSpec. De même, lorsque vous réalisez un entraînement distribué avec d'autres frameworks de ML, vous devez analyser CLUSTER_SPEC pour insérer les variables d'environnement ou les paramètres requis par le framework.

Format de CLUSTER_SPEC

La variable d'environnement CLUSTER_SPEC est une chaîne JSON au format suivant :

Clé Description
"cluster" Description du cluster pour votre conteneur personnalisé. Comme avec TF_CONFIG, cet objet est au format de spécification de cluster TensorFlow et peut être transmis au constructeur de tf.train.ClusterSpec.
"task" Décrit la tâche du nœud spécifique sur lequel s'exécute votre code. Vous pouvez exploiter ces informations pour rédiger du code pour des nœuds de calcul spécifiques dans une tâche distribuée. Cette entrée est un dictionnaire contenant les clés suivantes :
"type" Type de tâche effectuée par ce nœud Les valeurs possibles sont master, worker, ps et evaluator.
"index" Index basé sur zéro de la tâche. La plupart des jobs d'entraînement distribué comprennent une tâche maîtresse, un ou plusieurs serveurs de paramètres, ainsi qu'un ou plusieurs nœuds de calcul.
"trial" Identifiant de l'essai de réglage des hyperparamètres en cours d'exécution. Lorsque vous configurez le réglage des hyperparamètres pour votre tâche, vous définissez un nombre d'essais d'entraînement. Cette valeur vous permet de différencier, au sein de votre code, les essais qui s'exécutent. L'identifiant est une valeur de chaîne contenant le numéro d'essai qui démarre à partir de 1.
"job" Paramètres de job que vous avez utilisés lorsque vous avez démarré le job. Dans la plupart des cas, vous pouvez ignorer cette entrée, car elle réplique les données transmises à l'application via ses arguments de ligne de commande.

Comparaison avec TF_CONFIG

Notez qu'AI Platform Training définit également la variable d'environnement TF_CONFIG sur toutes les instances dupliquées des tâches d'entraînement. AI Platform Training ne définit la variable d'environnement CLUSTER_SPEC que sur les instances dupliquées des tâches d'entraînement de conteneurs personnalisés. Les deux variables d'environnement partagent certaines valeurs, mais elles ont des formats différents.

Lorsque vous effectuez un entraînement avec des conteneurs personnalisés, l'instance dupliquée maître est étiquetée par défaut avec le nom de la tâche master dans la variable d'environnement TF_CONFIG. Vous pouvez la configurer pour qu'elle soit étiquetée avec le nom de tâche chief en définissant le champ trainingInput.useChiefInTfConfig sur true lorsque vous créez votre tâche d'entraînement, ou en utilisant une ou plusieurs instances dupliquées désignées comme évaluateurs dans votre tâche. Ceci est particulièrement utile si votre conteneur personnalisé utilise TensorFlow 2.

Outre cette option de configuration, l'entraînement distribué avec TensorFlow fonctionne de la même manière avec les conteneurs personnalisés qu'avec une version d'exécution d'AI Platform Training. Découvrez plus de détails et des exemples sur la façon d'utiliser TF_CONFIG pour l'entraînement distribué sur AI Platform Training.

Étape suivante