22. Februar 2024 von Marc Mezger und Azza Baatout
Prefect - Workflow Orchestrierung für AI- und Data-Engineering-Projekte
Workflow-Orchestrierung und Workflow-Engines sind entscheidende Komponenten in der modernen Datenverarbeitung und Softwareentwicklung, insbesondere im Bereich der Künstlichen Intelligenz (KI). Diese Technologien ermöglichen es, verschiedene Aufgaben und Prozesse innerhalb komplexer Datenpipelines effizient zu verwalten und zu koordinieren. In diesem Blog-Beitrag stellen wir Prefect vor, ein intuitives Tool zur Orchestrierung von Workflows in der KI-Entwicklung.
Workflow-Orchestrierung?
Workflow-Orchestrierung bezeichnet die koordinierte Ausführung verschiedener Aufgaben und Prozesse innerhalb einer Datenpipeline. In der KI-Entwicklung, wo große Datensätze verarbeitet, Modelle trainiert und Ergebnisse analysiert werden müssen, sorgt die Workflow-Orchestrierung für einen reibungslosen und effizienten Ablauf dieser Abläufe. Workflow-Engines sind Softwaretools, die eine Workflow-Orchestrierung ermöglichen. Sie ermöglichen es Entwicklerinnen und Entwicklern, komplexe Workflows zu definieren, zu verwalten und zu überwachen. Eine Workflow-Engine stellt sicher, dass die definierten Aufgaben in der richtigen Reihenfolge und unter Berücksichtigung von Abhängigkeiten ausgeführt werden. Sie übernimmt auch die Aufgabe, Ressourcen effizient zuzuweisen und bei Fehlern entsprechend zu reagieren. Beispiele für solche Tools sind Apache Airflow, Prefect und Dagster.
Funktionsweise von Prefect
Ein Workflow in Prefect wird als "Flow" bezeichnet, der immer aus einer Reihe von "Tasks" besteht. Diese Tasks sind die Grundbausteine eines Workflows und stellen einzelne ausführbare Aktionen dar, wie zum Beispiel das Abrufen von Daten, deren Verarbeitung oder das Speichern von Ergebnissen. Jeder Task kann Inputs und Outputs haben. Die Abhängigkeiten zwischen den Tasks werden in Prefect klar definiert, um die Ausführungsreihenfolge zu steuern. Da diese Tasks immer möglichst atomar oder nur als eine in sich geschlossene Task definiert sind, können sie sehr gut mit den Parallelisierungsmöglichkeiten in Prefect, wie beispielsweise dem DaskTaskRunner, parallelisiert werden. Dadurch ist es möglich, die Geschwindigkeit und Effizienz von Datenpipelines sehr effizient und kostengünstig zu gestalten, obwohl dies in Python normalerweise nicht so effizient ist wie in anderen Programmiersprachen wie etwa Go.
Prefect unterscheidet sich von anderen Workflow-Management-Tools durch seine robuste Fehlerbehandlung und die Fähigkeit, mit unerwarteten Problemen umzugehen. Prefect verfügt über ein integriertes System zur Verfolgung des Status von Workflows und Tasks. Dadurch ist es möglich, auf Fehler zu reagieren, sie zu diagnostizieren und zu beheben, ohne den gesamten Prozess neu starten zu müssen.
Prefect-Agenten sind Prozesse zur Überwachung und Verwaltung der Ausführung von Workflows. Agenten können auf lokalen Rechnern oder in der Cloud ausgeführt werden.
Prefect bietet verschiedene Arten von Agenten, zum Beispiel
- Local Agent: Der Local Agent wird auf dem lokalen Rechner ausgeführt und ist ideal für die Entwicklung und das Testen von Workflows.
- Remote Agent: Der Remote Agent wird auf einem anderen Computer ausgeführt und kann verwendet werden, um Workflows in der Cloud oder auf einem anderen Server auszuführen.
- Kubernetes Agent: Der Kubernetes Agent ermöglicht die Ausführung von Workflows auf einem Kubernetes Cluster.
Darüber hinaus gibt es weitere Tools im Prefect-Ökosystem wie CLI-Applikationen zur Überwachung und Steuerung von Workflows, UI-Tools wie das oben gezeigte Dashboard und weitere nützliche Tools.
Prefect OSS und Prefect Cloud
Das Schöne an Prefect ist, dass es sowohl eine Open-Source- als auch eine Cloud-Variante gibt. Dadurch ist es möglich, Prefect komplett on-prem zu betreiben, aber auch die erweiterten Fähigkeiten und Möglichkeiten der Cloud-Variante zu nutzen. Für ein kleines Pro-Bono-Projekt haben wir die Open-Source-Variante ausprobiert und konnten damit eine kleine und effiziente Datenpipeline aufbauen. Für größere Projekte empfehlen wir aber auf jeden Fall einen Blick auf die Cloud-Variante, da sie deutlich mehr Möglichkeiten und deutlich mehr "Ease-of-Life"-Features wie Authentifizierung, Automatisierung und Support bietet. Kurzum, unsere Empfehlung lautet
Prefect Open Source ist ideal für:
- Teams, die maximale Flexibilität und Kontrolle benötigen
- Teams mit begrenztem Budget und/oder
- Entwicklerinnen und Entwickler, die die Funktionsweise von Prefect verstehen und an der Weiterentwicklung der Plattform mitwirken möchten.
Prefect Cloud ist ideal für:
- Teams, die eine komfortable und skalierbare Lösung suchen,
- Teams, die zusätzliche Funktionen benötigen, die in der Open-Source-Version nicht verfügbar sind und/oder
- Teams, die Unterstützung durch das Prefect Team benötigen.
Vergleich mit Airflow
Beide Plattformen - sowohl Perfect als auch Airflow - ermöglichen es Benutzrinnen und Benutzern, Abhängigkeiten zwischen Aufgaben zu definieren, und bieten Planungs- und Triggerfunktionen, um diese Aufgaben regelmäßig oder als Reaktion auf externe Ereignisse auszuführen.
Obwohl diese Plattformen in ihrem grundlegenden Ansatz ähnlich sind, gibt es signifikante Unterschiede in ihrer Ausführungslogik und Anwendung. Apache Airflow eignet sich besonders für komplexe, aber statische Workflows, die als gerichtete azyklische Graphen (DAGs) definiert sind. Dies macht es zu einer idealen Lösung für Szenarien, in denen Workflows detailliert geplant und mit einer festen Struktur ausgeführt werden müssen. Airflow bietet eine Benutzeroberfläche, die eine detaillierte Visualisierung von Workflows und deren Ausführung ermöglicht. Darüber hinaus unterstützt es eine Vielzahl von Integrationsmöglichkeiten, die es zu einer robusten Wahl für komplexe Datenverarbeitungsaufgaben machen.
Prefect hingegen eignet sich besser für einfachere Workflows, die eine leichtgewichtige Orchestrierungslösung mit dynamischen Workflows erfordern. Es ist besonders vorteilhaft, wenn Workflows regelmäßig geändert oder angepasst werden müssen, da es eine flexiblere Definition von Aufgaben und deren Abhängigkeiten erlaubt. Der Ansatz von Prefect konzentriert sich auf maximale Benutzerfreundlichkeit und Anpassbarkeit und bietet Funktionen für effiziente Fehlerbehandlung und Wiederherstellung. Diese Flexibilität macht Prefect zu einer attraktiven Option für Teams, die schnell reagieren und ihre Arbeitsabläufe regelmäßig anpassen müssen.
Zusammenfassend lässt sich sagen, dass die Wahl zwischen Apache Airflow und Prefect von den spezifischen Anforderungen Ihres Workflows abhängt. Wenn Sie komplexe, statische Workflows haben und eine umfassende Kontrolle und Visualisierung wünschen, ist Airflow die bessere Wahl. Wenn Sie jedoch flexiblere, dynamischere und schlankere Workflows bevorzugen, ist Prefect die geeignetere Plattform. Beide Tools bieten leistungsstarke Workflow-Orchestrierungsfunktionen, aber ihre Unterschiede in Struktur und Ausführung sollten bei der Auswahl berücksichtigt werden.
Für einen schnellen und unkomplizierten Test von Prefect empfehlen wir die Nutzung der Cloud-Version, die unter Prefect Cloud Pricing verfügbar ist. Diese bietet eine kostenlose Variante zum Ausprobieren.
Der Einstieg in Prefect Cloud ist einfach:
- 1. Besucht die oben genannte Website und erstellt ein Benutzerkonto.
- 2. Nach dem Login erstellt man einen neuen Arbeitsbereich.
- 3. Für den nächsten Schritt benötigt ihr eine funktionierende Python-Installation. Prefect könnt ihr mit dem Befehl pip install prefect in eurer Python-Umgebung installieren.
- 4. Nach der Installation könnt ihr euch mit dem Befehl prefect cloud login in der Cloud anmelden und eine Verbindung zur Cloud Engine herstellen.
- 5. Anschließend könnt ihr einen Beispiel-Flow erstellen, indem ihr den entsprechenden Code in einer Datei speichert und ausführt.
Wenn der Code ausgeführt wird, wird er automatisch nach einem festgelegten Zeitplan ausgeführt und angezeigt. Innerhalb der serve Methode werden verschiedene Parameter definiert, die sowohl Eigenschaften des Deployments als auch spezifische Tags umfassen. Letztere erleichtern die Verwaltung und die Übersichtlichkeit bei mehreren Durchläufen. Die Funktion parameters ermöglicht die Angabe von Parametern, die an den Flow übergeben werden sollen. Dies erweist sich insbesondere dann als nützlich, wenn Parameter dynamisch übergeben oder aus bestehenden Konfigurationen extrahiert werden sollen. Außerdem wird das Ausführungsintervall des Flows festgelegt. Ein Intervallwert von 60 bedeutet beispielsweise, dass der Code in einem Zyklus von 60 Sekunden automatisch ausgeführt wird. Ein Flow in der Engine repräsentiert einen Workflow, der aus mehreren Flows bestehen kann. Zusätzlich besteht die Möglichkeit, einzelne Aufgaben innerhalb eines Flows als Tasks zu definieren, wobei die @Task-Annotation verwendet wird. Flows können mit verschiedenen Runner-Typen wie beispielsweise dem DaskRunner markiert werden. Diese Markierung ermöglicht es Prefect, die Ausführung der Flows automatisch und parallelisiert zu verwalten.
Daraufhin sieht man die Runs und ihren Status in der Flow Runs Übersicht:
Sollte sich ein Run verzögern, wird er als 'late' gekennzeichnet und zu einem späteren Zeitpunkt nachgeholt, sobald dies möglich ist. Dieses Verfahren ermöglicht eine effiziente Parallelisierung von Prozessen und Runs. Auch bei kurzfristigen Ausfällen können die anstehenden Jobs auf diese Weise einfach und effizient nachgeholt werden.
Wir haben ein kleines Repository mit einem Beispiel erstellt, das hier zu finden ist: https://github.com/mfmezger/prefect-demo
Ihr möchtet mehr über spannende Themen aus der adesso-Welt erfahren? Dann werft auch einen Blick in unsere bisher erschienenen Blog-Beiträge.