Deep Learning auf Hadoop mit TensorFlow: TonY hilft.

TonY: TensorFlow skaliert mit Hadoop lernen lassen
Keine Kommentare

Die Skalierung von TensorFlow ist ein ressourcenintensives Unterfangen. Hadoop stellt darum eine Interessante Option dafür dar. Mit TonY steht eine Bibliothek zur Verfügung, die die Kombination aus beiden Technologien erleichtert.

Viele Deep Learning-Anwendungsfälle basieren auf TensorFlow, dem populären Framework von Google. Und Hadoop bietet riesige Rechen- und Speicherkapazitäten. Wie wäre es also, wenn man die Vorteile beider Tools zu einer hochskalierbaren Plattform für maschinelles Lernen verbinden würde? Genau das hat sich das Social Network LinkedIn gedacht und die Open Source-Lösung TonY  entwickelt. TonY steht für „TensorFlow on YARN“.

Ähnlich wie MapReduce die Engine für das Ausführen von Pig-/Hive-Scripten auf Hadoop ist und Spark die Engine zum Ausführen von Scala-Code mit Spark-APIs, führt TonY verteilte TensorFlow-Trainings als Hadoop-Applikation aus. Eine Verbindung zwischen einem verteilten TensorFlow und den Skalierungsfähigkeiten von Hadoop herzustellen ist jedoch keineswegs trivial. TensorFlow unterstützt zwar verteiltes Training, aber die Orchestrierung ist nichts, was Data Scientists mal eben nebenher machen – insbesondere, da alles manuell durchgeführt werden muss.

Aus diesen Gründen hat LinkedIn TonY entwickelt, um Anwendern die vollständige Kontrolle über die Ressourcen im Hadoop-Clustern zu lassen.

Bestehende Lösungen, um TensorFlow zu skalieren

TensorFlow on Spark ist eine Open Source-Lösung, mit der TensorFlow auf Apache Spark ausgeführt wird. Die Einsatzmöglichkeiten werden eingeschränkt durch das fehlende GPU Scheduling und heterogenes Container Scheduling. Außerdem müssen Anwender alle zukünftigen Scheduling- und Anwendungsverbesserungen in Spark durchführen, was wesentlich schwieriger ist als Änderungen in einer eigenständigen YARN-Anwendung.

TensorFlowOnYARN ist ein weiteres Open Source-Tool, das als separate Bibliothek ausgeführt wird. Leider wird dieses Projekt nicht mehr gepflegt.

Die Funktionsweise von TonY

TonY besteht aus drei Hauptkomponenten: Client, ApplicationMaster und TaskExecutor. Abbildung 1 zeigt den End-to-End-Prozess zum Ausführen eines TonY-Jobs:

  1. Der Anwender sendet an den Client
    1. den Trainingscode für das TensorFlow-Modell,
    2. die Übergabeparameter und
    3. eine virtuelle Python-Umgebung (die die TensorFlow-Abhängigkeit enthält).
  2. Der Client richtet den ApplicationMaster ein und übergibt ihn dem YARN-Cluster.
  3. Der ApplicationMaster führt die Ressourcenanforderungen mit YARNs Ressource Manager durch, basierend auf den Angaben des Anwenders (Anzahl der Parameter-Server und Worker, Arbeitsspeicher und GPUs).
  4. Sobald der ApplicationMaster Zuweisungen empfängt, erzeugt er TaskExecutors auf den zugewiesenen Nodes.
  5. TaskExecutors starten dann den Trainingscode des Anwenders und warten auf seinen Abschluss.
  6. Der Trainingscode des Anwenders startet und TonY überprüft periodisch den Heartbeat zwischen TaskExecutors und ApplicationMaster.

Abb. 1: TonY-Architektur

Zusätzlich zur Unterstützung der Basisfunktionalität beim Ausführen von verteilten TensorFlow-Jobs auf Hadoop implementiert TonY weitere Funktionen:

GPU Scheduling mit TonY

