iX 10/2018
S. 126
Praxis
Machine Learning
Aufmacherbild

Deep-Learning-Modelle deployen mit TensorFlow Serving

Machine Learning as a Service

TensorFlow Serving stellt Machine-Learning-Modelle schnell, flexibel und vor allem performant in Produktionsumgebungen bereit. In Kombination mit Keras lassen sich so hochskalierbare Modelle erstellen und als Services in Anwendungen integrieren.

Dank moderner Frameworks wie TensorFlow und Keras haben Deep-Learning-Methoden mittlerweile den Weg aus der Forschung in die Industrie gefunden. Ob in der Verarbeitung natürlicher Sprache oder bei der Objekterkennung – neuronale Netze sind kaum mehr wegzudenken.

Eines der meistgenutzten Frameworks für Deep Learning ist Keras, eine High-Level-API für neuronale Netze, die TensorFlow als Backend für verteilte Berechnungen nutzen kann. Durch die einfache API und den modularen Aufbau lassen sich in Keras schnell funktionale Prototypen für eine Vielzahl von Netzarchitekturen definieren und trainieren. Doch Machine-Learning-Modelle werden heute nicht mehr nur für einmalige Analysezwecke genutzt – in Anwendungen ersetzen sie oft statische Regelwerke oder Algorithmen. Daher stellt sich die Frage, wie sich trainierte Modelle in Anwendungen integrieren lassen.

Während es im Big-Data-Bereich bereits Frameworks wie Apache Airflow oder Luigi von Spotify gibt, die eine robuste Verarbeitung in großen Batches ermöglichen, muss man bei der Integration neuronaler Netze in Anwendungen anders vorgehen. Hier werden Modelle nicht periodisch aus Batch-Jobs angewendet, sondern live als Aufruf in der Applikation. Um diese Art der Integration zu erleichtern, hat Google TensorFlow Serving entwickelt. Mit dem integrierten ModelServer lassen sich TensorFlow-Modelle mit wenig Aufwand bereitstellen und nutzen.

TensorFlow Serving besteht im Wesentlichen aus dem ModelServer als Hauptkomponente und der TensorFlow Serving API für Python. Das zentrale Konzept für das Deployment nativer TensorFlow-Modelle ist das Servable, das die vom Server geladenen Modellinstanzen abstrahiert. Die weiteren Komponenten von TensorFlow Serving sind lediglich erforderlich, wenn der ModelServer erweitert werden soll, da er von Haus aus TensorFlow-Modelle nur aus dem lokalen Dateisystem laden kann. Für solche Erweiterungen muss man TensorFlow Serving jedoch neu kompilieren.

Die Ladestrategie bestimmt, welche Modellversionen der ModelServer den Clients als Servables anbietet (Abb. 1).

TensorFlow Serving kann zur Laufzeit verschiedene Versionen eines Modells als Servable laden und auch löschen, sodass sowohl sukzessive Rollouts neuer Modelle als auch Deployments ohne Downtime gewährleistet sind. Abbildung 1 zeigt das Zusammenspiel zwischen Modellen im Dateisystem, Servables, der Ladestrategie und der Client-API.

Ein Wetterfrosch für Jena

Ein Modell zur Wettervorhersage für die Stadt Jena soll das Konzept und die Funktionsweise des ModelServers veranschaulichen. Der Wetterfrosch wird als Service mit TensorFlow Serving bereitgestellt. Er soll anhand der Daten der letzten fünf Tage die Temperatur in Jena für den nächsten Tag vorhersagen. Die für das Training verwendeten Wetterdaten stehen frei im Netz zur Verfügung (siehe ix.de/ix1810126). Das Modell wird in Keras mit TensorFlow als Backend implementiert.

Tabelle
Tabelle: Die Trainingsdaten der Wetterstation

Der Trainingsdatensatz ist eine Zeitreihe über den Zeitraum von 2009 bis 2016 mit 14 Merkmalen, vom Luftdruck über die Temperatur bis hin zu Windgeschwindigkeit und -richtung, mit einer Granularität von zehn Minuten. Ein Auszug ist in der Tabelle „Die Trainingsdaten ...“ aufgelistet. Da Wetterdaten sich langsamer als im Zehn-Minuten-Takt ändern, haben wir die Granularität zum Training des neuronalen Netzes auf stündliche Werte reduziert. Damit schrumpft die Menge an Eingaben, was die Verarbeitung beschleunigt.

Listing 1: Laden und Plotten eines bereits trainierten Modells in Keras

from keras.models import load_model
from keras.utils import plot_model

model = load_model("...")

plot_model(model, 
           to_file="...",
           show_shapes=True,
           show_layer_names=False)

Bei Zeitreihendaten bietet sich ein rekurrentes neuronales Netz zur Wettervorhersage an. Rekurrente Netze machen während des Trainings jede Berechnung zum Zeitpunkt t abhängig vom vorherigen Ergebnis (t–1), wodurch sich periodische Merkmale wie beispielsweise Jahreszeiten effektiver lernen lassen. Das trainierte neuronale Netz steht im von Keras unterstützten HDF5-Format (Hierarchical Data Format) zum Download auf GitHub bereit (ix.de/ix1810126). Die Funktion load_model() lädt es in Keras (siehe Listing 1).