[PYTHON] Einführung und Tipps von mlflow.Tracking

Was ist das

Der Kaggle-Wettbewerb [Google Cloud & NCAA® ML-Wettbewerb 2020-NCAAW](https://www.kaggle.com/c/google-cloud-ncaa-march-madness-2020-division-], an dem ich im März 2020 teilgenommen habe. Aufgrund der Einführung der Tracking-Funktion von mlflow in 1-Womens-Turnieren war es einfach zu bedienen, daher werde ich es als Memorandum veröffentlichen. Die Beschreibung beschreibt hauptsächlich die Einführung der Tracking-Funktion von mlflow und die Punkte, auf die ich bei der Einführung gestoßen bin.

Was ist mlflow?

mlflow ist eine Open-Source-Plattform, die den Lebenszyklus des maschinellen Lernens (Vorverarbeitung-> Lernen-> Bereitstellung) verwaltet und drei Hauptfunktionen hat. --Tracking: Protokollierung --Projekte: Verpackung --Modelle: Bereitstellungsunterstützung Dieses Mal werde ich hauptsächlich auf die Einführung von Tracking eingehen. Einzelheiten zu Projekten und Modellen finden Sie unter hier.

Was ist Tracking?

Tracking ist eine Funktion, die jeden Parameter, Bewertungsindex und Ergebnis, Ausgabedatei usw. beim Erstellen eines maschinellen Lernmodells protokolliert. Wenn Sie ein Projekt in git einfügen, können Sie die Codeversion verwalten. Ich dachte jedoch, dass sich die Geschichte bei der Einführung auf Projekte ausweiten würde, sodass ich sie dieses Mal weglassen werde (nächstes Mal werde ich Projekte ansprechen). Ich möchte damit umgehen, wenn ich es tue.

Einführung von mlfrow

mlflow installieren

mlflow kann mit pip installiert werden.

pip install mlflow

URI-Einstellung

Legen Sie den URI für die Protokollierung fest (standardmäßig wird er zur Laufzeit direkt unter dem Ordner erstellt). Für den URI können nicht nur das lokale Verzeichnis, sondern auch die Datenbank und der HTTP-Server angegeben werden. Der Name des Protokollierungszielverzeichnisses muss "mlruns" sein (der Grund wird später erläutert).

import mlflow

mlflow.set_tracking_uri('./hoge/mlruns/')

Experiment erstellen

Das Experiment wird vom Analysten für jede Aufgabe im maschinellen Lernprojekt erstellt (z. B. Merkmalsmenge, maschinelle Lernmethode, Parametervergleich usw.).

#Wenn kein Experiment vorhanden ist, wird es erstellt.
mlflow.set_experiment('compare_max_depth')

Lauf

Lassen Sie uns tatsächlich protokollieren.

with mlflow.start_run():
    mlflow.log_param('param1', 1) #Parameter
    mlflow.log_metric('metric1', 0.1) #Ergebnis
    mlflow.log_artifact('./model.pickle') #Andere Modelle, Daten usw.
mlflow.search_runs() #Sie können den Protokollierungsinhalt im Experiment abrufen

Es protokolliert Parameter, Scores, Modelle usw. Detaillierte Spezifikationen der einzelnen Funktionen finden Sie im offiziellen Dokument.

Starten Sie den lokalen Server

Wechseln Sie in das von URI festgelegte Verzeichnis. Stellen Sie zu diesem Zeitpunkt sicher, dass sich das Verzeichnis "mlruns" unter der Kontrolle befindet (wenn das Verzeichnis "mlruns" nicht vorhanden ist, wird das Verzeichnis "mlruns" erstellt). Starten Sie den lokalen Server mit mlflow ui.

$ cd ./hoge/
$ ls
mlruns

$ mlflow ui

Wenn Sie im Browser "http: //127.0.0.1: 5000" öffnen, wird der folgende Bildschirm angezeigt. スクリーンショット 2020-03-15 14.36.33.png

Es ist auch möglich, jeden Parameter zu vergleichen. スクリーンショット 2020-03-15 14.37.56.png

Tips

Experiment-ID abrufen

tracking = mlflow.tracking.MlflowClient()
experiment = tracking.get_experiment_by_name('hoge')
print(experiment.experiment_id)

Holen Sie sich den Namen des Experiments

#Methode 1:Experimentliste abrufen
tracking.list_experiments()

#Methode 2: 
tracking = mlflow.tracking.MlflowClient()
experimet = tracking.get_experiment('1') #Experiment ID bestehen
print(experimet.name)

Experiment löschen

tracking = mlflow.tracking.MlflowClient()
tracking.delete_experiment('1')

Lauf-ID abrufen

with mlflow.start_run():
    run_id = mlflow.active_run().info.run_id

Wenn Sie die erfasste run_id an den Parameter start_run () übergeben, wird das Protokoll der Ziel-run_id überschrieben.

Lauf löschen

tracking = mlflow.tracking.MlflowClient()
tracking.delete_run(run_id)

Protokollierung mit Diktat

#Wenn Sie mehrere Parameter gleichzeitig protokollieren möchten, übergeben Sie sie mit dict.
params = {
    'test1': 1,
    'test2': 2
         }
metrics = {
    'metric1': 0.1,
    'metric2': 0.2
         }

with mlflow.start_run():
    mlflow.log_params(params)
    mlflow.log_metrics(metrics)

download artifacts

tracking = mlflow.tracking.MlflowClient()
print(tracking.list_artifacts(run_id=run_id)) #Holen Sie sich eine Liste der Artefakte
[<FileInfo: file_size=23, is_dir=False, path='model.pickle'>]

tracking.download_artifacts(run_id=run_id, path='model.pickle', dst_path='./')

Recommended Posts

Einführung und Tipps von mlflow.Tracking
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Einführung und Implementierung der Aktivierungsfunktion
Einführung von Scikit-Optimize
Einfache Einführung in die Python3-Serie und OpenCV3
Einführung von Python
Python- und Numpy-Tipps
Einführung von ferenOS 1 (Installation)
Einführung des Virtualenv-Wrappers
Hinweise und Tipps zum vertikalen Verbinden von PySpark DataFrame
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Mechanismus von Pyenv und Virtualenv
Vor- und Nachbearbeitung von Pytest
[Einführung in cx_Oracle] (Teil 4) Abrufen und Scrollen der Ergebnismenge
Kombination von rekursiv und Generator
Kombination von anyenv und direnv
Erklärung und Implementierung von SocialFoceModel
Einführung in Aktivitäten mit Python
Differenzierung der Sortierung und Verallgemeinerung der Sortierung
Koexistenz von Pyenv und Autojump
[Einführung in Scipy] Berechnung der Lorenzkurve und des Gini-Koeffizienten ♬
Verwendung und Integration von "Shodan"
Das Problem der Lügner und der Ehrlichkeit
Einführung von DataLiner Version 1.3 und Verwendung von Union Append
Auftreten und Auflösung von tensorflow.python.framework.errors_impl.FailedPreconditionError
Quellinstallation und Installation von Python
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
[Einführung in die Udemy Python3 + -Anwendung] 69. Import des absoluten Pfads und des relativen Pfads
[Einführung in die Udemy Python3 + -Anwendung] 12. Indizieren und Schneiden von Zeichenketten
[Einführung in cx_Oracle] (Teil 2) Grundlagen zum Verbinden und Trennen mit Oracle Database
Einführung in M5StickC (Temperatur- / Feuchtigkeitsmessung und MQTT-Übertragung, UIFlow Python)
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
Umgebungskonstruktion von Python und OpenCV
Grundkenntnisse in Linux und Grundbefehle
Reihenfolge der Argumente für RegularGridInterpolator und interp2d
Die Geschichte von Python und die Geschichte von NaN
Erklärung und Implementierung des ESIM-Algorithmus
Mischgefahr! Ndarray und Matrix
Installation von SciPy und matplotlib (Python)
[Einführung in Python3 Tag 1] Programmierung und Python
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Memorandum zum Speichern und Laden des Modells
Einführung einer datengesteuerten Controller-Entwurfsmethode
Erklärung und Implementierung von einfachem Perzeptron
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
Hadoop-Einführung und MapReduce mit Python
Jupyter Notebook: 4 banale Tipps und Tricks
Dies und das von Python-Eigenschaften
Einführung von pipenv (auch anforderungs.txt erstellen)
Einführung von ferenOS 3 (Paketaktualisierung und Installation)
Einführung des Python-Zeichenpakets Pygal
Einführung in die Erkennung von Anomalien und Zusammenfassung der Methoden
Merkmale der symbolischen und harten Verbindung
Koexistenz von Python2 und 3 mit CircleCI (1.0)