Horizontales Skalieren von Deep Learning Frameworks
Bachelor Thesis von Sebastian Jäger, 31.01.2018
In dieser Arbeit werden generische Deep Learning Frameworks für die Programmiersprache Python auf deren horizontale Skalierbarkeit beim Training von Neuronalen Netzen experimentell evaluiert.
Hierzu werden zuerst Kriterien definiert, die dafür von Nutzen sind, um TensorFlow und MXNet für die Evaluation auszuwählen. Um eine möglichst umfangreiche Bewertung zu erreichen, wurde mit jedem der Frameworks sowohl ein Convolutional Neural Network, als auch ein Recurrent Neural Network implementiert. Für die Experimente werden die zwei gängigen Datensätze Fashion-MNIST und PTB verwendet, um den Durchsatz in Batches pro Sekunde zu messen. Die Skalierbarkeit wird mithilfe der Metrik Speedup berechnet. Weiter wird für die Experimente die Kubernetes Engine der Google Cloud Platform genutzt, deren Knoten jeweils mit einer CPU des Typs 2.5 GHz Intel Xeon E5 v2 bestückt sind. Dabei wurde gezeigt, dass die Implementierung von Neuronalen Netzen mit MXNet effizienter ist, TensorFlow jedoch bessere Skalierungseigenschaften aufweisen kann. Trotzdem gelang es TensorFlow lediglich in einem der Experimente, einen höheren Durchsatz zu erzielen.
1. Einführung
Der Hype Cycle des Unternehmens Gartner zeigt die verschiedensten Technologien in den unterschiedlichen Phasen auf ihrem Weg zur Produktivität. Ein Begriff, der im vergangenen Jahr 2017 auf der Spitze seines Hypes abgebildet wurde, ist Deep Learning[1].
Für den Begriff Deep Learning existieren diverse Definitionen. Einige Experten dieses Gebiets, darunter auch Ian Goodfellow, Yoshua Bengio und Aaron Courville, beschreiben Deep Learning als das Erlernen von diversen Merkmalen auf unterschiedlich abstrakten Ebenen. Dabei werden die Merkmale der jeweils niedrigeren Abstraktionsschicht verwendet und zu komplexeren aggregiert. [2, 11] Andere hingegen beschreiben Deep Learning konkreter als das Verwenden von Neuronalen Netzwerken, wobei der Begriff deep dafür steht, dass die eingesetzten Netze aus vielen Schichten bestehen [7]. Die Definitionen teilen, dass Deep Learning ein Bereich des Maschinellen Lernens und somit auch Teil des Forschungsgebiets der Künstlichen Intelligenz ist. Der Bereich des Maschinellen Lernens befasst sich damit, Algorithmen zu entwerfen, die selbständig und ohne explizite Implementierung von Trainingsdatensätzen lernen, wie sie sich bei zukünftigen Daten verhalten sollen oder versuchen, Vorhersagen über zukünftige Daten zu treffen.
Der Aufschwung von Deep Learning lässt sich ebenfalls an vielen Produkten und Services festmachen, die Neuronale Netze einsetzen, um das Benutzererlebnis zu verbessern. Beispielsweise ist es bei Facebook seit 2015 möglich, beim Hochladen von Bildern Freunde automatisch vom System markieren zu lassen. Das dahinter verborgene Projekt nennt sich DeepFace, das mithilfe von älteren bereits markierten Bildern lernt, Gesichter zu unterscheiden und diese den Personen korrekt zuzuordnen. [27] Ende des Jahres 2016 hat das Unternehmen Google angekündigt, dass der Service Google Translate zukünftig die Übersetzung zwischen englischen und chinesischen Texten mithilfe von Neuronalen Netzen erstellt [32].
Auch bei Empfehlungssystemen, wie sie beispielsweise bei YouTube oder Google Play verwendet werden, wurden Verbesserungen durch die Verwendung von Neuronalen Netzen erzielt [4, 5].
1.1. Motivation
Weil das Trainieren vor allem bei großen Neuronalen Netzen, wie sie in Projekten eingesetzt werden, die im vorherigen Abschnitt beschrieben sind, sehr viel Rechenleistung und ebenso viel Zeit in Anspruch nimmt, wurde deren Code schon früh optimiert. Zu diesen Optimierungen gehören nicht nur effizientere Algorithmen und Implementierungen, sondern auch das Auslagern von rechenintensiven Aufgaben auf verfügbare Grafikkarten. Um Entwickler:innen das Verwenden von Neuronalen Netzen zu erleichtern, wurden Deep Learning Frameworks programmiert, die die Komplexität der Optimierungen abstrahieren.
Frühe Entwicklungen von Deep Learning Frameworks waren besonders darauf ausgelegt, die Verwendung Neuronaler Netze zu erleichtern. Durch das Wachstum der Netze, aber auch durch die Weiterentwicklung hin zu komplexeren Netztypen, stieg der benötigte Bedarf an Rechenleistung zum Trainieren weiter, bis über die physikalischen Grenzen der Rechenleistung einer Maschine hinaus. Somit wurde es zunehmend wichtiger, dass Frameworks das verteilte Trainieren von Neuronalen Netzen unterstützen. Auf dieser Basis sind neue Deep Learning Frameworks entstanden, die bei deren Entwicklung auch die horizontale Skalierbarkeit fokussierten und daher Mechanismen bieten können, um das Training über mehrere Maschinen zu verteilen.
Es zeigt sich, dass derzeit eine Vielzahl von Deep Learning Frameworks zur Verfügung steht. Für Entwickler, die Neuronale Netze einsetzen, stellt sich die Frage: Welches Framework ist das beste um eine gegebene Problemstellung zu bearbeiten. Ein wichtiger Punkt, beim Beantworten dieser Frage, ist die Trainingsperformanz, die bei modernen Neuronalen Netzen ausschlaggebend von der horizontalen Skalierbarkeit des Frameworks mit beeinflusst wird.
In Zeiten diverser Cloud-Angebote unterschiedlichster Anbieter ist eine naheliegende Idee, diese zum Trainieren der Neuronalen Netze zu verwenden. Der große Vorteil hierbei ist, dass die enorme Rechenleistung, die zum Trainieren nötig ist, nicht gekauft werden muss. Kosten, die durch nicht genutzte Hardware entstehen, können, dank sekundengenauer Abrechnungen bei Cloud-Angebote, minimiert werden, da lediglich für die genutzte Rechenzeit gezahlt wird.
1.2 Zielsetzung
Das Ziel der vorliegenden Arbeit ist die experimentelle Evaluation von generischen Deep Learning Frameworks für die Programmiersprache Python in Hinblick auf das horizontale Skalieren.
Generisch bedeutet, dass ein Framework nicht auf eine bestimmte Anwendungsdomäne beschränkt ist, sondern in möglichst vielen Bereichen eingesetzt werden kann. Das heißt, die Frameworks sollten mindestens die gängigsten Netzarchitekturen unterstützten. Der Grund für die Verwendung der Programmiersprache Python ist deren weite Verbreitung im Bereich Data Science. Dieser ist das Hauptanwendungsgebiet von Maschinellem Lernen und Neuronalen Netzen. Durch die Verwendung von Python soll Entwickler:innen der Einstieg in das Implementieren Neuronaler Netze erleichtert werden.
Dabei soll evaluiert werden, wie sich diverse Frameworks beim Trainieren unterschiedlicher Neuronaler Netzarten verhalten. Speziell die Veränderung der Performanz in Abhängigkeit der Worker-Maschinen-Anzahl und des Netztyps ist hierbei von Interesse.
1.3 Aufbau dieser Arbeit
Zunächst werden in Kapitel 2 die Grundlagen von Neuronalen Netzen erläutert. Anschließend wird beschrieben, wie Neuronale Netze trainiert werden. Bevor auf die horizontalen Skalierungsmöglichkeiten des Trainings mit unterschiedlichen Parallelisierungsarten eingegangen wird, werden gesondert sowohl Convolutional Neural Networks, als auch Recurrent Neural Networks erläutert.
Das dritte Kapitel beschäftigt sich mit der Definition unterschiedlicher Kriterien, die aus der Zielsetzung des vorherigen Abschnitts abgeleitet werden. Anschließend sind diverse Frameworks und deren Eigenschaften beschrieben, mit deren Hilfe eine Auswahl für die experimentelle Evaluation getroffen wird.
In Kapitel 4 ist der Versuchsaufbau der experimentellen Evaluation beschrieben. Dabei wird zuerst diskutiert, welche Aufgabengebiete herangezogen werden, um einen möglichst umfangreichen Vergleich der Frameworks zu erzielen. Anschließend werden die zur Evaluation verwendeten Metriken und Datensätze vorgestellt und die Umgebungsbedingungen des Versuchsaufbaus erläutert.
Im fünften Kapitel werden eingangs die verwendeten Technologien beschrieben und anschließend aufgezeigt, wie mit diesen die infrastrukturelle Umgebung der Versuche implementiert ist. Im zweiten Teil des Kapitels sind die Implementierungen der Neuronalen Netze, sowie frameworkabhängigen Besonderheiten des verteilten Trainings erläutert.
Das Kapitel 6 beschreibt unterschiedliche Experimente und schließt mit einer Bewertung der Messergebnisse und der Frameworks selbst.
[…]