[PYTHON] Erstellen Sie eine Datenanalyseumgebung mit Kedro + MLflow + Github-Aktionen
Einführung
- Ich habe mit Kedro + MLflow + Github Actions eine Datenanalyseumgebung erstellt und meine Impressionen geschrieben.
Hintergrund
** = "Probleme beim Erstellen eines Notizbuchs, das sich in einer Datei in einer lokalen Umgebung für jedes Experiment befindet (lightgbm_02_YYYYMMDD.ipynb usw.)" **
- Sie erhalten ein riesiges und komplexes Notizbuch
- Vorverarbeitung, Modelllernen, Modellbewertung ...
- Es ist schwierig, die verantwortliche Person zu teilen (obwohl Sie in vielen Fällen alles selbst erledigen werden).
- Wartung ist scharf
- → Wenn Sie durch Verarbeitung teilen, werden Sie die Abhängigkeit diesmal nicht gut verstehen
- Codeüberprüfung ist schmerzhaft
- Notebooks sind schwer zu unterscheiden
- Wenn es sich um ein Notizbuch handelt, können Sie keinen Code-Formatierer oder Prüfer anwenden
- Experimentmanagement ist schwierig
- Ich möchte sie auflisten (es ist schwierig, jedes Notizbuch zu öffnen und sich daran zu erinnern).
- → Es ist mühsam, die Liste manuell zu pflegen (je mehr Versuche es gibt)
- Es funktioniert nicht oder das Ergebnis ändert sich in der Umgebung einer anderen Person (Wiederherstellung aus einer sauberen Umgebung)
- Wenn Sie die Angelegenheit von einer Person übernehmen und den Master klonen, funktioniert dies nicht
- Die Ergebnisse hängen von lokalen nicht festgeschriebenen Daten ab
Was ich getan habe
Einführung von Kedro als Pipeline-Tool
### Was ist Kedro? ・ Einführungsmethode
* (Referenz) [Einführung in die Pipeline für maschinelles Lernen mit Kedro](https://qiita.com/noko_qii/items/2395d3a3dbcd9410e5e7)
Gute Sache
- Indem zuerst der Knoten (, Dateneingang / -ausgang) / die Pipeline definiert wurde, war es einfach, die verantwortliche Person zu teilen + einfach zu warten.
- Es war gut, zuerst die In / Out-Erkennung für jeden Prozess abgleichen zu können.
- Die Namensregeln wurden zuerst festgelegt und bekannt gemacht.
- Einfach mit Notebook zu arbeiten
$ kedro jupyter notebook --allow-root --port=8888 --ip=0.0.0.0 &
from kedro.framework.context import load_context
proj_path = '../../../'
context = load_context(proj_path)
# df = catalog.load("XXX")
parameters = context.params
- Ich konnte die Pipeline mit kedor-viz visualisieren
- Ich konnte Anmeldeinformationen mit credential.yaml verwalten
Die verbleibenden Herausforderungen
- Ich mache mir Sorgen, wann ich eine Pipeline erstellen soll (Skript)
- Datenwissenschaftler haben immer mehr Versuche und Fehler in Notizbüchern gemacht → Dateningenieure haben von Zeit zu Zeit Pipelines erstellt, aber die Anzahl der Korrekturen war groß und belastend.
- Ich möchte die Pipeline von der Mitte aus erneut ausführen (es scheint möglich, aber es wurde nicht untersucht).
- kedro-viz wird nicht automatisch aktualisiert (wird beim Neustart geladen)
- Ich möchte lib irgendwo ausschneiden (vorausgesetzt, ich lese sowohl von der Notebook-Seite als auch von der src-Seite)
- Ich möchte Jobs parallel ausführen
- In der Parametersuche können Sie mit optuna verknüpfen
Einführung von MLflow als Experimentmanagement-Tool
### Was ist MLflow? ・ Einführungsmethode
* (Referenz) [Einführung in das Experimentmanagement mit MLflow](https://future-architect.github.io/articles/20200626/)
Gute Sache
- Siehe den obigen Link
- Selbst wenn ich es so geschrieben hätte, dass es zu MLflow übersprungen würde, könnte das gesamte Notebook verloren gehen.
- → Es ist möglicherweise besser, mit einer Tabelle (Excel) umzugehen, wenn es das erste Chaos ist, und zu MLflow zu wechseln, wenn es bis zu einem gewissen Grad solide wird.
Die verbleibenden Herausforderungen
- Zusammenarbeit mit Kedro
- Ich möchte automatisch Informationen aus Kedros Parametern.yaml und Pipeline.py verknüpfen.
- Verwenden Sie die Journalversionierung?
Einführung von Github-Aktionen als CI-Tool
### Was sind Github-Aktionen? ・ Einführungsmethode
* (Referenz) [CI / CD zum Ausprobieren mit der neuen Funktion "GitHub Actions" von GitHub](https://knowledge.sakura.ad.jp/23478/)
Gute Sache
- Der Betrieb des Hauptzweigs (Hauptzweig) wurde garantiert.
- Ich konnte ein reproduzierbares Modell erstellen (da sich die Festschreibungs-ID jedes Mal in einer schönen Umgebung mit einem klaren Querschnitt bewegt).
Die verbleibenden Herausforderungen
- Jeder Build ist schwer. Sollte ich den Cache gut nutzen?
- Schweres Lernen ・ Berücksichtigen Sie bei der Verwendung der GPU die Konfiguration
Andere
- Code-Formatierer und -Prüfer eingeführt
- (Referenz) Formatierer vor dem Festschreiben ausführen
- Schecks werden zum Zeitpunkt des Festschreibens ausgeführt, daher ist es wichtig, sie von Anfang an einzuführen
- Wenn Sie einen Container verwenden, legen Sie ihn mit Git in den Container (da Python erforderlich ist).
- Überlegen Sie, wie Sie es mit der Prüfung auf der CI-Seite richtig verwenden
- Mit AWS Elastic Beanstalk in eine Webanwendung umgewandelt
- Ich wollte mit S3 + API Gateway + Lambda bauen, weil serverlos gut war, aber ich gab aufgrund der Dateigrößenbeschränkung auf
- Sie können EFS verwenden, aber es ist ein bisschen so, als müssten Sie es zu einer VPC-Umgebung machen.
- Wenn es sich um einen Container ohne Server handelt (oder besser gesagt, Sie möchten nur schlafen, wenn keine Anforderung vorliegt), Cloud Run oder GAE mit GCP?
abschließend
- Es gibt immer noch viele Herausforderungen, aber ich möchte weiterhin verschiedene Dinge ausprobieren, um den maschinellen Lernzyklus schnell und sicher durchzuführen und gleichzeitig den Datenwissenschaftler zu begleiten.
- Übrigens wurde der Inhalt dieses Artikels als Randnotiz genommen, als ich versuchte, ein Modell zur Vorhersage des Rennergebnisses von Pferderennen zu entwickeln, indem ich mit meinen Freunden spielte. Ich werde den Code wahrscheinlich veröffentlichen, sobald er etwas sauberer ist. (Leicht geändert von Kedros Standardverzeichnisstruktur.)