Verwenden von Seldon Core für maschinelles Lernen / Sudo Null IT News

Der weit verbreitete Einsatz von maschinellem Lernen hat dazu beigetragen, Innovationen voranzutreiben, die immer schwieriger vorherzusagen sind, und intelligente Erfahrungen für Geschäftsprodukte und -dienstleistungen zu schaffen. Um dieses Problem zu lösen, ist es wichtig, fortschrittliche Methoden anzuwenden. Sergey Desyak, Leading Expert im DevOps Competence Center bei Neoflex, teilt seine Erfahrungen mit der Verwendung von Seldon Core für maschinelles Lernen, insbesondere für das „Rollout“ von Modellen.

Was ist ML

Maschinelles Lernen (ML) ist die Verwendung mathematischer Datenmodelle, die einem Computer helfen, ohne direkte Anweisungen zu lernen. Es gilt als eine Form der künstlichen Intelligenz (KI). Maschinelles Lernen verwendet Algorithmen, um Muster in Daten zu erkennen und darauf basierend ein Vorhersagemodell zu erstellen. Je mehr Daten ein solches Modell verarbeitet und nutzt, desto genauer werden die Ergebnisse seiner Arbeit. Dies ist sehr ähnlich, wie eine Person ihre Fähigkeiten in der Praxis verbessert.

All dies wird als Lebenszyklus des Modells bezeichnet. Erstens stellen sie eine technische Herausforderung für Data Scientists dar, die ML-Modelle entwickeln. Anschließend wird dieses Modell auf archivierten (akkumulierten) Daten trainiert, damit es in Zukunft mit neuen Daten arbeiten kann. Je nach Aufgabenstellung wird die gewünschte Qualität des Modells erreicht und ggf. an den Tuning-Parametern „justiert“, bis das Ergebnis erreicht ist.

Diese adaptive Natur macht maschinelles Lernen ideal für Szenarien, in denen sich Abfragedaten und Eigenschaften ständig ändern und es praktisch unmöglich ist, Code für eine Lösung zu schreiben.

Warum ML-DevOps

Obwohl maschinelles Lernen überall zu finden ist, bereitet es gewisse Schwierigkeiten bei der Umsetzung. Eine davon ist die Notwendigkeit, schnell und zuverlässig von der Versuchsphase in die Produktionsphase überzugehen, in der geschulte Modelle schnell mit der Arbeit beginnen können, um einen Mehrwert für das Unternehmen zu schaffen.

Die ML-Branche bietet viele Tools, um dieses Problem zu lösen. Anbieter öffentlicher Clouds haben ihre eigenen verwalteten Lösungen für die Bereitstellung von Modellen für maschinelles Lernen. Gleichzeitig gibt es viele Open-Source-Projekte. Einige davon sind kostenlos (Open Source), andere kostenpflichtig.

Mit all dem arbeiten Data Scientists und MLOps.

MLOps ist eine Kreuzung von Technologien wie DevOps, Machine Learning, Data Engineering. Einige erstellen ML-Modelle, andere implementieren sie in die Produktion.

Wie Modelle zuvor erstellt und verwendet wurden

Zunächst entwickelten Data Scientists auf ihren lokalen Rechnern. Die Reihenfolge ihrer Aktionen war wie folgt:

  1. Erstellt ein Modell;

  2. Trainierte und wählte die für den Start erforderlichen Parameter aus;

  3. Als pkl-Datei gespeichert.

Danach ist das Modell fertig, muss aber noch „ausgerollt“ werden. Dafür wurden zusätzliche Schritte unternommen:

  1. Auf Flask haben sie ein „Strapping“ geschrieben, um das Modell in Form eines REST-API-Dienstes (wieder Hand-zu-Hand) auszuführen;

  2. Das Bild gesammelt;

  3. Dann wurden basierend auf dem Image Entitäten in Kubernetes auf beliebige Weise erstellt (Pod, Deployment, Replicaset, Services usw.).

An diesem Prozess waren zwangsläufig sowohl Datenwissenschaftler als auch DevOps-Ingenieure beteiligt, da sowohl am Modellcode als auch an den Startparametern ständig Änderungen vorgenommen wurden. Insbesondere beim Wechsel des Modells war es notwendig, den Code für die REST-API des Dienstes neu zu schreiben, das Image neu zu erstellen und möglicherweise neue Pakete zu installieren, wobei Data Scientists zur Beratung hinzugezogen wurden.

Wie haben Sie den Prozess optimiert?

Anschließend begannen sie, eines der zusätzlichen Tools zum Ausführen von Modellen zu verwenden – MLflow. Es hat eine grafische Oberfläche und ermöglicht es Ihnen, die Benutzeroberfläche zu verwenden, um zu beobachten, wie das Modell funktioniert und mit welchem ​​​​Ergebnis. Darüber hinaus zeigt MLflow frühere Läufe und Experimente an. Damit hat sich die Vorgehensweise geändert:

  1. Data Scientist erstellt Modell (in Jupyter-Hub);

  2. Trainiert das Modell durch Auswahl von Parametern in MLflow;

  3. Ein Bild des Arbeitsmodells wird basierend auf dem Pfad zum trainierten Modell und MLflow im Servicemodus erfasst;

  4. Mit diesem Image erstellt DevOps Manifeste zur Ausführung auf Kubernetes.

