Künstliche Intelligenz in Produktion mit MLflow – Teil 2: Model Management

msflow-title-2

In Teil 1 wurde gezeigt, wie mit MLflow in der Entwicklungsphase der Überblick über Metriken und Parameter behalten werden kann. Im zweiten Teil werden die Herausforderungen beschrieben, die sich beim Model Management ergeben.

Problem 2: Model Management

Trainierte Modelle werden in der Regel in anderen Software-Umgebungen eingesetzt als denen, in denen sie trainiert wurden. Daraus ergeben sich zwei Herausforderungen: Erstens müssen Modelle persistiert werden können. Zweitens muss Portabilität der Modelle zwischen unterschiedlichen Umgebungen gewährleistet sein. Hier besteht also ein Bedarf für ein einheitliches Format zum Speichern von Modellen und deren Abhängigkeiten. Die gespeicherten Modelle müssen außerdem den Parametern und Metriken aus den Trainingsläufen zugeordnet werden können.

MLflow Models

In MLflow können zusätzlich zu den Metriken und Parametern pro Run beliebige Dateien als Artefakte im Artifact Store gespeichert werden. Zu den Artefakten zählen auch trainierte Modelle. So kann der im Beispiel mit scikit-learn trainierte Entscheidungsbaum (fitted_model) als Artefakt gespeichert werden. Die Zuordnung geschieht über die ID des Runs. Zum Speichern von Modellen bietet das Modul MLflow Models ein plattformunabhängiges Format für Machine Learning Modelle. Es werden Schnittstellen für viele verbreitete Bibliotheken bereitgestellt, um trainierte Modelle im MLflow Models Format zu speichern. Unterstützte Frameworks sind unter anderem scikit-learn, tensorflow, keras, pytorch, h2o, xgboost, R und spark. Außerdem wird mit ONNX ein offenes Format zur Repräsentation von Deep Learning Modellen unterstützt.

Im vorigen Beispiel wurde ein scikit-learn Modell trainiert. Das Modell kann über das Python-Modul mlflow.sklearn exportiert werden:

from mlflow.sklearn import log_model 
log_model(sk_model = fitted_model, artifact_path = "model")  

Das Modell ist über drei Dateien definiert: MLmodel, conda.yaml und model.pkl. Diese drei Dateien werden von der log_model Funktion im Artifact Store in einem Verzeichnis abgelegt, das als Namen die ID des Runs trägt. Das Argument artifact_path legt das Unterverzeichnis fest.

Die model.pkl enthält das trainierte Modell als serialisiertes Python-Objekt.

In conda.yaml ist die zur Verwendung des Modells benötigte Umgebung definiert, in diesem Fall als Conda Environment. Alternativ können für manche flavors, also Modell-Typen, die Abhängigkeiten auch direkt mitgegeben werden.

channels: 
- defaults 
dependencies: 
- python=3.7.3 
- scikit-learn=0.21.3 
- pip: 
  - mlflow 
  - cloudpickle=1.2.2 
name: mlflow-env  

In der MLmodel Datei sind Meta-Information über das Modell im YAML Format hinterlegt.

artifact_path: model 
flavors: 
  python_function: 
    data: model.pkl 
    env: conda.yaml 
    loader_module: mlflow.sklearn 
    python_version: 3.7.3 
  sklearn: 
    pickled_model: model.pkl 
    serialization_format: cloudpickle 
    sklearn_version: 0.21.3 
run_id: 29eddffdb8e24874a95ed75a8a7c17e2 
utc_time_created: '2020-02-28 13:26:18.918830' 

Links

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/