J'évalue des outils pour des applications de production à base de ML et l'une de nos options est Spark MLlib, mais je me pose des questions sur la façon de servir un modèle une fois qu'il est formé.
Par exemple, dans Azure ML, une fois formé, le modèle est exposé en tant que service Web pouvant être utilisé à partir de n'importe quelle application. C'est un cas similaire avec Amazon ML.
Comment servir/déployer des modèles ML dans Apache Spark?
D'une part, un modèle d'apprentissage automatique construit avec spark ne peut pas être utilisé de la même façon que vous le faites dans Azure ML ou Amazon ML.
Databricks prétend être en mesure de déployer des modèles à l'aide de son ordinateur portable, mais je ne l'ai pas encore essayé.
D'autre part, vous pouvez utiliser un modèle de trois manières:
MLWriter
, puis chargez-le dans une application ou un bloc-notes et exécutez-le avec vos données. Ce sont les trois manières possibles.
Bien sûr, vous pouvez penser à une architecture dans laquelle vous avez un service RESTful derrière lequel vous pouvez construire en utilisant spark-jobserver par exemple pour former et déployer mais qui nécessite un peu de développement. Ce n'est pas une solution prête à l'emploi.
Vous pouvez également utiliser des projets tels que Oryx 2 pour créer votre architecture lambda complète afin de former, déployer et servir un modèle.
Malheureusement, chacune des solutions mentionnées ci-dessus est assez large et ne rentre pas dans le champ d'application de SO.
Une option consiste à utiliser MLeap pour servir en ligne un pipeline PipelineModel avec aucune dépendance sur Spark/SparkContext. Ne pas avoir à utiliser SparkContext est important car cela réduira le temps de scoring d'un enregistrement unique d'environ 100 ms à microsecondes à un chiffre.
Pour l'utiliser, vous devez:
MLeap est bien intégré à toutes les étapes de pipeline disponibles dans Spark MLlib (à l’exception de LDA au moment de la rédaction de ce document). Cependant, les choses pourraient devenir un peu plus compliquées si vous utilisez des estimateurs/transformateurs personnalisés.
Jetez un coup d'œil à la MLeap FAQ pour plus d'informations sur les transformateurs/estimateurs personnalisés, les performances et l'intégration.
Vous comparez deux choses plutôt différentes. Apache Spark est un moteur de calcul, alors que vous le mentionnez, les solutions Amazon et Microsoft proposent des services. Ces services pourraient aussi bien avoir Spark avec MLlib dans les coulisses. Ils vous évitent d'avoir à construire vous-même un service Web, mais vous payez un supplément.
Nombre d'entreprises, telles que Domino Data Lab, Cloudera ou IBM, proposent des produits que vous pouvez déployer sur votre propre cluster Spark et créer facilement des services autour de vos modèles (avec différents degrés de flexibilité).
Naturellement, vous construisez vous-même un service avec divers outils open source. Lequel spécifiquement? Tout dépend de ce que vous recherchez. Comment l'utilisateur doit-il interagir avec le modèle? Devrait-il y avoir une sorte d’UI ou de plaisanter une API REST? Avez-vous besoin de modifier certains paramètres du modèle ou du modèle lui-même? Les emplois sont-ils plus d'un lot ou en temps réel? Vous pouvez naturellement construire une solution tout-en-un, mais cela demandera un effort énorme.
Ma recommandation personnelle serait de tirer parti, si vous le pouvez, de l’un des services disponibles d’Amazon, de Google, de Microsoft ou autre. Besoin de déploiement sur site? Vérifiez Domino Data Lab, leur produit est mature et permet de travailler facilement avec des modèles (de la création au déploiement). Cloudera est davantage axé sur l'informatique en cluster (y compris Spark), mais il faudra un certain temps avant que quelque chose ne soit arrivé à maturité.
[EDIT] Je vous conseillerais de regarder Apache PredictionIO , serveur d’apprentissage automatique en source libre - un projet incroyable avec beaucoup de potentiel.