Machine Learning im Kubernetes-Cluster

Seite 2: ML-Trainingsumgebungen teilen und skalieren

Inhaltsverzeichnis

Kubernetes verwendet Container-Technologien wie Docker, um Workloads auszuführen. Container und die damit einhergehende Isolation der Workloads vereinfachen es, nachvollziehbare und reproduzierbare Experimente zu entwickeln. Für jede Trainingsumgebung, also jede Kombination spezifischer Versionen der verwendeten Programmiersprache, Bibliotheken und Frameworks, lässt sich ein dedizierter und wiederverwendbarer Container bauen und wiederholt einsetzen. Dadurch erhalten auch mehrere Data Scientists gleichzeitig die Möglichkeit, auf demselben Cluster zu arbeiten. Die Isolation der Container untereinander stellt sicher, dass sich Experimente mit verschiedenen Trainingsumgebungen zeitgleich ausführen lassen, ohne dass sie sich gegenseitig stören.

Soll das Training von Modellen skalieren, hilft Kubernetes ebenfalls. Dann genügt es, das Training mit mehreren Workern in Form weiterer Pods zu starten. Kubernetes führt diese auf Nodes mit genügend Ressourcen aus und nimmt alle nötigen Anpassungen für die Kommunikation vor, ohne dass weitere manuelle Schritte wie das Verteilen von IP-Adressen für die Kommunikation nötig sind. Kubernetes vereinfacht auch das Skalieren des Clusters. Wenn neue Maschinen hinzukommen, ist lediglich Kubernetes zu installieren. Weitere Software ist nicht erforderlich, da die Ausführungsumgebung der Experimente bereits in den Containern zur Verfügung steht.

Einen Nachteil früherer Kubernetes-Versionen beim Entwickeln von Machine-Learning-Anwendungen auf einem Cluster behebt Kubernetes 1.6: Auch containerisierte Workloads können nun die Rechenkapazität von GPUs nutzen.

Bestehende Umgebungen und Experimente lassen sich jedoch nicht ohne Anpassungen auf einem Kubernetes-Cluster ausführen. Dadurch entsteht ein gewisser Migrationsaufwand beim Wechsel auf Kubernetes. Außerdem erfordert das Arbeiten auf solchen Systemen in der Regel eine Einarbeitungs- und Eingewöhnungszeit.

Durch den Einsatz von Kubernetes ergeben sich die folgenden Vor- und Nachteile gegenüber einem ohne Kubernetes verwalteten Cluster:

  • vereinfacht den Umgang mit mehreren Trainingsumgebungen.
  • vereinfacht das Teilen des Clusters zwischen mehreren Usern.
  • Skalieren des Clusters und der Workloads einfacher, aber Migrationsaufwand sowie Einarbeitungs- und Eingewöhnungszeit nötig.

Kubernetes kann bei der Entwicklung von Machine-Learning-Anwendungen helfen. Jedoch ist es nicht immer ohne weiteres möglich, bestehende Softwareumgebungen sinnvoll zu containerisieren. Auch kann die Implementierung und Verwaltung von Kubernetes-Objekten umständlich sein. Da Kubernetes zurzeit der am weitesten verbreitete Clustermanager ist, bemüht sich eine große Community darum, das Arbeiten mit Kubernetes weiter zu vereinfachen und Kubernetes-native Anwendungen zu entwickeln.

Helm ist ein Paketmanager für Kubernetes (helm.sh). Damit lassen sich verschiedene Kubernetes-Objekte, die logisch eine Applikation ergeben, zu einem sogenannten Chart zusammenfassen. Charts lassen sich versionieren und mit anderen Entwicklern als Code oder über sogenannte Chart Repositories teilen. Auch eine öffentliche Sammlung von Helm Charts steht Entwicklern zur Verfügung.

Die Template Engine erlaubt es, Kubernetes-Objekte durch Verwendung von Templates zu erzeugen. Dabei ist es nicht nur möglich, einfache Werte in Abhängigkeit einer Konfigurationsdatei oder eines Arguments zu ersetzen, die Engine unterstützt auch komplexere Kontrollstrukturen wie Schleifen und Bedingungen.

Mehr Infos

Eine kleine Helm-Kunde

Im Rahmen der Artikelserie "Die Werkzeugkiste" stellen Entwickler auf heise Developer nützliche Tools vor.
Die Werkzeugkiste #1 ist dem Paketmanager Helm gewidmet: Helm – Kubernetes-Deployments richtig gemacht.

Ein großer Vorteil von Helm ist die Möglichkeit, die entwickelten Charts einfach wiederverwenden zu können. Das Training von Modellen lässt sich dadurch nicht nur problemlos horizontal skalieren, indem man in Abhängigkeit eines Arguments entsprechend viele Worker Pods erzeugt, sondern es lässt sich durch Austausch des Containers ebenso komfortabel in unterschiedlichen Trainingsumgebungen ausführen. Darüber hinaus kann Helm alle Objekte einer neu gestarteten Anwendung (meist das Training von Modellen) überwachen und gemeinsam wieder beenden.

Helm erleichtert die Arbeit mit Kubernetes unabhängig von der Anwendungsdomäne dadurch, dass sich logisch zusammenhängende Objekte gemeinsam starten oder beenden lassen. Dank der Template Engine lassen sich die Objekte zudem generisch und wiederverwendbar gestalten.