Blog
Ihr ML-Prototyp muss nicht unordentlich sein. Ein paar Worte über den QuickStart ML Blueprint

<em>Ein Prototyp ist ein frühes Muster, Modell oder eine Version eines Produkts, das zum Testen eines Konzepts oder Prozesses gebaut wird.</em>
Wikipedia
Was wir oben haben, ist eine schöne, allgemeine Definition des frühen Stadiums einer Entwicklung. Eine Definition, die in vielen Bereichen anwendbar ist. Aber lassen Sie uns versuchen, genauer zu werden. Was ist ein Prototyp beim maschinellen Lernen? Ein Prototyp für maschinelles Lernen ist eine überwältigende Mischung aus Spaghetti-Code, nicht versionierten Jupyter Notebooks und losen Datenproben, die von niemandem außer seinem Ersteller zusammengestellt und ausgeführt werden können. Ein Prototyp für maschinelles Lernen ist etwas, das MLOps-Ingenieure dazu veranlasst, plötzlich um 2 Uhr morgens aufzuwachen und zu schreien: "Na und, wenn es auf Ihrem Rechner funktioniert?! Ein Prototyp für maschinelles Lernen ist etwas, das ein Datenwissenschaftler zu seinem Haufen der Schande hinzufügt, Sekunden nachdem er von seinem Manager gehört hat: "Gute Arbeit, aber jetzt lass uns etwas einsatzfähiges bauen". Aber muss das wirklich so sein?

Von einem Kaggle-Wettbewerb zu einem ML-Framework
Vor ein paar Monaten haben wir in unserem GetInData Advanced Analytics Team beschlossen, an einem Kaggle-Wettbewerb mit dem Titel "H&M Personalized Fashion Recommendations'' teilzunehmen (Sie können mehr darüber in einem unserer früheren Blogbeiträge lesen "Was treibt die Entscheidungen Ihrer Kunden an? Finden Sie Antworten mit Machine Learning Modellen! Der Kaggle-Wettbewerb von H&M" ). Wie der Name schon sagt, ging es bei dem Wettbewerb um die Entwicklung eines Prototyps für ein Empfehlungssystem, das auf den von H&M zur Verfügung gestellten Daten basierte. Es überrascht also nicht, dass sich alles um Kleidung drehte. Wir hatten tabellarische Daten über Kunden, Artikel und Transaktionen zusammen mit Artikelbildern und Beschreibungen in natürlicher Sprache. Auf der Grundlage von 2 Jahren Historie sollten wir für jeden Kunden 12 Artikel vorhersagen, die in der folgenden Woche gekauft werden würden. Außerdem hatten wir einen Haufen Leute in unserem Team, die darauf erpicht waren, viele verschiedene Modellierungsansätze auszuprobieren.
Dennoch haben wir versucht, bei all dem vernünftig zu sein. Wir wollten nicht nur eine gute Punktzahl im Wettbewerb erreichen, sondern auch unsere Teamarbeit organisieren und unser Projekt so ordentlich wie möglich strukturieren. Im Grunde haben wir also versucht, einen Prototyp für maschinelles Lernen zu erstellen, aber keinen unordentlichen. Obwohl aufgrund der begrenzten Zeit und Ressourcen nicht alles perfekt lief, haben wir versucht, das Problem so anzugehen, als ob es sich um einen realen Anwendungsfall unseres Kunden handeln würde, der schließlich mit so wenig zusätzlichem Aufwand wie möglich produktiv gemacht werden sollte, um den Übergang zwischen PoC und einer einsatzfähigen, produktionsreifen Lösung zu schaffen.

