close-icon
Abonnieren, um mehr über dieses Thema zu erfahren
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Airflow vs. Luigi vs. Argo vs. MLFlow vs. KubeFlow

Orchestration Pipelines und Workflow Management: Welches Tool ist das Richtige für mich?

datarevenue-icon
by
DataRevenue
Markus Schmitt
Eine Übersicht des Wachstums verschiedener Workflow Tools seit 2014.
Airflow ist die verbreitetste Lösung, gefolgt von Luigi. Es gibt auch neuere Mitstreiter, die aktuell stark an Beliebtheit gewinnen. (Quelle)

Task Orchestration Tools und Workflows

In letzter Zeit konnte man eine wahre Explosion an neuen Tools zur Task- und Datenworkflow-Orchestrierung beobachten (auch unter dem Begriff “MLOps” zu finden). Die schiere Menge an verfügbaren Tools macht es sehr unübersichtlich, wo die Unterschiede bzw. Gemeinsamkeiten liegen und erschwert die Auswahl des richtigen Tools. Um hier Abhilfe zu schaffen haben wir die gängigsten Tools direkt miteinander verglichen. 

Im Allgemeinen ist Apache Airflow das verbreitetste Tool mit den meisten Features; Luigi ist ein sehr ähnliches Tool, bei dem der Einstieg jedoch leichter ist. Argo wird oft von Teams genutzt, die bereits mit Kubernetes arbeiten, während Kubeflow und MLFlow eher Nischenbereiche im Zusammenhang mit dem Einsatz von Machine Learning Modellen und dem Tracking von Experimenten abdecken.

Bevor wir uns eingehend den detaillierten Vergleichen widmen, ist es hilfreich, einige allgemeine Konzepte im Zusammenhang mit Task Orchestrierung zu verstehen.

Was ist Task Orchestrierung und wozu braucht man es?

Kleinere Teams managen ihre Tasks meistens per Hand - Dazu gehören Schritte wie Daten bereinigen, Machine Learning Modelle trainieren, Ergebnisse tracken und die Modelle auf Produktionsservern bereitstellen. Sobald das Team und damit die Lösungen wachsen, steigt auch die Anzahl an benötigten Prozessierungsschritten. Gleichzeitig wird es auch immer wichtiger, dass jeder Schritt zuverlässig durchgeführt wird.

Da die Arbeitsschritte auch teilweise voneinander abhängig sind, wächst mit steigender Anzahl an Arbeitsschritten auch die Komplexität des Arbeitsablaufes. Zu Beginn hat man meist eine Pipeline von Tasks, die wöchentlich oder monatlich in einer bestimmten Reihenfolge ausgeführt werden müssen. Wird das Team größer, wird diese Pipeline zu einem Netzwerk mit mehreren Verzweigungen, bei der manche Tasks von der Erledigung anderer Tasks abhängig sind.

Solch ein Netzwerk kann als DAG modelliert werden - ein Directed Acyclic Graph, der jeden Task und ihre Abhängigkeiten untereinander modelliert.

Ein Diagramm, das eine Pipeline mit einfach verknüpften Tasks und ein DAG mit komplexeren Verbindungen zeigt.
Eine Pipeline ist ein eingeschränkter DAG, bei der jeder Task höchstens eine vor- und eine nachgelagerte Abhängigkeit hat.

Mit Workflow Orchestration Tools kann man DAGs definieren, indem man alle Tasks und ihre Abhängigkeiten untereinander benennt. Das Tool führt diese Tasks in der gewünschten Reihenfolge und zum gewünschten Zeitpunkt aus, wobei alle fehlgeschlagenen Versuche wiederholt werden, bevor der nächste Task ausgeführt wird. Das Tool überwacht außerdem den Fortschritt und benachrichtigt das Team, sobald Fehler auftreten.

Für das automatische Testen und Bereitstellen von Code werden häufig CI/CD Tools, wie z.B. Jenkins verwendet. Es gibt zwar große Gemeinsamkeiten zwischen diesen Tools und Tools zur Task Orchestrierung, aber auch beträchtliche Unterschiede. Man kann diese CI/CD-Tools zwar theoretisch auch zur Orchestrierung dynamischer, miteinander verknüpfter Tasks verwenden, ab einem gewissen Komplexitätsgrad fällt es jedoch deutlich leichter auf allgemeinere Tools wie Apache Airflow zurückzugreifen. 

Insgesamt liegt der Schwerpunkt aller Orchestrierungs-Tools darauf, zentralisierte, wiederholbare, reproduzierbare und effiziente Prozessabläufe zu ermöglichen: eine virtuelle Kommandozentrale für alle automatisierten Tasks. Vor diesem Hintergrund werfen wir jetzt einen Blick darauf, wie die populärsten Workflow-Tools funktionieren.

