Traditionnellement, le langage de programmation dans le domaine de l’apprentissage automatique est Python ou C++, mais Java n’est pas cité immédiatement. Et pourtant, les développeurs de Linkedin veulent y remédier en dévoilant un framework open source de machine learning, Dagli. Celui-ci veut « faciliter l’écriture de pipeline de modèles résistants aux bugs, lisibles, efficaces, maintenables et qui se déploient aisément » en Java (et les langages JVM).

Ces dernières années, on a vu sortir nombre d'outils très bons pour le machine learning, rappelle Jeff Pasternack, chercheur chez Linkedin, comme les frameworks PyTorch, TensorFlow, DeepLearning4J et CNTK pour les réseaux neuronaux, Spark et Kubeflow pour les pipelines à très grande échelle, et scikit-learn, ML.NET, et le récent Tribuo pour une variété de modèles communs. Cependant, ces outils font partie d’un pipeline intégré dont le déploiement « reste plus lourd qu’il ne devrait l’être », souligne le responsable dans un blog.

Une approche fédérant les pipelines

Dagli veut donc s’attaquer à ce problème en se concentrant sur un seul pipeline d’apprentissage machine sous forme de graphe orienté acyclique (DAG ou directed acyclic graph) pour l’entraînement du modèle et des inférences. Ainsi, il n’y a pas besoin d’un pipeline dédié pour chacun. Cette approche réduit la dette technique, car elle baisse le nombre de doublons et améliore l’assemblage du code. Cela rend les systèmes plus faciles à maintenir à long terme. Un autre avantage de cette orientation est que les pipelines peuvent être sérialisés en un seul objet, ce qui les rend plus faciles à déployer que les configurations en plusieurs parties.

Le framework open source garantit la portabilité sur différents environnements, « dans Hadoop, dans un CLI, dans votre IDE ou n’importe quel contexte JVM ». Pour faciliter l'adoption de l'outil, Dagli est équipé de composants de pipeline tels que des modèles statistiques, des réseaux neuronaux et différents transformateurs, de sorte que les utilisateurs ne partent pas de zéro. Des exemples sont disponibles sur le dépôt du projet sur GitHub.