Diese letzte Idee hat in unserem Team nach dem Ende des Wettbewerbs einen starken Widerhall gefunden. Was wäre, wenn wir dieses Konzept eines wirklich gut organisierten Prototypings verallgemeinern könnten, das die Ergebnisse der PoC-Phase unserer Data-Science-Projekte sauber, überprüfbar und reproduzierbar machen würde? Was wäre, wenn wir nicht nur einige Richtlinien für die Initiierung und Entwicklung von Lösungen für maschinelles Lernen hätten, sondern auch eine Reihe praktischer Anwendungsfälle, die wir teilweise in echten Projekten wiederverwenden könnten? Was wäre, wenn wir den Aufwand für die Produktion unserer Prototypen und die Skalierung unserer lokalen Arbeit in Big Data Cloud-Umgebungen effektiv minimieren könnten? So wurde unser GID ML Framework geboren.
Was wollen wir wirklich schaffen?
Wir haben uns zunächst angesehen, was wir während des Kaggle-Wettbewerbs erstellt haben, und überlegt, wie wir unseren Ansatz verbessern und erweitern könnten, um ihn auf andere Anwendungsfälle des maschinellen Lernens anzuwenden, die uns bei unserer Arbeit begegnet sind. Wir definierten einige nicht allzu spezifische, aber auch nicht allzu triviale Module, die - wenn sie richtig miteinander verbunden werden - fast jede typische Pipeline für maschinelles Lernen beschreiben könnten (bisher sprechen wir von Core ML, aber keine Sorge, wir haben nicht vergessen, dass es letztendlich auch in DataOps- und MLOps-Landschaften passen muss). Dann kehrten wir zu unserem Problem mit der Kaggle-Empfehlungsmaschine zurück und begannen auf der Grundlage dieses spezifischen Anwendungsfalls mit der Implementierung der Codebasis, die eine Teilmenge der Module in unserer vordefinierten Architektur materialisieren würde. Als wir damit fertig waren, hatten wir nicht mehr nur ein abstraktes Schema einer generischen ML-Pipeline, sondern auch einen vollständigen Entwurf für die Lösung eines Empfehlungsproblems auf der Grundlage von tabellarischen, visuellen und Textdaten unter Verwendung von Ranking-Modellen. Diese Blaupause ist nicht nur ein Repository mit gut dokumentierten, getesteten, anpassbaren und wiederverwendbaren Code-Bausteinen. Er gibt uns auch ein klares Beispiel dafür, wie man:
- reproduzierbare, containerisierte Arbeitsumgebungen aufbauen
- Experimente verfolgen und unsere Modellprototypen versionieren
- Entwicklung von sauberem, produktionsfähigem Code für maschinelles Lernen, beginnend mit der PoC-Phase
- unsere lokalen, auf Beispielen basierenden Implementierungen in eine umfassende Cloud-Umgebung zu übertragen
Und genau das ist es, was wir am Ende erreichen wollen.

Das GID ML Framework ist weder ein Blackbox-AutoML-Problemlöser noch ein Tool, das die Bereitstellung von Prototypen automatisiert. Das GID ML Framework ist eine Sammlung von Best Practices für die Entwicklung von Lösungen für maschinelles Lernen. Aber es ist nicht nur ein Haufen theoretischer Regeln. Es handelt sich um eine Reihe kompletter End-to-End-Anwendungsfälle, die bereits implementiert, dokumentiert und sowohl in lokalen als auch in Cloud-Umgebungen getestet wurden. Diese bewährten Beispiele können als Grundlage für die Entwicklung von Lösungen für reale Anwendungsfälle dienen, die bis zu einem gewissen Grad ähnlich sind. Beispiele für Anwendungen wären:
- Folgen Sie konkreten Schritten, um eine reproduzierbare lokale Umgebung zu erstellen, die dank der sorgfältigen Verwaltung von Abhängigkeiten und der Containerisierung leicht in eine vollwertige Umgebung übertragen werden kann.
- Ersetzen Sie die Beispieldatensätze durch Ihre eigenen Daten, die auf ähnliche Weise vorbereitet wurden.
- Nehmen Sie vordefinierte Module für die Datenaufbereitung, das Feature-Engineering, die Modellierung und die Auswertung, passen Sie sie an Ihren Fall an und iterieren Sie schnell durch immer bessere Prototypen.
Und das Beste daran ist, dass Sie am Ende nicht mit einem unleserlichen Wirrwarr loser Codebrocken oder "Untitled.ipynb"-Dateien dastehen werden. Wenn Sie nur ein wenig Disziplin walten lassen, bei deren Einhaltung Ihnen dieses Framework helfen soll, erhalten Sie einen gut dokumentierten, modularen, von Unit-Tests abgedeckten Code in Produktionsqualität und eine vollständige Aufzeichnung Ihrer Experimentierverfahren und Modellversionen. Mit anderen Worten: Nach dem PoC werden Sie überrascht sein, wie viele Ansätze Sie vergleichen konnten. Auf der anderen Seite wird Ihr MLOps-Team überrascht sein, wie wenig Arbeit es noch hat, um Ihren Prototyp einzusetzen.

