Interview mit Christoph Henkelmann

TensorFlow + Java: Machine Learning im Enterprise-Umfeld

Ann-Cathrin Klose

Christoph Henkelmann

Das Machine Learning Tool TensorFlow von Google erfreut sich wachsender Beliebtheit. Auf der ML Conference 2017 sprachen wir mit Christoph Henkelmann über den Einsatz des Tools in Enterprise-Umgebungen und darüber, warum Java in diesem Zusammenhang die Sprache der Wahl ist. Außerdem verrät er uns, welche neuen Trends es in der Welt des Maschinellen Lernens gibt.

JAXenter: Fangen wir erst einmal allgemein mit der Frage an, warum Java sich der Einsatz von Java im Kontext von Machine Learning in Enterprise-Umgebungen lohnt. Welche Vorteile hat das, wie genau wird Java eingesetzt und warum arbeitet man nicht einfach mit Python?

Christoph Henkelmann: Also zunächst einmal muss man immer aufpassen, denn es ist nicht immer so, dass Java prinzipiell besser als Python ist. Man sollte da nicht zu dogmatisch sein, denn es gibt ganz viele Sprachen deren Einsatz Sinn ergibt.

Ich habe mich ganz konkret in diesem Beispiel auf Java konzentriert, weil es in der Praxis zum einen sehr viele Systeme gibt, die in Java umgesetzt sind. Das gilt besonders für den Enterprise-Bereich, also den Bereich großer Firmen, die bestehend wichtige Systeme haben. Wenn ich ein bestehendes System habe und möchte das beispielsweise um ein Machine Learning Feature erweitern, dann ist es sehr gut, wenn ich es in die bestehende Struktur integrieren kann. Das hat einerseits technische Vorteile, weil ich weniger Abhängigkeiten habe und mein ganzer Prozess deswegen nicht so kompliziert wird. Habe ich 20 Anwendungsserver, dann muss ich nicht noch auf jedem davon eine Python-Installation betreuen, wenn ich sowieso schon eine Java Runtime habe.

Java ist eine Sprache, die im Businessbereich unheimlich wichtig ist.

Andererseits ist der Business-Gedanke sehr wichtig. Java ist eine Sprache, die im Businessbereich unheimlich wichtig ist. Es ist zum Beispiel so, dass man, wenn man ein neues Produkt verkaufen möchte (etwa ein Machine-Learning-Produkt) oder als Dienstleister Machine Learning implementiert, es einfach für den Kunden sehr angenehm ist, wenn man auch eine Java-Lösung hat. Zum einen politisch, weil Java etabliert ist. Die Leute sind zufrieden und das Ganze ist sicher. Zum anderen gibt es einige technische Vorteile. Allerdings geht es dann in den Bereich des persönlichen Geschmacks. Java ist relativ gut, schnell sowie für das Web geeignet und daher keine schlechte Idee. Aber natürlich kann man es auch anders machen.

JAXenter: Wenn man TensorFlow-Modelle auf einem Java-Server ausführen möchte, was muss man dabei in Bezug auf den Workflow bei der Arbeit beachten?

Christoph Henkelmann: Das kommt wie immer darauf an, aber ein ganz wichtiger Punkt ist das Preprocessing. Denn wenn ich mein Model trainiere, dann muss ich meine Daten vorher vorverarbeiten. Diese Vorverarbeitung ist oft der wichtigste Teil der Qualität meines Modells. Ich muss zudem sicherstellen, dass ich dann exakt das gleiche Preprocessing habe, wenn ich das Modell live betreibe, insbesondere in einer anderen Programmiersprache. Das heißt, entweder mache ich das Preprocessing zum Teil meines Modells oder ich muss sicherstellen, dass ich in Java den Preprocessing Teil, den ich evtl. in Phyton geschrieben habe, gleichwertig nachbilde. Das ist ein wichtiger Teil.

Ein ganz wichtiger Punkt ist das Preprocessing.

Das andere ist eine organisatorische Frage und hängt sehr stark davon ab, wie groß mein Modell ist. Wenn ich ein Modell habe, dass vielleicht maximal einige Megabyte groß ist, dann kann ich das in mein WAR (Web Application Archive) oder in mein Java-Artefakt hineinpacken und habe einen normalen Workflow. Im Grunde genommen ist das Arbeiten dann so, als würde ich mit Designern arbeiten, die Assets für meine Webanwendung bereitstellen, z.B. Hintergrundgrafiken. Ich bekomme vom Machine-learning-Team eine ZIP-Datei und da ist alles drin. Anschließend lerne ich einmal, wie ich das alles lade und packe es in meine Applikation.

Spannender wird es, wenn meine Modelle richtig riesig werden. Das allerdings habe ich in der Praxis selbst noch nicht gehabt. Man muss dann aufpassen, weil eventuell ein Archiv mit 400-500 MB an Daten vorhanden ist und das auf all den Applikationsserven verfügbar gemacht werden muss. Doch wie ich meinen Workflow organisiere, ist dann mehr ein organisatorisches als ein technisches Problem.

JAXenter: Das ist sicherlich ein spannendes Thema aber bleiben wir doch lieber bei TensorFlow auf Java-Servern im Allgemeinen. Benutzt du in dem Zusammenhang weitere Tools oder Software? Wie sieht dein Stack aus?