Kürzlich hat Hadoop die native Unterstützung von GPUs Scheduling und Isolation hinzugefügt. Für Anwender bedeutet das, dass sie sicher sein können, dass Hadoop zuverlässig die Anzahl der angeforderten GPUs für die Containerzuteilungen ermittelt. TonY kennt auch GPU-Ressourcen und ist daher in der Lage, das API von Hadoop für die Anforderung von GPU-Ressourcen aus dem Cluster zu nutzen.

Fein granulierte Ressourcenanforderungen

Da TonY das Anfordern verschiedener Entitäten (z. B. Parameter-Server und Workers) als separate Komponenten unterstützt, kann der Anwender unterschiedliche Ressourcenanforderungen pro Typ vornehmen. Beispielsweise haben Parameter-Server und Worker unterschiedliche Speicheranforderungen. Oder Anwender führen Trainings normalerweise auf GPUs oder anderer spezieller Hardware durch, aber im Einzelfall möchten sie nur normale CPUs auf Parameter-Servern benutzen, da sie für den speziellen Use Case ausreichend sind. Für den Anwender bedeutet dies mehr Kontrolle über die Ressourcenanforderungen seiner Anwendung und Cluster-Administratoren hilft es, Ressourcenverschwendung auf teurer Hardware zu vermeiden.

Unterstützung von TensorBoard

TensorBoard ist ein webbasiertes Tool, um Deep-Learning-Netze und deren Trainingsprozesse grafisch darzustellen. Somit lassen sich TensorFlow-Modelle leichter nachvollziehen und optimieren. Da der TensorBoard-Prozess von einem der Worker an einem Ort gestartet wird, der der Anwendung beim Start des Jobs unbekannt ist, erscheint TensorBoard normalerweise nicht in der Hadoop-Anwenderoberfläche. LinkedIn hat kürzlich Code zu YARN beigesteuert, damit die Tracking-URL der Hadoop-Anwendung so umgeleitet wird, dass sie auf TensorBoard verweist. Damit kann TensorBoard mit einem Klick angezeigt werden.

ML Conference 2018

Making Enterprises Intelligent with Machine Learning

with Dr. Sebastian Wieczorek (SAP)

Machine Learning 101++ using Python

with Dr. Pieter Buteneers (Robovision)

Fehlertoleranz

TensorFlow-Trainingsprozesse können mehrere Stunden bis sogar Wochen dauern, wobei eine große Anzahl von Maschinen verwendet wird. Daher ist ein lang laufender TensorFlow-Job anfällig für vorübergehende Fehler. TensorFlow selbst enthält zwar Fehlertoleranz-APIs, um Prüfpunkte in HDFS zu speichern und den Trainingsstatus von zuvor gespeicherten Prüfpunkten wiederherzustellen. Aber TonY erleichtert diesen Prozess, indem es eine stabile verteilte Infrastruktur bereitstellt, um Ausfälle bei Nodes auszugleichen. Wenn z. B. ein Worker den Heartbeat auf den ApplicationMaster oder einen Timeout nicht ausführt, startet TonY die Anwendung neu und nimmt das Training an früheren Checkpoints wieder auf.

Erste Ergebnisse

LinkedIn hat auf TonY ein asynchrones Training mit dem Inception v3-Modell mit ein bis acht Workern (eine GPU pro Worker) ausgeführt. Dieses Modell ist ein bekanntes neuronales Netzwerk für ImageNet, ein Datensatz, der Millionen von Bildern enthält, die für das Training von Bildklassifikationsmodellen verwendet werden.

Da TonY im Layer arbeitet, der das verteilte TensorFlow orchestriert und die Ausführung des TensorFlow-Jobs nicht beeinträchtigt, gibt es keinen Overhead. In der Tat hat LinkedIn nachgewiesen, dass für das GPU-Training die Laufzeit linear skaliert. Beim GPU-Training wurde eine Beschleunigung um das Vierfache gegenüber dem CPU-Training erreicht, was angesichts der Komplexität und Tiefe des Modells auch zu erwarten war.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -