Machine Learning: LinkedIn veröffentlicht Java-ML-Framework Dagli

Dagli will über einen Pipeline-Ansatz vor allem das Training von Modellen vereinfachen. Die JVM als Grundlage soll die Portabilität verbessern.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

LinkedIn hat mit Dagli ein Machine-Learning-Framework veröffentlicht, das im Vergleich zu den etablierten Systemen einige Besonderheiten aufweist. Zum einen ist die zugrundeliegende Programmiersprache nicht Python wie bei TensorFlow oder PyTorch, sondern Java. Zum anderen vereint Dagli das Training und die Inferenz der Modelle in einheitlichen Pipelines.

Diese Pipelines legen Entwicklerinnen und Entwickler als gerichtete azyklische Graphen an, denen das Framework seinen Namen verleiht: DAG ist das Akronym für die englische Übersetzung Directed Acyclic Graph.

Ein DAG besteht aus Knoten, deren Kanten oder Verbindungen gerichtet sind, also in eine spezifische Richtung durchlaufen werden. Azyklisch bedeutet, dass es keine Rückverbindung zu einem einmal durchlaufenen Knoten gibt, wodurch keine Endlosschleifen auftreten können.

Die Pipelines sind als gerichteter azyklischer Graph ausgelegt, sodass eine Rückkoppelung (roter Pfeil) nicht erlaubt ist.

In Dagli sind die Wurzeln der Graphen entweder Placeholder-Objekte, die Platzhalter für die Beispielsdaten zum Training beziehungsweise der Inferenz darstellen, oder Generator-Objekte, die für jedes Beispiel automatisch Werte generieren. Letztere können unter anderem Constant, ExampleIndex und RandomDouble sein.

Die Kindknoten sind Transformer, die entweder einfache Datentransformationen vornehmen oder aus trainierten Modellen bestehen, darunter künstliche neuronale Netze, Regressions- oder Klassifikationsverfahren in Form von NeuralNetwork, XGBoostRegression oder LiblinearClassifier.

Die Transformer-Knoten können wahlweise "vorbereitet" oder "unvorbereitet" sein. Dagli nutzt für die Modelle den Ausdruck "vorbereitet" statt "trainiert". Das Readme im GitHub-Repository begründet die Wortwahl damit, dass die PreparableTransformer-Objekte keine statistischen Modelle sind. So untersucht ein BucketIndex wohl die Beispiele zur Vorbereitung, um die Grenzen für eine möglichst gleichmäßige Verteilung der Werte in den Buckets zu optimieren.

Jeder Transformer startet mit einer Eingabe, die er typischerweise in der Pipeline von dem vorhergehenden Knoten erhält. Auf der Basis führt er die Berechnungen beziehungsweise Transformationen durch, um letztlich eine Ausgabe zu erzeugen, die er an den nächsten Knoten im Graphen übergibt.

Bereits zum Start der öffentlichen Beta stehen einige vorgefertigte Transformer-Module bereit. Das GitHub-Repository enthält einige Codebeispiele und eine Zusammenfassung der Module. Eigene Funktionen lassen sich über den FunctionResultX-Transofmer einbinden.

Die Dokumentation zeigt zudem, wie Entwicklerinnen und Entwickler eigene Transformer erstellen können. Dabei müssen sie einige Grundregeln beachten: Jeder Transformer muss Immutable, Thread-safe und serialisierbar sein. Außerdem ist er quasi-deterministisch zu halten, was bedeutet, dass das Ergebnis nicht vom Kontext abhängen darf. Die Dokumentation führt als Beispiel auf, dass ein Transformer eine Zeitangabe als Input erhalten und verarbeiten darf, während das Verwenden der aktuellen Zeit für die Transformation verboten ist.

Dagli ist in Java verfasst und führt die Portabilität sowie die breite IDE-Unterstützung als Vorteil in der GitHub-Readme-Datei auf. Neben Java ab Version 9 arbeitet es mit anderen JVM-Sprachen (Java Virtual Machine) zusammen, lässt sich somit ebenso mit Kotlin, Scala oder Clojure verwenden.

Auch wenn Python der De-facto-Standard für ML-Anwendungen ist, existieren neben Dagli andere Ansätze für Java beziehungsweise die JVM im Bereich Machine Learning, darunter die Deep-Learning-Bibliothek DeepLearning4j und die vor Kurzem von Oracle vorgestellte Library Tribuo.

Das Dagli-Team führt zwar im Readme die Vorteile von Dagli auf, gibt aber gleichzeitig unumwunden zu, dass es kein für alle Szenarien perfektes ML-Framework gibt. So seien TensorFlow, PyTorch und DeepLearning4j je nach Einsatzbereich besser geeignet. Dagli kann wohl in bestimmten Fällen mit den Frameworks zusammenarbeiten: DeepLearning4j-Architekturen kann es direkt integrieren und TensorFlow-Modelle mit einem angepassten Wrapper verwenden. Hinweise auf einen allgemeinen Austausch beispielsweise über das Format Open Neural Network Exchange (ONNX), das vor Kurzem in Version 1.8 erschienen ist, fehlen jedoch.

Derzeit ist das Framework noch als Beta gekennzeichnet, und das aktuelle Release trägt die Versionsnummer 15.0.0-beta3. Während der Betaphase sind größere Änderungen zu erwarten, die vermutlich mit Inkompatibilitäten verbunden sind. Breaking Changes treten potenziell bei Versionssprüngen in der Betaphase auf. Sobald Dagli Produktionsreife erreicht hat, will das Team künftige Versionen rückwärtskompatibel halten, damit größere Projekte zukunftssicher mit dem Framework zusammenarbeiten.

(rme)