close-icon
Melde dich für unseren Newsletter an, um mehr über dieses Thema zu erfahren
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Was wir an Prefect schätzen

Es ist Open Source, lässt sich gut mit Kubernetes kombinieren und hat einen hervorragenden Community-Support

datarevenue-icon
by
DataRevenue
Markus Schmitt

Zum Hintergrund: Warum wir uns gegen Kubeflow entschieden haben 

In unserem letzten Artikel haben wir ausführlich geschildert, warum wir von Kubeflow nicht sonderlich begeistert waren. Kurz zusammengefasst: Wir arbeiten gerade an einer Referenzarchitektur für Machine Learning Projekte. Sie soll am Ende aus einer Sammlung unserer bevorzugten Machine Learning Tools bestehen, plus Dokumentation und Terraform-Skripten, die dabei helfen, eine Machine Learning Architektur schnell und einfach aufzusetzen.

Unser ursprünglicher Entwurf basierte zum Teil auf Kubeflow, was jedoch einige große Schwachstellen aufweist. Daher verwenden wir stattdessen jetzt Prefect.io, was uns um einiges besser gefällt.

Warum wir uns für Prefect entschieden haben

Wir haben bereits mehrere andere Tools zur Workflow-Orchestrierung verglichen und setzen für viele unserer bestehenden Projekte Luigi ein. Leider verträgt sich Luigi nicht besonders gut mit Kubernetes, was wir in unseren früheren Projekten durch etwas zusätzlichen Code ausgleichen konnten. In unserer neuen Referenzarchitektur wird Kubernetes jedoch zu einem Kernelement, weshalb alle anderen Tools gut damit harmonieren sollten. 

Wir sind außerdem überzeugte Dask-Nutzer. Prefect basiert auf Dask, und wurde teilweise von den gleichen Leuten entwickelt, weshalb wir von Anfang an großes Vertrauen in Prefect hatten. Diese Dask-Grundlagen sorgen für ein solides Grundgerüst und einer aktiven Community - beides Dinge, die wir bei Kubeflow vermisst haben.

Letztlich hat uns Prefect auch deshalb überzeugt, weil für Python-Entwicklern einfach verständlich ist. Prefect beseitigt viele der Probleme, die bei komplizierteren Tools wie Airflow auftreten. Mithilfe eines einfachen Python-Dekorators lässt sich mit Prefect jede Python-Funktion in einen Task umwandeln.

Plattformen wie Airflow verwenden dagegen komplexere, stark restriktive Tasks. Wenn man in Airflow Tasks erstellen will, muss man sich bereits sehr gut mit Airflow auseinandergesetzt haben. Um Tasks in Prefect zu erstellen, genügt es, sich in Python auszukennen.

Prefects eigener “Why Prefect” Artikel nennt ein paar weitere gute Gründe dafür, Prefect zu verwenden:

  • Tasks sind Funktionen – Wir mussten uns nicht groß umgewöhnen, da jede Python-Funktion in einen Task umgewandelt werden kann.
  • Fokus auf Details Prefect setzt auf qualitativ hochwertige Software, mit beeindruckenden Unit-Tests und Dokumentation.
  • Anpassung durch Modularität - Jede Prefect-Komponente ist sehr klar definiert, so dass wir sie bei Bedarf problemlos gegen andere Tools austauschen könnten.

An welcher Stelle wird Prefect eingesetzt?

Eine Machine Learning Lösung besteht nur zum Teil aus Algorithmen und Code, um Modelle zu trainieren. Die Verwaltung von Workflows und Datenflows ist ein ebenso wesentlicher - aber weitaus weniger gehypter - Bestandteil jeder Machine Learning Lösung. Hier kommt Prefect ins Spiel.

Wir verwenden Prefect, um Daten abzurufen, sie nach Bedarf zu transformieren (die ETL-Flows von Prefect sind sehr übersichtlich und intuitiv) und alle laufenden Prozesse zu überwachen.

In der Machine Learning Architektur übernimmt Prefect alle Aufgaben der Automatisierung des Datenflows. Es lässt sich auch mit Bibliotheken wie Dask integrieren, um verteiltes Rechnen zu ermöglichen.

Ein Diagramm einer umfangreichen Machine-Learning-Architektur, das zeigt, wie Prefect die Datenflowautomatisierung verwaltet und auch das Experimente-Tracking sowie verteiltes Rechnen unterstützt.
Wir verwenden Prefect für die Datenflow-Automatisierung, es lässt sich aber auch mit Dask integrieren, um verteiltes Rechnen zu ermöglichen.
Interessierst du dich für neue Artikel?