Für welches Tool soll ich mich entscheiden?

Entscheide dich am besten für:

  • Apache Airflow wenn du a) das umfangreichste und am weitesten entwickelte Tool haben möchtest und b) genügend Zeit hast, um zu lernen wie es funktioniert, wie man es einrichtet und wie man es wartet.
  • Luigi wenn du eine einfachere Lernkurve als Airflow suchst. Luigi verfügt über weniger Funktionen, ist aber besonders am Anfang leichter zu erlernen.
  • Argo wenn du dich bereits intensiv mit Kubernetes beschäftigst und alle Tasks als Pods verwalten möchtest, die in YAML statt in Python definiert werden.
  • KubeFlow wenn du Kubernetes verwenden willst, die Tasks aber trotzdem mit Python statt mit YAML definieren möchtest.
  • MLFlow wenn du mehr Wert darauf legst, dass das Tracking von Experimenten (oder das Tracking und Deployment von Modellen) mit vordefinierten Mustern von MLFlow abläuft, anstatt ein Tool zu suchen, das sich an deinen Arbeitsablauf anpassen lässt.
Kostenlose Beratung

Wenn du gerade überlegst welcher Ansatz für dich und dein Team am besten ist, buche gerne eine kostenlose (und unabhängige) Beratung bei uns.

Buche einen kostenlose Beratung

Vergleichstabelle

Für einen schnellen Überblick haben wir die Bibliotheken verglichen hinsichtlich:

  • Entwicklungsstand: basierend auf dem Alter des Projekts und der Anzahl an Fixes und Commits;
  • Beliebtheit: basierend auf der Anzahl an GitHub Sternen und der Adoption;
  • Einfachheit: basierend auf der Einfachheit des Einstiegs und der Adoption;
  • Bandbreite: basierend darauf, wie spezialisiert vs. wie anpassungsfähig das Tool ist;
  • Sprache: die Art und Weise, wie man mit dem Tool interagiert.

Hierbei handelt es sich nicht um strenge Maßstäbe, sondern vielmehr um einen groben Überblick darüber, inwiefern sich die Tools überschneiden und an welchen Punkten sie sich voneinander unterscheiden. Mehr Einzelheiten findest du in den untenstehenden Kopf-an-Kopf Vergleichen.

Luigi vs. Airflow

Luigi und Airflow werden für ähnliche Fragestellungen eingesetzt, Luigi ist jedoch wesentlich simpler aufgebaut. Es besteht aus einer einzigen Komponente, während Airflow sich aus mehreren Modulen zusammensetzt, die auf verschiedenen Wegen konfiguriert werden können. Airflow hat eine größere Community und ein paar zusätzliche Funktionen, ist jedoch schwieriger zu erlernen. Airflow ist vor allem dann weitaus leistungsstärker, wenn es um Terminierung von Tasks geht und stellt eine Kalender GUI zur Verfügung, mit der man festlegen kann, wann welche Tasks ablaufen sollen. Luigi erfordert mehr benutzerdefinierten Code, um den Ablauf der Tasks zu planen.

Beide Tools nutzen Python und DAGs um Tasks und Abhängigkeiten zu definieren. Luigi eignet sich besonders dann, wenn man mit einem kleinen Team arbeitet und am Anfang schnell vorankommen möchte. Airflow passt besser zu größeren Teams, die eine längere Einarbeitungszeit in Kauf nehmen können, dafür aber mit der Zeit mit einem leistungsfähigeren Tool arbeiten möchten.

Luigi vs. Argo

Argo basiert auf Kubernetes, wobei jeder Task als eigener Kubernetes Pod ausgeführt wird. Das kann sehr praktisch sein, wenn man bereits mit Kubernetes arbeitet; ist das jedoch nicht der Fall, macht es das Ganze ein Stück komplizierter. Luigi ist eine Python Bibliothek und kann mit Python Package Management Tools wie pip und conda installiert werden. Argo ist eine Kubernetes Erweiterung und wird auch über Kubernetes installiert. Mit beiden Tools kann man seine Tasks als DAGs definieren, mit Luigi in Python, und mit Argo in YAML. 

Es empfiehlt sich, mit Argo zu arbeiten, wenn man sich bereits mit Kubernetes auskennt und weiss, dass alle Tasks Pods werden sollen. Es macht außerdem Sinn, sich zu überlegen, ob die zuständigen Entwickler lieber mit YAML oder mit Python arbeiten. Luigi bietet sich dann an, wenn man Kubernetes noch nicht einsetzt und Python Expertise im Team vorhanden ist.

