© Liashko/Shutterstock.com
Entwickler Magazin
TensorFlow-Modelle in Java-Server integrieren

In vino veritas

Am Ende eines aufwendigen Entwicklungsprozesses steht ein mit viel Fleiß und Mühe erfolgreich trainiertes TensorFlow-Machine-Learning-Verfahren. Jetzt soll es für einen Kunden in Betrieb genommen werden. Aber wie soll das geschehen? Was muss deployt werden? Natürlich liegt der Einsatz in einer Python-Umgebung, etwa auf einem Django-Webserver oder dem brandneuen TensorFlow Serving nahe. Zum Glück gibt es aber auch eine von Google unterstützte Java-Wrapper-Bibliothek. Wir müssen nicht auf unsere bewährten Java-Tools für den Servereinsatz verzichten. Allerdings tauchen auf dem Weg zum fertigen REST-Service eine Reihe praktischer Hürden auf.

Christoph Henkelmann


Das richtige Vorgehen lässt sich am besten anhand eines Beispiels erläutern: Wir möchten die sensorische Qualität (wie lecker ist er?) von Wein anhand chemischer und physischer Messwerte vorhersagen. Die Daten hierzu stammen aus dem UCI Machine Learning Repository [1] und wurden im Rahmen eines Papers der Universität Minho in Portugal erfasst. Das komplette Codebeispiel für eine Umsetzung mit TensorFlow ist auf GitHub zu finden [2]. Der Input unseres Modells besteht aus diversen Messwerten wie pH-Wert, Alkohol, Zucker etc. Der Output ist eine Einschätzung der Weinqualität auf einer Skala von 0-10. Die Bewertung der Trainingsdaten haben professionelle Weinkenner übernommen und ist für Forschungszwecke frei zugänglich.

Damit wir ein gelerntes Modell erfolgreich in der Praxis einsetzen können, muss der TensorFlow Code zum Trainieren des Modells so strukturiert sein, dass das gelernte Modell passend exportiert werden kann. Auf der Java-Seite muss das Modell dann wieder richtig eingebunden werden. Wir werden also versuchen, einen KI-Weinkenner zu bauen und über einen Java-Server anzusprechen.

Warum überhaupt Java – TensorFlow ist doch Python-Software?

Alle tatsächlichen Berechnungen in TensorFlow werden durch die zugrunde liegende TensorFlow-C++-Bibliothek durchgeführt. Das Python-API, das in allen Beispielen zu sehen ist, ist eigentlich nur ein bequemer Wrapper, um das C++-API zu steuern und leichter nutzbar zu machen. Wenn wir also ein fertig trainiertes Modell nur noch aufrufen wollen, um eine Vorhersage oder Klassifikation vorzunehmen, sind wir auf den Python Wrapper nicht mehr angewiesen.

Nun wissen wir, dass wir für den Einsatz in einem Produktivsystem auf Python verzichten und stattdessen beispielsweise Java (mit JNI) einsetzen können. Aber ist das überhaupt sinnvoll? Vom technischen Standpunkt macht es keinen großen Unterschied. Wenn der Entwickler die unten aufgeführten Klippen erst einmal umschifft hat, ist der Aufwand mit einem Einsatz in beispielsweise Spring oder Django vergleichbar, was die Implementierung betrifft. Auch was die Performance angeht, ergeben sich kaum Unterschiede, da die Berechnungen durch den gleichen nativen in C++ geschriebenen Code durchgeführt werden (Kasten: „Ganz auf Python verzichten?“).

Ganz auf Python verzichten?Theoretisch sind alle Operationen direkt auf dem C++ API ausführbar und damit auch in Java. In der Praxis ist das allerdings so, als würde jemand einen riesigen Baum mit einem Taschenmesser fällen. Das Python-API er...

Entwickler Magazin
TensorFlow-Modelle in Java-Server integrieren

In vino veritas

Am Ende eines aufwendigen Entwicklungsprozesses steht ein mit viel Fleiß und Mühe erfolgreich trainiertes TensorFlow-Machine-Learning-Verfahren. Jetzt soll es für einen Kunden in Betrieb genommen werden. Aber wie soll das geschehen? Was muss deployt werden? Natürlich liegt der Einsatz in einer Python-Umgebung, etwa auf einem Django-Webserver oder dem brandneuen TensorFlow Serving nahe. Zum Glück gibt es aber auch eine von Google unterstützte Java-Wrapper-Bibliothek. Wir müssen nicht auf unsere bewährten Java-Tools für den Servereinsatz verzichten. Allerdings tauchen auf dem Weg zum fertigen REST-Service eine Reihe praktischer Hürden auf.

Christoph Henkelmann


Das richtige Vorgehen lässt sich am besten anhand eines Beispiels erläutern: Wir möchten die sensorische Qualität (wie lecker ist er?) von Wein anhand chemischer und physischer Messwerte vorhersagen. Die Daten hierzu stammen aus dem UCI Machine Learning Repository [1] und wurden im Rahmen eines Papers der Universität Minho in Portugal erfasst. Das komplette Codebeispiel für eine Umsetzung mit TensorFlow ist auf GitHub zu finden [2]. Der Input unseres Modells besteht aus diversen Messwerten wie pH-Wert, Alkohol, Zucker etc. Der Output ist eine Einschätzung der Weinqualität auf einer Skala von 0-10. Die Bewertung der Trainingsdaten haben professionelle Weinkenner übernommen und ist für Forschungszwecke frei zugänglich.

Damit wir ein gelerntes Modell erfolgreich in der Praxis einsetzen können, muss der TensorFlow Code zum Trainieren des Modells so strukturiert sein, dass das gelernte Modell passend exportiert werden kann. Auf der Java-Seite muss das Modell dann wieder richtig eingebunden werden. Wir werden also versuchen, einen KI-Weinkenner zu bauen und über einen Java-Server anzusprechen.

Warum überhaupt Java – TensorFlow ist doch Python-Software?

Alle tatsächlichen Berechnungen in TensorFlow werden durch die zugrunde liegende TensorFlow-C++-Bibliothek durchgeführt. Das Python-API, das in allen Beispielen zu sehen ist, ist eigentlich nur ein bequemer Wrapper, um das C++-API zu steuern und leichter nutzbar zu machen. Wenn wir also ein fertig trainiertes Modell nur noch aufrufen wollen, um eine Vorhersage oder Klassifikation vorzunehmen, sind wir auf den Python Wrapper nicht mehr angewiesen.

Nun wissen wir, dass wir für den Einsatz in einem Produktivsystem auf Python verzichten und stattdessen beispielsweise Java (mit JNI) einsetzen können. Aber ist das überhaupt sinnvoll? Vom technischen Standpunkt macht es keinen großen Unterschied. Wenn der Entwickler die unten aufgeführten Klippen erst einmal umschifft hat, ist der Aufwand mit einem Einsatz in beispielsweise Spring oder Django vergleichbar, was die Implementierung betrifft. Auch was die Performance angeht, ergeben sich kaum Unterschiede, da die Berechnungen durch den gleichen nativen in C++ geschriebenen Code durchgeführt werden (Kasten: „Ganz auf Python verzichten?“).

Ganz auf Python verzichten?Theoretisch sind alle Operationen direkt auf dem C++ API ausführbar und damit auch in Java. In der Praxis ist das allerdings so, als würde jemand einen riesigen Baum mit einem Taschenmesser fällen. Das Python-API er...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang