Kubeflow

24.04.2023 Frederik Möllers
Tech Artificial Intelligence Machine Learning

Was ist Kubeflow?

Arbeitet man mit Machine Learning, so ist es oft notwendig, mehrere Tools zu verwenden, um ein Modell zu entwickeln und zu bereitstellen. Gleichzeitig werden je nach Anwendungsfall relativ viel Rechenleistung und spezielle Hardware wie GPUs mit hoher Speicherkapazität oder auch TPUs benötigt, um die Modelle in einer akzeptablen Zeit zu trainieren.

Eine Möglichkeit, diese Herausforderungen zu bewältigen, besteht darin die Modelle direkt in der Cloud zu trainieren, zum Beispiel mit SageMaker von AWS. Desweiteren gibt es Open-Source Platformen wie Kubeflow und MLFlow, welche man auf seiner eigenen Hardware deployen kann oder auch as a Service nutzen kann. In diesem TechUp werden wir auf Kubeflow eingehen, welches wir as a Service von Civo (https://www.civo.com/machine-learning) nutzen werden, welches aktuell in der Beta zur Verfügung steht.

Kubeflow bietet eine Plattform, die diese Tools und Ressourcen zusammenführt und so den gesamten Workflow vereinfacht. Es ist eine Open-Source-Plattform für maschinelles Lernen (ML), die auf Kubernetes aufbaut. Kubeflow bietet eine breite Palette von Tools und Funktionen, die die Komplexität des ML-Workflows reduzieren und den Entwicklungsprozess beschleunigen, von der Datenvorbereitung über das Training bis hin zur Bereitstellung von Modellen in der Produktion.

Installation und Bereitstellung

Kubeflow lässt sich, wie der Name schon vermuten lässt, auf Kubernetes-Clustern bereitstellen. Ob man einen self-managed Cluster oder Angebote in der Cloud wie AWS EKS, Google GKE oder Azure AKS nutzt, spielt dabei keine Rolle. Da ML-Workflows sehr rechenintensiv sein können und sich häufig stark durch GPUs beschleunigen lassen, ist es wichtig, dass der Cluster entsprechend dimensioniert ist.

Darüber hinaus gibt es mittlerweile auch Anbieter, die Kubeflow as a Service anbieten (wie Civo, welches in diesem TechUp verwendet wird), was das Setup und die Verwaltung von Kubeflow erheblich vereinfacht.

Vorteile von Kubeflow

Eine der wichtigen Eigenschaften von Kubeflow ist seine Flexibilität bezüglich der Vielzahl von Tools, die es Entwicklern ermöglichen, ihr bevorzugtes Machine-Learning-Framework zu verwenden und Modelle auf verschiedene Arten zu erstellen. Durch die Integration von TensorFlow, PyTorch, XGBoost und vielen anderen Frameworks bietet Kubeflow eine breite Palette von Optionen, die den Anforderungen unterschiedlicher Projekte gerecht werden.

Darüber hinaus bietet Kubeflow eine nahtlose Zusammenarbeit in Teams. Entwickler können gemeinsam an Machine-Learning-Projekten arbeiten, indem sie auf die gleichen Ressourcen und Tools zugreifen. Kubeflow stellt einheitliche Workflows und Tools bereit, die eine Integration von Code- und Daten-Repositories als auch Infrastruktur ermöglichen. Dies erleichtert die Zusammenarbeit zwischen den Teams und erhöht die Effizienz der Entwicklung.

Zu den wichtigsten Tools, die Kubeflow bereitstellt, gehören:

Katib: Ein Framework für die Hyperparameter-Optimierung, das automatisch die besten Parameter für ein bestimmtes Modell findet.

KServe: Eine Funktion zur Bereitstellung von Machine-Learning-Modellen, die den Prozess der Modellbereitstellung automatisiert und die Skalierung von Modellen erleichtert.

Kubeflow Pipelines: Ein Framework für die Erstellung von end-to-end Machine-Learning-Pipelines, das die Integration von verschiedenen Tools, Schritten und Algorithmen ermöglicht.

TensorBoard: Ein Tool zur Visualisierung von Modell-Trainingsverläufen und -Metriken.

Jupyter Notebook: Ein Tool zur interaktiven Datenanalyse, das die Erstellung von Machine-Learning-Modellen erleichtert.

Ein weiterer wichtiger Vorteil von Kubeflow ist die effektive Verwaltung von Ressourcen, die für die Modellentwicklung und Bereitstellung benötigt werden. Gewisse Workflows lassen sich mittels GPUs oder auch TPUs enorm beschleunigen, andere wiederum weniger. Wir hatten die Chance einen interessanten Einblick in diese Thematik in einem Vortrag von Diogo Guerra und Diana Gaponcic von CERN auf der diesjährigen KubeCon in Amsterdam bekommen zu können, wie schwierig die effiziente Bereitstellung von GPUs im Kontext von grossen Unternehmen mit vielen Teams und verschiedenen Workloads sein kann.

Kubeflow Pipelines

Kubeflow Pipelines ist das zentrale und meistverwendete Element von Kubeflow, das Entwicklern die Möglichkeit bietet, Machine-Learning-Workflows zu definieren, zu implementieren und zu verwalten. Mit Kubeflow Pipelines können Benutzer komplexe Pipelines erstellen, die Daten vorbereiten, Modelle trainieren und bereitstellen, um den gesamten ML-Workflow zu automatisieren.

Ein Beispiel für eine Kubeflow Pipeline könnte eine Pipeline zur Vorhersage von Hauspreisen sein. Diese Pipeline würde die folgenden Schritte umfassen:

Daten sammeln: Sammeln von Daten aus verschiedenen Quellen wie Immobilienportalen oder öffentlich zugänglichen Datenbanken.

Daten vorbereiten: Datenbereinigung und -vorverarbeitung, z.B. Entfernen von fehlenden Werten oder Umwandlung von Text in numerische Daten.

Modell-Training: Auswahl eines Machine-Learning-Modells, Training und Tuning des Modells auf den vorbereiteten Daten.

Modell-Auswertung: Bewertung des Modells auf neuen Daten, um sicherzustellen, dass es für Vorhersagen geeignet ist.

Bereitstellung des Modells: Implementierung des Modells in der Produktion, damit es für Vorhersagen genutzt werden kann.

Im nächsten Abschnitt werden wir als Beispiel eine Pipeline implementieren, um Bilder von Hunden und Katzen zu klassifizieren.

Praktisches Kubeflow-Pipeline Beispiel