Pour la formation sur les réseaux neuronaux profonds (DNN) avec TensorFlow, Azure Machine Learning fournit les outils d'évaluation Estimator
classe d'utilisateurs TensorFlow
. L' TensorFlow
évaluation TensorFlow
dans le SDK Azure (à ne pas confondre avec la classe tf.estimator.Estimator
) facilite la soumission de travaux de formation TensorFlow pour des exécutions à nœud unique et distribuées dans des ressources de calcul Azure.

Formation sur site unique
L'apprentissage avec l' TensorFlow
évaluation TensorFlow
similaire à l'utilisation de Estimator
, alors lisez d'abord l'article pratique et apprenez les concepts.
Pour terminer la tâche TensorFlow, vous devez créer un objet TensorFlow
. Vous devez déjà avoir créé l'objet compute_target
de la ressource de calcul cible .
from azureml.train.dnn import TensorFlow script_params = { '--batch-size': 50, '--learning-rate': 0.01, } tf_est = TensorFlow(source_directory='./my-tf-proj', script_params=script_params, compute_target=compute_target, entry_script='train.py', conda_packages=['scikit-learn'], use_gpu=True)
Spécifiez les paramètres suivants dans le constructeur TensorFlow.
Paramètre | DESCRIPTION |
---|
source_directory | Un répertoire local qui contient tout le code nécessaire pour terminer la formation. Ce dossier est copié de l'ordinateur local vers la ressource informatique distante. |
script_params | Un dictionnaire spécifiant les arguments de ligne de commande pour le entry_script formation entry_script sous forme de paires <argument de ligne de commande, valeur>. |
compute_target | Cible de calcul à distance sur laquelle le script de formation s'exécutera. Dans notre cas, il s'agit d'un cluster de l'environnement informatique Azure Machine Learning ( AmlCompute ). |
entry_script | Chemin d'accès au fichier (relatif au source_directory ) du script de formation qui sera exécuté sur la ressource informatique distante. Ce fichier et les fichiers supplémentaires dont il dépend doivent se trouver dans ce dossier. |
conda_packages | Une liste des packages Python requis pour que le script de formation soit installé à l'aide de conda. Dans ce cas, le script de formation utilise sklearn pour télécharger les données, vous devez donc spécifier ce package pour l'installation. Le paramètre pip_packages du constructeur peut être utilisé pour tous les packages pip nécessaires. |
use_gpu | Définissez cet indicateur sur True pour utiliser le GPU pour la formation. La valeur par défaut est False . |
Puisque vous travaillez avec l'outil d'évaluation TensorFlow, le conteneur utilisé pour la formation contiendra par défaut le package TensorFlow et les dépendances associées requises pour la formation sur le CPU et le GPU.
Soumettez ensuite le travail TensorFlow:
run = exp.submit(tf_est)
Formation distribuée
L'outil d'évaluation TensorFlow vous permet également de former des modèles dans les clusters CPU et GPU des machines virtuelles Azure. La formation distribuée TensorFlow est dispensée via plusieurs appels d'API, le service Azure Machine Learning en arrière-plan gérant les fonctionnalités d'infrastructure et d'orchestration nécessaires pour exécuter ces charges de travail.
Azure Machine Learning Services prend en charge deux méthodes d'apprentissage réparties dans TensorFlow.
Horovod
Horovod est une plate-forme open-source distribuée basée sur l'apprentissage en anneau basée sur le développement développée par Uber.
Pour exécuter la formation distribuée TensorFlow à l'aide de la plate-forme Horovod, créez un objet TensorFlow comme suit:
from azureml.train.dnn import TensorFlow tf_est = TensorFlow(source_directory='./my-tf-proj', script_params={}, compute_target=compute_target, entry_script='train.py', node_count=2, process_count_per_node=1, distributed_backend='mpi', use_gpu=True)
Le code ci-dessus montre les nouvelles options suivantes dans le constructeur TensorFlow.
Paramètre | DESCRIPTION | valeur par défaut |
---|
node_count | Le nombre de nœuds à utiliser pour la tâche de formation. | 1 |
process_count_per_node | Le nombre de processus (ou rôles de travail) qui s'exécutent sur chaque nœud. | 1 |
distributed_backend | Le côté serveur pour exécuter l'apprentissage distribué, offert par l'outil d'évaluation MPI. Pour effectuer une formation parallèle ou distribuée (par exemple, node_count > 1 ou process_count_per_node > 1, ou les deux) à l'aide de MPI (et Horovod), définissez distributed_backend='mpi' Azure Machine Learning utilise l'implémentation MPI Open MPI . | None |
Dans l'exemple ci-dessus, la formation distribuée sera effectuée avec deux rôles de travail - un rôle de travail pour chaque nœud.
Horovod et ses dépendances seront installés automatiquement, vous pouvez donc simplement les importer dans le train.py
formation train.py
comme suit:
import tensorflow as tf import horovod
Enfin, soumettez votre travail TensorFlow:
run = exp.submit(tf_est)
Serveur de paramètres
Vous pouvez également démarrer votre propre formation distribuée TensorFlow qui utilise le modèle de serveur de paramètres. Dans cette méthode, la formation est effectuée dans un cluster de serveurs de paramètres et de rôles de travail. Pendant la formation, les rôles de travailleur calculent les gradients et les serveurs de paramètres effectuent un traitement statistique des gradients.
Créez un objet TensorFlow:
from azureml.train.dnn import TensorFlow tf_est = TensorFlow(source_directory='./my-tf-proj', script_params={}, compute_target=compute_target, entry_script='train.py', node_count=2, worker_count=2, parameter_server_count=1, distributed_backend='ps', use_gpu=True)
Faites attention aux paramètres suivants dans le constructeur TensorFlow dans le code ci-dessus.
Paramètre | DESCRIPTION | valeur par défaut |
---|
worker_count | Le nombre de rôles professionnels. | 1 |
parameter_server_count | Le nombre de serveurs de paramètres. | 1 |
distributed_backend | La partie serveur qui sera utilisée pour la formation distribuée. Pour effectuer une formation distribuée à l'aide du serveur de paramètres, définissez la valeur distributed_backend='ps' . | None |
Notes sur TF_CONFIG
Vous aurez également besoin d'adresses et de ports réseau de cluster pour tf.train.ClusterSpec
, de sorte que le service Azure Machine Learning définit automatiquement la TF_CONFIG
environnement TF_CONFIG
.
La TF_CONFIG
environnement TF_CONFIG
est une chaîne JSON. Voici un exemple de variable pour le serveur de paramètres.
TF_CONFIG='{ "cluster": { "ps": ["host0:2222", "host1:2222"], "worker": ["host2:2222", "host3:2222", "host4:2222"], }, "task": {"type": "ps", "index": 0}, "environment": "cloud" }'
Si vous utilisez l' tf.estimator
haut niveau tf.estimator
TensorFlow, tf.estimator
analysera cette variable TF_CONFIG
et formera une spécification de cluster.
Si vous utilisez une API de niveau inférieur pour la formation, vous devez analyser la variable TF_CONFIG
- TF_CONFIG
et créer tf.train.ClusterSpec
dans le code de formation. Dans cet exemple, ces actions sont effectuées dans un script de formation comme suit:
import os, json import tensorflow as tf tf_config = os.environ.get('TF_CONFIG') if not tf_config or tf_config == "": raise ValueError("TF_CONFIG not found.") tf_config_json = json.loads(tf_config) cluster_spec = tf.train.ClusterSpec(cluster)
Après avoir terminé le script de formation et créé l'objet TensorFlow, soumettez la tâche de formation:
run = exp.submit(tf_est)
Des exemples
Pour les blocs-notes d'apprentissage approfondi distribués, consultez le référentiel GitHub
Apprenez à exécuter des blocs-notes en suivant les instructions d'un article sur la façon d'apprendre ce service avec les blocs-notes Jupyter .
Information additionnelle