Schulung von TensorFlow-Modellen mit Azure Machine Learning Service

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.

ParameterBESCHREIBUNG
source_directoryEin 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_paramsEin Wörterbuch, das Befehlszeilenargumente für das Trainingsskript entry_script als Paare <Befehlszeilenargument, Wert> entry_script .
compute_targetDas Remote-Berechnungsziel, auf dem das Trainingsskript ausgeführt wird. In unserem Fall ist dies ein Cluster der Azure Machine Learning Computing-Umgebung ( AmlCompute ).
entry_scriptDer 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_packagesEine 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_gpuSetzen 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.

ParameterBESCHREIBUNGStandardwert
node_countDie Anzahl der Knoten, die für die Trainingsaufgabe verwendet werden sollen.1
process_count_per_nodeDie Anzahl der Prozesse (oder Arbeitsrollen), die auf jedem Knoten ausgeführt werden.1
distributed_backendDie 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.

ParameterBESCHREIBUNGStandardwert
worker_countDie Anzahl der Arbeitsrollen.1
parameter_server_countDie Anzahl der Parameterserver.1
distributed_backendDer 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


Source: https://habr.com/ru/post/de442120/


All Articles