Was kann uns helfen, das zu erreichen?
Was die Verwirklichung der obigen Idee möglich macht, ist die eingesetzte Technologie. Unsere Hauptannahme ist, dass wir uns an den neuesten Stand der Technik und bewährte Open-Source-Tools halten. Wir möchten, dass das GID ML Framework auf jede MLOps-Architektur anwendbar und anpassbar ist. Daher vermeiden wir die Verwendung kommerzieller oder proprietärer Software für wesentliche Funktionen. Wir verwenden

Kedro ist ein Open-Source-Framework für die Entwicklung von Data-Science-Code, das viele Konzepte und Best Practices aus der Welt der Softwareentwicklung übernimmt. Kedro hat eine Reihe von Funktionen, die genau unsere Philosophie widerspiegeln, ein anpassbares, modulares Framework zu schaffen, das auf bestimmte Klassen von ML-Problemen angewendet werden kann:
- Projektvorlagen kompatibel mit Cookiecutter Data Science Regelwerk
- modulare Struktur auf der Grundlage einer Node-Pipeline-Architektur, mit der Sie saubere, zweckgebundene, ordnungsgemäß dokumentierte und von Unit-Tests abgedeckte Python-Funktionen definieren können, die Aufgaben der Datenaufbereitung und des maschinellen Lernens abdecken
- eine gut organisierte Konfiguration mit der Möglichkeit, verschiedene Parametersätze für unterschiedliche Arbeitsumgebungen wie lokal oder Cloud zu definieren
- ein Datenkatalogkonzept für die Speicherung von Informationen über alle Ihre Eingabe- und Ausgabedatensätze, die nach der Konvention des Layered Data Engineering organisiert sind; der Datentransfer wird außerdem durch eine Vielzahl von sofort einsatzbereiten Konnektoren und Ladeprogrammen für verschiedene Datentypen und Lagertechnologien unterstützt
- viele Plugins, die eine einfache Integration mit dem Rest des MLOps-Stacks ermöglichen, wie verschiedene Cloud-Plattformen, Kubeflow, Docker, MLflow usw.

GID Machine Learning Framework. Wo stehen wir jetzt gerade?
Nachdem wir die Kernstruktur des Frameworks für maschinelles Lernen bereits entwickelt haben, konzentrieren wir uns nun darauf, neue Anwendungsbeispiele zu erstellen, die auf unserer Projekterfahrung basieren, und neue gemeinsame Funktionen hinzuzufügen. Was wir bereits haben, lässt sich wie folgt zusammenfassen:
- Einrichtung der Umgebung und Containerisierung (lokal und in der Google Cloud getestet)
- Verarbeitung multimodaler Eingaben (Tabellen, Bilder, Text)
- Experimentverfolgung und Modellversionierung
- CPU/GPU-Training mit Hyperparameter-Optimierung
- Automatisierte explorative Datenanalyse
- Testaufbau
- Anwendungsfall: Empfehlungssystem für den Einzelhandel mit Ranking-Modellen
- Anwendungsfall: Empfehlungssystem für Banken mit Graph Neural Networks
Die folgenden Dinge haben wir entweder bereits in Angriff genommen oder planen, dies in nächster Zeit zu tun:
- Umfassende Dokumentation und Handbuch
- Verallgemeinertes Validierungsmodul, um verschiedene Modelle gegeneinander zu bewerten und zu testen
- Forschung zu Feature-Store-Technologien
- Anwendungsfall: Anpassbare Regressions-/Klassifizierungspipeline
- Anwendungsfall: Multivariate Zeitreihenprognose
Natürlich haben wir immer noch das Gefühl, dass wir erst am Anfang stehen, und wir haben noch viele weitere Ideen für die Zukunft, wie z.B. Modell-Ensembling, maschinelles Lernen auf Streaming-Daten, erklärbare KI-Module, anpassbare Datenimputationen und vieles mehr. Wichtig ist noch zu erwähnen, dass wir unsere Arbeit schon bald als Open Source veröffentlichen wollen, um direktes Feedback zu erhalten und hoffentlich einige Mitwirkende von außerhalb unseres Unternehmens zu gewinnen.
Interessieren Sie sich für ML- und MLOps-Lösungen? Wie können Sie ML-Prozesse verbessern und die Lieferfähigkeit von Projekten steigern? Sehen Sie sich unsere MLOps-Demo an und melden Sie sich für eine kostenlose Beratung an.
Verfasst von
Piotr Chaberski
Unsere Ideen
Weitere Blogs
Contact