Melde dich hier für unseren wöchentlichen Newsletter an und bleibe über neue Artikel zu unserer Referenzarchitektur informiert.

Danke!
Oops! Hier ist etwas schief gelaufen.

Unser Prefect Set-up im Detail

Prefect besteht aus mehreren Komponenten und bietet zahlreiche Möglichkeiten, es zu verwenden. Wir verwenden es ausschließlich als Open-Source-Software. Das bedeutet, dass wir unseren eigenen Prefect-Server auf AWS einrichten und nicht von der Prefect Cloud abhängig sind.

Unsere gesamte Referenzarchitektur muss nicht nur komplett kostenfrei, sondern auch möglichst unabhängig bleiben. Für unser Setup ist daher nicht einmal ein Prefect.io-Konto erforderlich.

Um Prefect in unserem Kubernetes-Cluster einzurichten verwenden wir Helm. Helm erstellt mehrere der Komponenten, an die Prefect anknüpft, darunter:

  • Prefect Agent: verwaltet die Task-Orchestrierung und Ressourcenzuweisung.
  • Prefect UI: stellt eine übersichtliche Benutzeroberfläche und eine Dashboard-Übersicht bereit.
  • Apollo, GraphQL, und Hasura: werden von Prefect verwendet, um die API zu bedienen.
  • Postgres: wird von Prefect zum Speichern von Metadaten über Flows eingesetzt.

Die Helm-Charts für den Prefect-Server befinden sich noch in der Versuchsphase, aber die Prefect-Community hat uns auch hier bei ein paar Kinderkrankheiten weiterhelfen können.

Allgemein betrachtet bewegt sich Prefect in unserem Kubernetes-Cluster und übernimmt unser gesamtes Workflow- und Datenflowmanagement. Unser Kubernetes-Cluster umfasst auch andere Machine Learning-Dienste, insbesondere: 

  • JupyterHub, das wir für Experimente und Prototyping nutzen.
  • Dask, das wir für verteiltes Rechnen verwenden.
Ein Diagramm, das zeigt, wie Prefect, JupyterHub und Dask in einer Machine Learning-Architektur zusammenspielen.
Prefect, JupyterHub und Dask befinden sich alle als Namespaces in unserem Kubernetes-Cluster.

Dieses Set-up ermöglicht es unseren Entwicklern, sich auf die Lösung komplizierter Probleme zu konzentrieren, ohne sich um die Infrastruktur kümmern zu müssen. Sie können ein Experiment als Prefect-Task in einem Jupyter-Notebook anlegen und es zur Verarbeitung an Dask weiterreichen - alles innerhalb einer vertrauten Notebook-Oberfläche.

Prefect ist sehr gut darin, eine Übersicht von allem zu liefern, was gerade wo abläuft. Gleichzeitig bietet Prefect hilfreiche Protokolle und Visualisierungen, wenn mal etwas schief läuft.

Unsere bisherigen Erfahrungen

Wir haben Prefect bereits in unserem Kubernetes-Cluster eingerichtet und es in manchen unserer Pipelines getestet. Bisher hat alles problemlos funktioniert. Die einzigen Hürden, auf die wir gestoßen sind, stehen im Zusammenhang mit bestimmten Prefect Core-Komponenten, die voraussetzen, dass man Prefect Cloud (den herstellergebundenen Part von Prefect) verwendet. 

Da wir unseren eigenen Prefect Server betreiben (statt der Prefect Cloud), haben wir keinerlei Abhängigkeiten von Prefect als Drittanbieterdienst. Die Prefect-Community war dabei ziemlich hilfreich: Innerhalb weniger Minuten erhielten wir Antworten auf unsere Fragen in ihrer Slack Gruppe. Auch ein Fehler, den wir gemeldet hatten, wurde innerhalb weniger Stunden behoben.

Nach nur wenigen Tagen hat Prefect auch unsere Verbesserungen an der Dokumentation zum Einsatz von Prefect mit HELM übernommen.

Mittlerweile sind unsere Jupyter Notebooks mit Prefect integriert. Wir waren ziemlich beeindruckt davon, wie einfach die Einrichtung ablief. Insgesamt sorgt auch die übersichtliche Benutzeroberfläche und die Dashboards für ein sehr angenehmes Arbeiten.

Benötigst du Hilfe bei der Erstellung einer skalierbaren Machine Learning-Pipeline?

Wir lieben es, neue ML Tools zu verwenden - und haben die meisten davon bereits ausprobiert. Falls du Hilfe beim Einrichten deiner eigenen skalierbaren Machine Learning Pipeline benötigst, melde dich gerne bei uns.

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.