Aber später gab es immer noch Probleme: Das Modell war nur im MLflow-Format und die Sprache war immer noch nur Python. Außerdem war es unmöglich, mit den als Input für das Modell erhaltenen Daten weitere Aktionen durchzuführen. Wenn sich das Modell geändert hat, mussten Sie das Image neu erstellen und alles noch einmal machen.

Es gab andere Faktoren, die nicht passten:

• Eingeschränkt in den Formaten der Modelle selbst;

• Die Unfähigkeit, eine Pipeline (Conveyor) aus mehreren sequentiellen Modellen aufzubauen, dh die Ausgabedaten eines Modells sollten in die Eingabe eines anderen eingespeist werden, sowie die Unmöglichkeit, vorläufige Transformationen der eingehenden Daten durchzuführen;

• Mangelnde Kontrolle über den Betrieb des Modells sowie Reaktion auf das Vorhandensein von Fehlern;

• Unfähigkeit, A/B-Tests durchzuführen.

Unternehmen begannen, nach einer moderneren Lösung zu suchen, da die Verwendung von MLflow unbequem, schwierig und in Bezug auf Arbeitsstunden kostspielig ist.

KFServing vs. Seldon Core

Die Wahl auf dem Markt bestand aus zwei ziemlich ähnlichen Produkten:

KFServieren

Verwendet Kubernetes CRD, um einen Dienst aus Modellen zu erstellen. Die wichtigsten Möglichkeiten sind:

● Unterstützung für Modelle verschiedener Typen (Tensorflow, XGBoost, ScikitLearn, PyTorch, ONNX);

● Verfügbarkeit von Autoscaling, auch für die GPU;

● Überprüfen der Leistung des Servermodells und der Konfiguration beim Start;

● Auf Null skalieren, dh die Fähigkeit, die Arbeit praktisch einzustellen und auf Eingabedaten zu warten;

● Canary-Rollouts für bereitgestellte Dienste.

Seldon Core

Seldon Core ähnelt KFServing. Es hat die gleichen Funktionen, aber mit zusätzlichen “Features” und Unterstützung für eine etwas größere Anzahl von Modelltypen. Außerdem ist es möglich, aus einem regulären Skript (Programme in Python, Java, NodeJS) ein fertiges Modell in Form einer REST-API bereitzustellen und damit zu arbeiten. Es ist nicht erforderlich, eine Reihe von Zwischenlösungen zu erstellen. Nehmen Sie einfach den Python-Code und führen Sie ihn als REST-API-Dienst aus. All dies bereitet Seldon im gewünschten Format für sich selbst auf, sodass keine zusätzlichen Tricks erforderlich sind.

Darüber hinaus ermöglicht es Ihnen A / B-Tests, Canary-Rollouts durchzuführen und verfügt über einen Outlier Detector (Ausreißerdetektor). Dieser Detektor prüft die eingehenden Daten auf Ähnlichkeit mit denen, auf denen das Modell trainiert wurde. Wenn das Modell zum Beispiel mit Temperaturdaten in der Arktis trainiert wurde, dann war diese Temperatur nie höher als +5 Grad. Wenn also +34 plötzlich ausfällt, gibt das Modell ein falsches Ergebnis aus, der Ausreißerdetektor „fängt“ dies und meldet, dass etwas schief gelaufen ist. Das ist zum Beispiel für das Scoring in Banken praktisch: Wenn die Kriterien für die Kreditvergabe evaluiert werden, meldet das Modell gegebenenfalls, dass die Eingabedaten falsch sind, und wird den Kredit nicht für alle freigeben.

Aufgrund des Vorhandenseins von Language Wrapper Seldon Core können Sie ein Modell aus verschiedenen Programmiersprachen erstellen.

Es hat auch häufigere Git-Commits, was bedeutet, dass es öfter aktualisiert wird und eine etwas bessere Dokumentation als KFServing hat. Obwohl es ehrlich gesagt nicht perfekt ist. Oft sucht man etwas auf der Seite in den Docks, vielleicht bekommt man 404 :). So funktioniert die Dokumentation. Aber gleichzeitig hat Seldon Core alles in Github. Da kann die Seite einfach nicht mithalten.

Wie verwende ich Seldon Core für maschinelles Lernen?

Im Allgemeinen werden wir weiterhin MLflow für die Protokollierung von Experimenten verwenden.