Luigi vs. Kubeflow

Luigi ist eine auf Python basierende Bibliothek für allgemeine Task Orchestrierung, während Kubeflow speziell für Machine Learning Workflows eingesetzt wird und auf Kubernetes basiert. Luigi wurde entwickelt, um allgemeine Tasks zu generieren, während Kubeflow vorgefertigte Muster für das Tracking von Experimenten, Hyper-Parameter-Optimierung und die Bedienung von Jupyter-Notebooks enthält. Kubeflow besteht aus zwei getrennten Komponenten: Kubeflow und Kubeflow Pipelines. Das letztere ist stärker auf die Bereitstellung von Machine Learning Modellen und CI/CD fokussiert und kann unabhängig von den Hauptfeatures in Kubeflow genutzt werden.

Luigi eignet sich besonders dann, wenn man eine Reihe unterschiedlicher Tasks orchestrieren möchte, von Datenbereinigung bis zur Bereitstellung von Modellen. Kubeflow empfiehlt sich dagegen eher, wenn man bereits mit Kubernetes arbeitet und Machine Learning tasks orchestrieren möchte, wie z.B. Experimente zu tracken oder Modelle zu trainieren.

Luigi vs. MLFlow

Luigi ist ein eher allgemeines Orchestrierungs-System, während mit MLFlow als spezialisierterem Tool Machine Learning Experimente organisiert und getrackt werden können. Luigi kann man nutzen, um allgemeine Ziele und Abhängigkeiten wie Training von Modellen zu definieren; MLFlow kann dagegen direkt in Machine Learning Code eingefügt werden. Mit der Hilfefunktion kann Information (z.B. die genutzten Parameter) und Artefakte (wie die trainierten Modelle) geloggt werden. Man kann MLFlow auch als command-line Tool einsetzen, um Modelle zu nutzen, die mit gängigen Tools (wie scikit-learn) gebaut wurden, oder sie auf verbreiteten Plattformen (wie AzureML oder Amazon SageMaker) bereitzustellen.

Airflow vs. Argo

Sowohl mit Argo, als auch mit Airflow können Tasks als DAGs definiert werden; in Airflow geschieht das mit Python, in Argo nutzt man YAML. Argo führt jeden Task als Kubernetes Pod aus, während sich Airflow im Python Ökosystem bewegt. Canva hat beide Optionen evaluiert und sich für Argo entschieden. In diesem Vortrag findest du detaillierte Vergleiche und Evaluationen der beiden Tools.

Airflow bietet sich an, wenn man ein weiter entwickeltes Tool sucht und sich nicht mit Kubernetes auseinandersetzen möchte. Argo macht dann Sinn, wenn man sich bereits mit Kubernetes auskennt und eine Vielzahl von Tasks ausführen möchte, die in verschiedenen Stacks verfasst wurden.

Airflow vs. Kubeflow

Airflow ist eine allgemeine Task Orchestrierungs Plattform, während sich Kubeflow spezifisch auf Machine Learning Tasks wie dem Tracking von Experimenten fokussiert. Bei beiden Tools können Tasks in Python definiert werden, Kubeflow führt Tasks aber über Kubernetes aus. Kubeflow teilt sich in Kubeflow und Kubeflow Pipelines: mit zweiterem kann man DAGs spezifizieren, aber es konzentriert sich stärker auf den Einsatz von ML Modellen als auf allgemeinere Tasks.

Airflow empfiehlt sich, wenn du ein ausgereiftes, breit aufgestelltes Ökosystem benötigst, das eine Vielzahl unterschiedlicher Tasks ausführen kann. Kubeflow bietet sich dann an, wenn du bereits Kubernetes verwendest und eher out-of-the-box Prozesse für Machine Learning Lösungen suchst.

Airflow vs. MLFlow

Airflow ist eine allgemeine Plattform zur Task-Orchestrierung, während MLFlow speziell zur Optimierung von Machine Learning Workflows entwickelt wurde. Das bedeutet, dass MLFlow Experimente ausführen und tracken sowie Machine Learning Modelle trainieren und bereitstellen kann; Airflow hingegen deckt ein breiteres Spektrum an Anwendungsmöglichkeiten ab und kann zur Ausführung beliebiger Tasks eingesetzt werden. Airflow enthält eine Auswahl an Komponenten und Plugins zur Verwaltung und Planung von Tasks. MLFlow ist eine Python-Bibliothek, die du in deinen vorhandenen Machine Learning Code importieren kannst, und ein command-line Tool, mit dem du in scikit-learn geschriebene Machine Learning Modelle für Amazon SageMaker oder AzureML trainieren und bereitstellen kannst.