Christoph Henkelmann: Zu meinem Stack – Ich arbeite mit Jupiter Notebooks, weil ich dann vor allem die ganzen Möglichkeiten der Visualisierung habe, die in Python doch leichter sind als in Java. Ich habe dann eine Python Session in der ich arbeiten kann, also ganz klassisch, wie man das in den ganzen Tutorials gezeigt bekommt. Wenn die Daten größer werden, also ich viele Daten brauche, dann schreibe ich das Preprocessing manchmal einfach mit der Hand, also etwa mit einer Java Kommandozeilenapplikation, denn ein einfacher Vor-Loop in Python kann manchmal ganz schön lange dauern. Dagegen geht das in Java enorm schnell. Das heißt, wenn ich große Datenmengen habe, diese vorverarbeiten muss und ich weiß, wie mein Preprocessing läuft, schreibe ich das manchmal tatsächlich schon in Java, weil es einfach schneller geht, wenn es läuft.

Ich hatte einen Fall, bei dem das Preprocessing in Python über 30 Minuten gedauert hat, und in Java genau eine Minute.

Gerade hatte ich einen Fall, bei dem das Preprocessing in Python über 30 Minuten gedauert hat und in Java genau eine Minute. Damit kann ich mein Preprocessing natürlich besser feintunen. Wenn ich es dann tatsächlich in Produktion nehme, besteht mein klassischer Stack im Moment aus dem Ninja Web Framework, wenn ich eine Webapplikation mache und Apache CXF verwende ich, wenn ich Middleware mache. Aber auch andere Frameworks kommen zum Einsatz. Meistens braucht man eine Datenbank, dafür nehme ich am liebsten jOOQ und nicht Hibernate. Also insgesamt Standard Java Utility Frameworks, da ist nichts Besonderes dabei. Wichtig ist nur TensorBoard zu benutzen, wenn man das TensorFlow-Modell entwickelt, weil das enorm viel Zeit spart. Damit wird das Entwickeln und Debuggen auch angenehmer und spaßiger.

JAXenter: Du hattest auch erwähnt, dass Java eine Websprache ist. Wie sieht es denn aus, wenn man eine ähnliche Lösung für den Mobile-Bereich realisieren wollte?

Christoph Henkelmann: Also wenn wir über Android reden, hätten wir theoretisch Java, aber wir haben ein ganz anderes Environment in dem wir das laufen lassen. Wenn ich TensorFlow im mobilen Umfeld einsetzen will, dann nutze ich in erster das von Google entwickelte Linie TensorFlow Lite. Das muss nicht unbedingt gut sein, aber es ist das, was Google für das Deployment in IOS und Android vorsieht. In Bezug auf andere Plattformen weiß ich es nicht genau. Es speziell darauf optimiert, auf Mobile Divices zu laufen.

JAXenter: Gibt es einen neuen großen Trend bzw. irgendein spannendes Tool im Bereich Machine Learning, das dich im Moment besonders interessiert?

Christoph Henkelmann: Also algorithmisch habe ich leider noch nicht viel Zeit gehabt, damit zu arbeiten. Zu den zwei Sachen, die aktuell besonders spannend sind, gehört erst einmal Attention. Attention ist ein neuer Weg, der – wie der Name schon sagt – dafür sorgt, dass mein Machine-Learning-Verfahren seine Aufmerksamkeit konzentriert auf bestimmte Teile des Inputs lenken kann, anstatt alles gleich zu behandeln. Das ist sehr interessant.

Ebenfalls interessant sind die sogenannten Adversarial Networks. Die finde ich im Moment sogar richtig spannend, weil sie meiner Meinung nach unheimlich gut dazu geeignet sind, künstliche Trainingsdaten zu generieren. Je mehr Daten, desto besser und wenn ich einfach Daten generieren kann, dann ist das einfach Bombe. Und technisch ist CNTK die nächste Sache, die ich unbedingt ansehen möchte, obwohl ich aus der Java-Ecke komme und mehr auf dem Linux-Server unterwegs bin. Sobald sich Microsoft dazu durchringt, eine Mac-Version zu erstellen, versteht sich. Ich hatte ja bereits auf der Machine Learning Conference 2017 angesprochen, dass das TensorFlow API nicht immer schön ist. Außerdem habe ich mir die Doku zu CNTK angeguckt und ja, das ist schön. Ich hoffe, dass ich damit auch bald arbeiten kann.

JAXenter: Welche Verwendungsmöglichkeiten gibt es für CNTK?

Christoph Henkelmann: Was TensorFlow von Google ist, ist CNTK von Microsoft – mit einem etwas stärkeren Fokus auf der Sprache. Aber letztendlich sind viele Algorithmen einander ähnlich oder gar die gleichen.

JAXenter: Vielen Dank für das Interview!

Christoph Henkelmann holds a degree in Computer Science from the University of Bonn. After years of experience in the field of server development and mobile apps, among others at the FUJIFILM Group and as an independent consultant, he founded the successful Cologne mobile agency TheAppGuys in 2012. He is currently working as an IT consultant for software architecture and machine learning and is preparing to launch an AI startup.
Geschrieben von
Ann-Cathrin Klose
Ann-Cathrin Klose
Ann-Cathrin Klose hat allgemeine Sprachwissenschaft, Geschichte und Philosophie an der Johannes Gutenberg-Universität Mainz studiert. Bereits seit Februar 2015 arbeitete sie als redaktionelle Assistentin bei Software & Support Media und ist seit Oktober 2017 Redakteurin. Zuvor war sie als freie Autorin tätig, ihre ersten redaktionellen Erfahrungen hat sie bei einer Tageszeitung gesammelt.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.