Alle Data Scientists kennen das Produkt Jupyter Hub, da sie praktisch nur darin arbeiten. Hier finden die Erstellung von Modellen, deren Einführung und Schulung statt. Dazu werden die notwendigen Startparameter ausgewählt und die Modelle debuggt, um die erforderliche Arbeitsqualität zu erhalten. Jeder Lauf wird in MLflow überwacht. In Zukunft können Sie die Protokolle sehen und mit welchen Parametern das Modell besser gestartet ist. Dies ist notwendig, um basierend auf den Ergebnissen die beste Metrik auszuwählen. Dazu wird einfach die MLflow-Bibliothek importiert und das Modell dorthin exportiert.

Als nächstes kommt eine grafische Oberfläche und der Datenwissenschaftler kann sehen, welcher Start am besten zu ihm passt.

Angenommen, er hat sein Ziel erreicht – das Modell funktionierte so, wie es sollte. Wenn die erforderlichen Ergebnisse erreicht sind, führt er einen Git-Push durch, das Modell wird gespeichert und an GitLab gesendet, um das Image des zukünftigen Modellcontainers zu erstellen. Hier wird das Dienstprogramm von Seldon s2i (Source-to-Image) verwendet, das aus dem Code in der Sprache (Python, Java usw.) ein funktionierendes Image im gewünschten Format erstellt, das in Seldon Core verwendet werden kann. Das Image kann ausgeführt werden und Testdaten (Testphase) an die Eingabe senden, um den Erfolg des Builds zu überprüfen.

Als Ergebnis erhalten wir ein fertiges Image für Seldon: also nicht nur ein Image für irgendein System, sondern ein Image in dem Format, das Seldon benötigt. Endpunkte werden darin bereits konfiguriert, Eingabedaten verarbeitet und das Ergebnis zurückgeliefert. Dann wird all dies in Rüben „geschoben“, um es an Kuber auszurollen (das Manifest wird bereitgestellt).

Im Falle eines erfolgreichen Builds wird das Modell mit den erforderlichen Parametern unter Verwendung von Helm-Chart (mit Seldon Deployment) und ArgoCD nach Kubernetes „ausgerollt“. Auf der Grundlage eines einzigen Manifests werden also alle Entitäten ausgerollt, die erforderlich sind, damit das Modell als REST-API-Dienst funktioniert. Seldon wird von der benutzerdefinierten Ressourcendefinition (CRD) in Kubernetes unterstützt. Er sieht die Art der Bereitstellung (Seldon-Bereitstellung) und stellt die erforderlichen Dienste, Pods bereit – also alles, was erforderlich ist, damit das Modell funktioniert.

Zur Erstellungszeit müssen Sie nur den Namen des Modells angeben. Der Modelltyp (Router, Classifier, Splitter) und die Liste der verwendeten Pakete werden ebenfalls angegeben. Danach wird die einzige Datei mit einer Liste von Bibliotheken, die vom Data Scientist selbst verwendet wurde, „aufgeworfen“. Für DevOps spielt es keine Rolle, was drin ist. Der Datenwissenschaftler fügt eine neue Bibliothek hinzu, gibt in der Datei an, und das Modell wird zusammengestellt. Ein DevOps-Ingenieur richtet einmalig eine Pipeline ein und übergibt sie einem Data Scientist. Dieser „Push“ in die Rübe, all dies wird beispielsweise mit ArgoCD auf Kubernetes ausgerollt, und Sie können bereits Daten an die „Instanz“ senden, die außerhalb auf Kubernetes verfügbar ist. Gleichzeitig ist der DevOps Engineer frei und der Data Scientist wird nicht von seiner Arbeit abgelenkt. Es ist sehr bequem, schnell und spart eine Menge Ressourcen.

Fazit

Fassen wir die Vorteile der Verwendung von Seldon Core für maschinelles Lernen zusammen:

● Am wichtigsten ist, dass der CI/CD-Prozess für DevOps viel einfacher geworden ist;

● Die native Kubernetes-Lösung reduziert auf Kosten des Betreibers automatisch die Anzahl der Schritte beim „Deployment“ des Modells. Es besteht keine Notwendigkeit, eine große Anzahl von Mitarbeitern zu gewinnen;

● Größere Flexibilität bei der Verwendung unterschiedlicher Modelltypen und in unterschiedlichen Kombinationen. Die Möglichkeit, Modellpipelines zu erstellen, ohne viel Code schreiben zu müssen;

● Integration mit modernen Lösungen: Istio, Prometheus;

● Vorkonfigurierte Protokollierung und Verwaltung.

Zusätzlich ist es in Prometheus möglich, die Auslastung und das Ergebnis der Modelle zu überwachen. Wenn wir A/B-Tests einführen, können wir die Parameter der Verarbeitung jedes Modells an den Eingabedaten sehen.

Dies ist eine ziemlich flexible Lösung, da Data Scientists in verschiedenen Sprachen arbeiten können. Meistens Python, aber manchmal NodeJS oder Java. Ein Bild mit einem Arbeitsmodell wird unabhängig von der Sprache, in der es geschrieben ist, zusammengestellt.

Similar Posts

Leave a Reply

Your email address will not be published.