Für das DNN-Training (Deep Neural Network) mit TensorFlow bietet Azure Machine Learning die TensorFlow
der TensorFlow
Benutzerklasse Estimator
. Das TensorFlow
Bewertungstool im Azure SDK (nicht zu verwechseln mit der Klasse tf.estimator.Estimator
) erleichtert das tf.estimator.Estimator
TensorFlow-Schulungsjobs für tf.estimator.Estimator
und verteilte Läufe in Azure-Rechenressourcen.

Single-Site-Schulung
Das Lernen mit dem TensorFlow
Bewertungstool ähnelt der Verwendung Estimator
Lesen Sie daher zuerst den Artikel mit Anleitungen und lernen Sie die Konzepte kennen.
Um die TensorFlow-Aufgabe abzuschließen, müssen Sie ein TensorFlow
Objekt erstellen. Sie sollten das compute_target
Objekt der Zielberechnungsressource bereits erstellt haben.
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)
Geben Sie die folgenden Parameter im TensorFlow-Konstruktor an.
Parameter | BESCHREIBUNG |
---|
source_directory | Ein lokales Verzeichnis, das den gesamten Code enthält, der zum Abschließen des Trainings erforderlich ist. Dieser Ordner wird vom lokalen Computer auf die Remote-Computing-Ressource kopiert. |
script_params | Ein Wörterbuch, das Befehlszeilenargumente für das Trainingsskript entry_script als Paare <Befehlszeilenargument, Wert> entry_script . |
compute_target | Das Remote-Berechnungsziel, auf dem das Trainingsskript ausgeführt wird. In unserem Fall ist dies ein Cluster der Azure Machine Learning Computing-Umgebung ( AmlCompute ). |
entry_script | Der Pfad zur Datei (relativ zu source_directory ) des Trainingsskripts, das auf der Remote-Computing-Ressource ausgeführt wird. Diese Datei und weitere Dateien, von denen sie abhängt, sollten sich in diesem Ordner befinden. |
conda_packages | Eine Liste der Python-Pakete, die erforderlich sind, damit das Trainingsskript mit conda installiert werden kann. In diesem Fall verwendet das Trainingsskript sklearn zum Herunterladen von Daten. sklearn müssen Sie dieses Paket für die Installation angeben. Der Parameter pip_packages des Konstruktors kann für alle erforderlichen Pip-Pakete verwendet werden. |
use_gpu | Setzen Sie dieses Flag auf True , um die GPU für das Training zu verwenden. Der Standardwert ist False . |
Da Sie mit dem TensorFlow-Evaluierungstool arbeiten, enthält der für das Training verwendete Container standardmäßig das TensorFlow-Paket und die zugehörigen Abhängigkeiten, die für das Training in der CPU und der GPU erforderlich sind.
Senden Sie dann den TensorFlow-Job:
run = exp.submit(tf_est)
Verteiltes Training
Mit dem TensorFlow-Bewertungstool können Sie auch Modelle in den CPU- und GPU-Clustern von virtuellen Azure-Maschinen trainieren. Das verteilte TensorFlow-Training wird über mehrere API-Aufrufe bereitgestellt, wobei der Azure Machine Learning-Dienst im Hintergrund die Infrastruktur- und Orchestrierungsfunktionen verwaltet, die zum Abschließen dieser Workloads erforderlich sind.
Azure Machine Learning Services unterstützt zwei verteilte Lernmethoden in TensorFlow.
Horovod
Horovod ist eine Open-Source-Plattform für verteiltes Lernen auf Ring-Allreduce-Basis, die von Uber entwickelt wurde.
Erstellen Sie ein TensorFlow-Objekt wie folgt, um verteiltes TensorFlow-Training mithilfe der Horovod-Plattform auszuführen:
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)
Der obige Code zeigt die folgenden neuen Optionen im TensorFlow-Konstruktor.
Parameter | BESCHREIBUNG | Standardwert |
---|
node_count | Die Anzahl der Knoten, die für die Trainingsaufgabe verwendet werden sollen. | 1 |
process_count_per_node | Die Anzahl der Prozesse (oder Arbeitsrollen), die auf jedem Knoten ausgeführt werden. | 1 |
distributed_backend | Die Serverseite zum Ausführen von verteiltem Lernen, die vom MPI-Bewertungstool angeboten wird. Um paralleles oder verteiltes Training (z. B. node_count > 1 oder process_count_per_node > 1 oder beides) mit MPI (und Horovod) durchzuführen, setzen Sie distributed_backend='mpi' Azure Machine Learning verwendet die MPI Open MPI- Implementierung. | None |
Im obigen Beispiel wird ein verteiltes Training mit zwei Arbeitsrollen durchgeführt - einer Arbeitsrolle für jeden Knoten.
Horovod und seine Abhängigkeiten werden automatisch installiert, sodass Sie sie einfach wie folgt in das Trainingsskript train.py
importieren können:
import tensorflow as tf import horovod
Senden Sie abschließend Ihren TensorFlow-Job:
run = exp.submit(tf_est)
Parameter Server
Sie können auch ein eigenes verteiltes TensorFlow-Training starten, das das Parameterservermodell verwendet. Bei dieser Methode wird das Training in einem Cluster von Parameterservern und Arbeitsrollen durchgeführt. Während des Trainings berechnen Worker-Rollen Gradienten und Parameterserver führen eine statistische Verarbeitung von Gradienten durch.
Erstellen Sie ein TensorFlow-Objekt:
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)
Beachten Sie die folgenden Parameter im TensorFlow-Konstruktor im obigen Code.
Parameter | BESCHREIBUNG | Standardwert |
---|
worker_count | Die Anzahl der Arbeitsrollen. | 1 |
parameter_server_count | Die Anzahl der Parameterserver. | 1 |
distributed_backend | Der Serverteil, der für verteiltes Training verwendet wird. Um verteiltes Training mit dem Parameterserver durchzuführen, setzen Sie den Wert distributed_backend='ps' . | None |
Hinweise zu TF_CONFIG
Sie benötigen außerdem Cluster-Netzwerkadressen und tf.train.ClusterSpec
für tf.train.ClusterSpec
, damit der Azure Machine Learning-Dienst die Umgebungsvariable TF_CONFIG
automatisch festlegt.
Die Umgebungsvariable TF_CONFIG
ist eine JSON-Zeichenfolge. Das Folgende ist eine Beispielvariable für den Parameterserver.
TF_CONFIG='{ "cluster": { "ps": ["host0:2222", "host1:2222"], "worker": ["host2:2222", "host3:2222", "host4:2222"], }, "task": {"type": "ps", "index": 0}, "environment": "cloud" }'
Wenn Sie die High-Level-API tf.estimator
TensorFlow verwenden, tf.estimator
TensorFlow diese TF_CONFIG
Variable und bildet eine Clusterspezifikation.
Wenn Sie eine untergeordnete API für das Training verwenden, müssen Sie die Variable TF_CONFIG
analysieren und im Trainingscode tf.train.ClusterSpec
erstellen. In diesem Beispiel werden diese Aktionen in einem Trainingsskript wie folgt ausgeführt:
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)
Senden Sie nach Abschluss des Schulungsskripts und Erstellen des TensorFlow-Objekts die Schulungsaufgabe:
run = exp.submit(tf_est)
Beispiele
Informationen zu verteilten Deep-Learning-Notizbüchern finden Sie im GitHub-Repository
Erfahren Sie, wie Sie Notebooks ausführen, indem Sie den Anweisungen in einem Artikel zum Erlernen dieses Dienstes mit Jupyter-Notebooks folgen .
Weitere Informationen