Künstliche Intelligenz in Produktion mit MLflow – Teil 3: Model Serving

msflow-title-3

Dieser Teil der Reihe dreht sich um die Herausforderungen von Model Serving. In Teil 2 wurde das Modul MLflow Models eingeführt und gezeigt, wie ein trainiertes Modell im Artifact Store gespeichert werden kann. In diesem Teil wird vorgestellt, wie ein solches Modell in verschiedenen Formen bereitgestellt werden kann.

Problem 3: Model Serving

Wenn ein Modell trainiert und ausreichend validiert wurde, muss es unterschiedlichen Nutzern zur Verfügung gestellt werden. Hier entstehen in der Praxis häufig große Reibungsverluste: Data Scientists entwickeln komplexe Algorithmen mit cutting-edge Technologien, die dann von Anwendungsentwicklern performant eingebettet werden müssen. Das ist häufig mit aufwendigen Neu-Implementierungen der Algorithmen verbunden, da die Data Scientists andere Umgebungen verwenden als die Anwendungsentwickler. Diese Prozesse können beträchtlich erleichtert werden, wenn Modelle standardmäßig in verschiedenen Umgebungen bereitgestellt werden können.

MLflow Models

Eine Variante ist die Bereitstellung als Web-Server mit REST-Schnittstelle. Dafür wird dem CLI-Befehl mlflow models serve der Pfad eines gespeicherten Models übergeben:

mlflow models serve -m /path/to/artficat-store/run_id/artifacts/model --port 1234  

Anschließend kann z.B. mithilfe eines curl-Befehls eine Anfrage an den Server gestellt werden. In der Anfrage werden die Daten, für die eine Vorhersage gemacht werden soll, mitgegeben. Der Server antwortet mit der Vorhersage.

curl -X POST -H "Content-Type:application/json; format=pandas-split" --data '{"columns":["sepalLength","sepalWidth","petalLength","petalWidth"],"data":[[5.1,3.5,1.4,0.2]]}' http://127.0.0.1:1234/invocations 
>> Iris-setosa  

Eine weitere Variante ist das Batch-Serving mittels Spark. Ein Modell, das mit dem Flavor python-function im Artifact Store gespeichert wurde, kann als Spark User Defined Function (UDF) in ein Spark Cluster geladen werden, um dort verteilte Vorhersagen treffen zu können.

# UDF erstellen 
my_udf = mlflow.pyfunc.spark_udf(sparkSession,"/path/to/model",result_type=StringType()  ) 

# Vorhersagen machen 
iris_df = iris_df \ 

    .withColumn("prediction",my_udf("sepalLength","sepalWidth", "petalLength", "petalWidth"))  

Durch die Angabe von result-type kann der Rückgabewert der Vorhersagen definiert werden. Im Beispiel wird StringType() verwendet, da die Blumenart vorhergesagt wird. Default ist DoubleType(). Dem Dataframe iris_df wird eine Spalte prediction hinzugefügt, die durch die UDF befüllt wird.

iris_df.show() 

+-----------+-----------+-----------+-----------+-----------+ 
|sepalLength| sepalWidth|petalLength| petalWidth| prediction| 
+-----------+----------+-----------+-----------+-----------+ 
|        5.1|        3.5|        1.4|        0.2|Iris-setosa| 
|        4.9|        3.0|        1.4|        0.2|Iris-setosa| 
|        4.7|        3.2|        1.3|        0.2|Iris-setosa| 
|        4.6|        3.1|        1.5|        0.2|Iris-setosa| 
|        5.0|        3.6|        1.4|        0.2|Iris-setosa| 
|        ...|        ...|        ...|        ...|        ...| 
+-----------+-----------+-----------+-----------+-----------+  

Fazit

Die Entwicklung und insbesondere die Inbetriebnahme von KI-Modellen ist mit Herausforderungen verbunden. Hier werden Tools zur Vereinfachung der Prozesse benötigt. In dieser Beitragsreihe wurde MLflow vorgestellt, ein Open-Source-Tool, das das Protokollieren von Trainingsläufen sowie das Verwalten und Inbetriebnehmen von Modellen erleichtert. Es wurde gezeigt, wie Metriken und Parameter mithilfe des Moduls MLflow Tracking gespeichert werden können. Das Modul MLflow Models bietet Möglichkeiten zur plattformunabhängigen Speicherung von Modellen und deren Abhängigkeiten. Im Beispiel wurde ein Entscheidungsbaum mit scikit-learn trainiert, gespeichert und über eine REST-Schnittstelle zur Verfügung gestellt. Anschließend konnten Anfragen mittels curl gestellt werden. Zudem wurde gezeigt, wie mit diesem Modell über Apache Spark verteilte Vorhersagen gemacht werden können. Somit stellt MLflow ein gutes Tool dar, das zur Unterstützung der Entwicklung, Verwaltung und des Deployment von Machine Learning Modellen beiträgt.

Links

Hier finden Sie die Links zu Teil 1: Model Tracking und Teil 2: Model Management.

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