MLFlow bietet sich an, wenn du einen out-of-the-box Ansatz für die Verwaltung deiner Machine Learning Projekte suchst. Für Airflow solltest du dich entscheiden, wenn du etwas kompliziertere Anforderungen hast und mehr Kontrolle über dein Machine Learning Projekt haben möchtest.

Argo vs. Kubeflow

Teile von Kubeflow (wie die Kubeflow-Pipelines) basieren auf Argo; Argo ist jedoch so konstruiert, dass es jeden Task orchestrieren kann, während sich Kubeflow auf Machine Learning spezifische Tasks konzentriert - wie das Tracking von Experimenten, Hyperparameter-Tuning und der Bereitstellung von Modellen. Kubeflow Pipelines ist eine separate Komponente von Kubeflow, die sich auf die Modellentwicklung und CI/CD konzentriert und unabhängig von den anderen Kubeflow Funktionen verwendet werden kann. Beide Tools basieren auf Kubernetes und sind besonders dann interessant, wenn man bereits mit Kubernetes arbeitet. Mit Argo definiert man seine Tasks mit YAML, während man in Kubeflow ein Python Interface verwenden kann.

Argo empfiehlt sich, wenn du ein DAG mit allgemeinen Tasks verwalten musst, die als Kubernetes-Pods laufen. Verwende Kubeflow, wenn du ein spezifischeres Tool haben möchtest, das sich auf Machine Learning Lösungen spezialisiert.

Argo vs. MLFlow

Argo ist ein Tool zur Task Orchestrierung, mit dem man Tasks als Kubernetes-Pods definieren und als DAG (definiert mit YAML) ausführen kann. MLFlow ist ein spezialisierteres Tool, das man als Python-Bibliothek in eine bestehende (Python-)Machine Learning Code-Basis importieren und zur Protokollierung von Artefakten und Parametern verwenden kann. So fallen Analysen und das Tracking von Experimenten leichter. Das command-line Tool von MLFlow kann man außerdem verwenden, um scikit-learn-Modelle zu trainieren und sie auf Amazon Sagemaker oder Azure ML einzusetzen, sowie um Jupyter-Notebooks zu verwalten.

Argo bietet sich an, wenn man eher allgemeine Aufgaben verwalten muss und diese auf Kubernetes ausführen möchte. Verwende MLFlow, wenn du einen klarer vordefinierten Weg suchst Machine Learning Modelle für Cloud-ML-Plattformen zu trainieren.

Kubeflow vs. MLFlow

Kubeflow und MLFlow sind beides eher kleinere, spezialisierte Tools und weniger allgemeine Orchestrierungsplattformen wie Airflow oder Luigi. Kubeflow basiert auf Kubernetes, MLFlow ist dagegen eine Python Bibliothek, mit der man das Tracking von Experimenten in bestehenden Machine Learning Code integrieren kann. Mit Kubeflow kann man ein vollständiges DAG erstellen, bei dem jeder Arbeitsschritt aus einem Kubernetes-Pod besteht. MLFlow verfügt dagegen über integrierte Funktionen, mit denen man scikit-learn-Modelle auf Amazon Sagemaker oder Azure ML bereitstellen kann.

Kubeflow bietet sich an, wenn du deine Machine Learning Experimente tracken und deine Lösungen individuell stark anpassen möchtest. Für MLFlow solltest du dich entscheiden, wenn du einen einfacheren Ansatz zum Tracking von Experimenten wünschst und diese auf Cloud-ML -Plattformen wie Amazon Sagemaker bereitstellen möchtest.

Es gibt keine Wunderwaffe

All diese Tools weisen zwar unterschiedliche Schwerpunkte und Stärken auf, aber kein Tool garantiert auf Anhieb einen problemfreien Start. Bevor man sich für ein Tool entscheidet, ist es in der Regel zunächst einmal wichtig sicherzustellen, dass man solide Arbeitsabläufe entwickelt hat, einschließlich einer einheitlichen Teamkultur und klar definierter langfristiger Ziele. Solltest du bei Aufbau von Machine Learning Pipelines auf Probleme stoßen, dann wende dich gerne an uns. Wir können dir viele Beispiele aus der Praxis geben, also vereinbare gerne ein kostenloses Gespräch mit unserem CEO.

Bekomme immer die neusten Artikel

Trag dich mit deiner E-Mail ein, um du bekommst jede Woche unseren neusten Artikel.

Ich danke Ihnen! Ihre Einreichung ist eingegangen!
Oops! Something went wrong while submitting the form.