Machine Learning im Kubernetes-Cluster

Eine Cluster-Management-Software wie Kubernetes bietet Methoden und Tools, die Data Scientists beim Entwickeln von Machine-Learning-Anwendungen sinnvoll unterstützen.

In Pocket speichern vorlesen Druckansicht
Maschinelles Lernen mit Apache Spark 2
Lesezeit: 15 Min.
Von
  • Sebastian Jäger
Inhaltsverzeichnis

Das Management eines Clusters gestaltet sich komplex. Sollen darauf Machine-Learning-Anwendungen entwickelt werden, kommen weitere Herausforderungen hinzu. Das Training von Modellen ist eine sehr rechenintensive Aufgabe, vor allem wegen der großen Zahl von Trainingsdaten, die benötigt wird. Zur Beschleunigung lässt sich das Training meist horizontal skalieren. Seit dem Siegeszug von den beim Deep Learning eingesetzten künstlichen neuronalen Netzen reicht dies jedoch häufig nicht mehr aus. Das Verwenden von GPUs oder TPUs ist für das Trainieren größerer Netze unabdingbar geworden – beim Anwenden der Modelle kommt man jedoch auch ohne die spezialisierten Prozessoren aus. Der Einsatz heterogener Maschinen erhöht allerdings die Komplexität des Clusters weiter.

Im Bereich des Machine Learning wird eine Vielzahl unterschiedlicher Programmiersprachen, Bibliotheken und Frameworks verwendet. Darunter leiden mitunter die Nachvollziehbarkeit und die Reproduzierbarkeit der Experimente, da unter Umständen nicht nachvollziehbar ist, mit welchen spezifischen Versionen die Ergebnisse erzielt wurden.

In Verbindung mit weiteren Tools kann die Cluster-Management-Software Kubernetes Data Scientists helfen, Machine-Learning-Projekte effizient und erfolgreich umzusetzen.

Kubernetes ist ein Clustermanager, der zum Orchestrieren von Containern dient. Das Mitte 2014 von Google gestartete Projekt lag bereits ein gutes Jahr später in Version 1.0 vor und rückte unter das Dach der neu gegründeten Cloud Native Computing Foundation.

Kubernetes gruppiert ein oder mehrere Container in "Pods", die die kleinste deploybare Einheit darstellen. Diese werden von Kubernetes auf einem "Node" ausgeführt, der alle Anforderungen des Pods erfüllt. Dazu gehören vor allem die verfügbaren Ressourcen. Jeder Pod erhält eine IP-Adresse, über die ihn andere erreichen können. Diese IP-Adressen sind jedoch flüchtig und können sich bei einem Neustart des Pods ändern.

Beispielhafte Architektur eines Kubernetes-Clusters.

Um eine stabile Kommunikation zu erreichen, bietet Kubernetes sogenannte "Services" an. Ein cluster-interner DNS lässt sich verwenden, um ihren Namen auf eine Adresse aufzulösen. Ein Service dient lediglich als Load Balancer und reicht einkommende Nachrichten an die ihm zugeordneten Pods weiter – er kann also auch als Load Balancer fungieren. Mit Hilfe von "Labels" lassen sich Objekte (Node, Pod, Service etc.) mit Informationen versehen. Die sind einfache Key-Value-Paare. Bei Services werden Labels verwendet, um die zugeordneten Pods zu selektieren. Beim Ausführen von Pods können sie ein Kriterium für die Entscheidung sein, auf welchem Node der Pod ausgeführt wird.

Kubernetes überwacht den Ist-Zustand der Objekte ständig und vergleicht diesen mit dem Soll-Zustand der Objektdefinitionen. Bei Unterschieden ergreift Kubernetes automatisch Maßnahmen, um den Soll-Zustand zu erreichen. Stürzt zum Beispiel ein Pod oder sogar ein ganzer Node ab, erkennt Kubernetes das und startet die fehlenden Pods auf einem anderen Node neu. Kubernetes ist nicht nur fehlertolerant gegenüber dem Ausfall von Nodes, sondern ermöglicht es auch, die Anzahl der Knoten im laufenden Betrieb zu ändern.