MLOps Teil 3: MLOps mit Azure und Azure-ML

Wie lässt sich mit MLOps in der Praxis arbeiten? MLOps-Tools sind große Game-Changer, wenn es um die Operationalisierung von Machine-Learning-Modellen geht. In unserer Blogpost-Serie haben wir bereits dargelegt, was MLOps sind (MLOps Teil 1: Deployment Gaps vermeiden – wie Machine Learning auch wirklich zum Einsatz kommt) und wie man sie mit dem CRISP-ML(Q)-Prozess umsetzt (MLOps Teil 2: Prinzipien einhalten mit dem CRISP-ML(Q)-Prozess). Im dritten Teil widmen wir uns ganz hands-on einem der gebräuchlichsten MLOps Tools, dem Azure-ML von Microsoft. Mithilfe eines Praxisbeispiels zeigen wir, welche Möglichkeiten das Tool bietet und wie Sie es bestmöglich einsetzen.
Jeder große Cloudanbieter hat sein hauseigenes Tool, wie Microsofts Azure das Azure-ML (Azure Machine Learning), Amazon AWS den Sagemaker oder Googles Googlecloud den VertexAI. Weitere bekannte Anbieter von MLOPs-Tools sind Databricks und Datalku oder auch das Open-Source Framework MLFlow, welches viele Synergien mit anderen Tools aufweist.
Für dieses Praxisbeispiel verwenden wir die Azure-Cloud und einen Azure-ML-Arbeitsbereich, um die Machine-Learning-Modelle auf Computeclustern zu trainieren, die Ergebnisse zu evaluieren, die Modelle in der Model-Registry zu registrieren und zu versionieren und letztendlich die Modelle in einem ansprechbaren Service zur Verfügung zu stellen.
Um die folgenden Schritte auszuführen wird ein Azure-Abonnement benötigt.
Erstellung des Azure-ML-Arbeitsbereichs
Um MLOps in Azure zu verwenden, benötigt man zunächst einen Azure-ML-Arbeitsbereich. Der Azure-ML-Arbeitsbereich setzt sich dabei aus verschiedenen Komponenten zusammen, die in der Übersicht per Klick aggregiert werden. Über die Funktion „Ressource erstellen“ öffnet sich der Azure-Marktplatz, in welchem gezielt nach benötigten Ressourcen, wie in unserem Fall dem „Azure Machine Learning“, gesucht werden kann.
Bei der Erstellung des Azure ML-Arbeitsbereichs müssen verschiedene Angaben gemacht werden, welche ausreichend erläutert werden, weshalb wir an dieser Stelle nur auf ein paar Kleinigkeiten eingehen. .
Innerhalb des Abonnements wird jede Ressource einer Ressourcengruppe zugeordnet. Ähnlich der Struktur eines Unternehmens mit verschiedenen Abteilungen (=Ressourcen) verhilft uns das zu einem besseren Überblick über Kosten und Ressourcen. Mit mehr Erfahrung in der Cloudumgebung können diese Ressourcengruppen auch spezialisierter aufgestellt werden.
Standardmäßig werden für den Azure-ML-Arbeitsbereich alle benötigten Ressourcen um MLOps in Azure sauber aufzusetzen, angelegt. Dazu gehört ein Speicherkonto (Blob-Storage), ein Schlüsseltresor (keyvault) und eine Application-Insights-Instanz. Dadurch werden im Azure-ML-Arbeitsbereich bereits der Blob-Storage und die Application-Insights über die key-vault nutzbar gemacht.
Credit-Fraud via MLOps in Azure
Um MLOps in Azure praktisch zu demonstrieren, wird hier ein synthetischer Datensatz von kaggle.com verwendet, welcher Kreditkartendaten zu Transaktionen enthält (https://www.kaggle.com/datasets/ealaxi/banksim1). Für diese Daten sollen die entwickelten Machine-Learning-Modelle vorhersagen, ob eine Transaktion mit der Kreditkarte betrügerisch ist, also durch den Besitzer initiiert wurde, oder nicht. Diese Daten wurden in der Datenaufbereitung mit externen Daten zu den verschiedenen Transaktionslokationen angereichert. Azure-ML bietet mit den Datasets eine elegante Möglichkeit, die Daten zu versionieren und abzuspeichern (siehe Abbildung 4).
Für Credit Fraud ist es wichtig, ein schnelles und robustes System aufzubauen, um jede Transaktion möglichst schnell überprüfen zu können und somit betrügerische Tätigkeiten schnell zu erkennen und abzuwenden. MLOps in Azure erleichtern mit dem Azure-ML-Arbeitsbereich das Auf- und Abskalieren der Services und bieten eine exzellente Übersicht über die Performance des Modells, der Services und der Nutzung des Dienstes.
Tracking mit MLFlow und Azure-ML-Jobs
Zu den wichtigsten Komponenten des Azure-ML-Arbeitsbereichs zählen die Jobs, in welchen Data-Scientists ihre Modelle, Grafiken, deren Metriken, Tags und Logs tracken können. Dabei bietet es sich für MLOps in Azure an, einen hybriden Weg zu gehen und das Open-Source-Tool MLFlow zusammen mit der azure-ml-sdk zu verwenden. MLFlow wird dabei hauptsächlich für das Tracken von Metriken, Tags, Grafiken und für das Modelmanagement verwendet. In der Übersicht (Abbildung 5) sieht man die letzen Läufe des Jobs und kann somit genau nachvollziehen, wie sich die Performance der Modelle über die Zeit entwickelt und somit auch der Mehrwert, welchen diese Modelle repräsentieren. Mit neuen Daten werden sich die Metriken der Modelle verändern und somit eventuelle Handlungsbedarfe erkannt.
Die einzelnen Jobs können auch im Detail betrachtet werden (Abbildung 6). In dieser Detailübersicht können auch die Metriken weiter analysiert, Bilder zum Trainingsverlauf getrackt und Errorlogs ausgelesen werden. Entwickler als auch Product-Owner sollten dabei nicht nur die Metriken um das Modell bewerten, sondern auch die tags, um zu verstehen was verwendet wurde.
In den Tags können nämlich Informationen zu benutzten Daten, verwendeten Algorithmen oder auch die verwendeten Modell-Features getrackt werden.
Computecluster in Azure-ML
MLOps in Azure bietet verschiedene Möglichkeiten, um die Produktivität der Data-Scientists beim Implementieren neuer und komplexer Machine-Learning- und Deep-Learning-Modelle zu erhöhen. Eine besteht darin, im Azure-ML-Arbeitsbereich einfach und schnell zusätzliche Computing-Power zur Verfügung zu stellen. Mit Computecluster kann Code in der Cloud ausgeführt und die Ergebnisse in Jobs getrackt werden. Das spart den Data-Scientists wertvolle Zeit und sie können an weiteren Verbesserungen arbeiten.
Diese Computecluster werden automatisch bei Bedarf hochgefahren und wieder abgeschalten, wenn sie nicht mehr benötigt werden. Somit hat man auch hier eine gute Kostenkontrolle, ohne sich on-premise um Server kümmern zu müssen.
Model Registry
Für einen guten Überblick und um sie einfach versionieren und vergleichen zu können, werden die Modelle in der Model Registry der MLOps-Tools registriert. In Azure-ML kann dies sowohl manuell aus den Experimenten geschehen, als auch programmatisch über die SDK. Dadurch können Data-Scientists als auch die Product-Owner überprüfen, ob die Performance der Modelle über die Zeit stabil bleibt oder sich ein Datendrift einstellt, auf den schnell reagiert werden muss. Die Funktionalitäten werden auch hier mit MLFlow implementiert. MLFlow ist praktischerweise komplett kompatibel zu Azure-ML und bietet im Vergleich zur azure-ml-sdk einige vorteilhafte Features in Bezug auf die Modellregistrierung.
Mit MLFlow kann jeder Modellversion eine Stage zugewiesen werden, um zu bestimmen ob ein Modell frisch registriert wurde (Stage: Dev), es mit dem nächsten Release auf Produktion landen soll (Stage: Staging), es in Produktion ist (Stage: Prod) oder es bereits früher auf Produktion benutzt wurde (Stage: Archived). Leider gibt es momentan nicht die Möglichkeit, dies in Azure-ML so darzustellen wie in der MLFlow-UI (Abbildung 8: Stand 1.11.2022). Die Funktionalität steht jedoch auch in Azure-ML zur Verfügung.
Deployment der Modelle mit MLOps in Azure
Dieser Schritt ist einer der komplexesten Schritte zur Produktivität des Modells, wenn es „from-scratch“ aufgebaut werden muss und kein MLOps-Tool verwendet wird. Denn ohne diese Tools müssen eigenhändig Hosts für die Vorhersage erstellt werden. Dies bedeutet, dass Computing-Power in Form von z.B. VMs mit den passenden Docker-Images bestückt, in einem Kubernetes-Cluster zur Verfügung gestellt, und die Skripte dementsprechend aufgebaut werden müssen.
MLOps in Azure erleichtert diesen Prozess enorm. Prinzipiell benötigt man für die Vorhersage über Azure-ML ein scoring script, welches den Service initiiert und Anfragen bearbeitet, ein Modell aus der Model-Registry und ein Inferenz-Cluster welches ebenfalls im Azure-ML-Arbeitsbereich erzeugt werden kann. Mit nur wenigen Zeilen Code kann aus diesen drei Komponenten dann ein Service erstellt werden, welcher Echtzeitvorhersagen ermöglicht, selbstständig mit den Anfragen skaliert und in Application-Insights getrackt wird. In Abbildung 9 ist beispielhaft der Service für die Fraud-Detection dargestellt.
Monitoring der Services
Um Insights über die Nutzung und Stabilität der Services zu erlangen, bietet Azure für seine MLOps-Tools mehrere Möglichkeiten. Der Azure-ML-Workspace bietet beispielsweise direkt Informationen zur Nutzung der Endpoints. Darüber hinaus können diese Informationen auch an Azure-Application-Insights gestreamt werden, um ein genaueres Gesamtbild auch anderen Leuten wie Backend-Entwicklern oder den Product-Ownern zur Verfügung zu stellen (Abbildung 10).
Fazit zu MLOps in Azure
MLOps in Azure bringt Data Science-Teams mit Hilfe von MLFlow und einem Azure-ML-Arbeitsbereich auf ein neues Produktivitätslevel. Data Scientists sind dank MLOps in der Lage, ihre Modelle schnell zu deployen, detailliert zu tracken und einfach den Überblick zu behalten. Auch Product Ownern und anderen Stakeholdern kann ad-hoc ein Überblick über die verwendeten Services und deren Nutzung gegeben werden, was zu mehr Transparenz führt. Die Kosten sind in Azure gut einsehbar und einfach kontrollierbar, da lediglich genutzte Computing-Power und benutzter Speicher in Rechnung gestellt werden.