43 votes

Comment servir un modèle Spark MLlib?

J'évalue des outils pour la production d'applications basées sur ML et l'une de nos options est Spark MLlib, mais j'ai des questions sur la façon de servir un modèle une fois formé?

Par exemple, dans Azure ML, une fois formé, le modèle est exposé en tant que service Web qui peut être consommé à partir de n'importe quelle application, et c'est un cas similaire avec Amazon ML.

Comment servir / déployer des modèles ML dans Apache Spark?

27voto

eliasah Points 891

D'une part, un apprentissage de la machine modèle construit avec étincelle peut pas être servi de la façon dont vous servir dans Azure ML ou Amazon ML de la manière traditionnelle.

Databricks prétend être capable de déployer des modèles à l'aide de son portable, mais je n'ai pas essayé encore.

Sur l'autre main, vous pouvez utiliser un modèle en trois façons :

  • La formation à la volée à l'intérieur d'une application puis de l'application de la prédiction. Cela peut être fait en une étincelle application ou un ordinateur portable.
  • Former un modèle et l'enregistrer si elle met en oeuvre un MLWriter puis les charger dans une application ou un ordinateur portable et de les exécuter à l'encontre de vos données.
  • Former un modèle avec Spark et de les exporter au format PMML à l'aide de jpmml-étincelle. PMML permet de statistique et de data mining outils de parler la même langue. De cette façon, un modèle prédictif de la solution peut être facilement déplacé entre les outils et les applications sans avoir besoin de codage personnalisé. e.g à partir de l'Étincelle ML à R.

Ce sont les trois façons possibles.

Bien sûr, vous pouvez penser à une architecture dans laquelle vous avez service RESTful derrière lequel on peut construire à l'aide de bougies de jobserver par exemple de former et de déployer mais a besoin d'un développement. Ce n'est pas un out-of-the-box solution.

Vous pourriez aussi utiliser des projets comme l'Oryx 2 pour créer votre plein lambda architecture pour former, de les déployer et de servir de modèle.

Malheureusement, la description de chaque de la solution ci-dessus est assez large et ne rentre pas dans le champ d'application de la SORTE.

12voto

Gevorg Points 4218

Une option est d'utiliser MLeap pour servir une Étincelle PipelineModel en ligne avec pas de dépendances sur Spark/SparkContext. Ne pas avoir à utiliser le SparkContext est important, car il aura une baisse de la notation de temps pour un seul enregistrement à partir de ~100ms à un seul chiffre microsecondes.

Pour l'utiliser, vous devez:

  • Sérialiser vos Spark Model avec MLeap utilitaires
  • Charger le modèle dans MLeap (ne nécessite pas de SparkContext ou toute Étincelle dépendances)
  • Créez votre enregistrement de l'entrée en JSON (pas un DataFrame)
  • Le Score de votre dossier avec MLeap

MLeap est bien intégrée à toutes les Étapes du Pipeline disponible dans Spark MLlib (à l'exception de la LDA au moment de la rédaction de ce document). Toutefois, les choses pourraient être un peu plus compliqué si vous êtes en utilisant des Estimateurs/Transformateurs.

Jetez un oeil à la MLeap FAQ pour plus d'info sur les transformateurs/estimateurs, de représentations et de l'intégration.

3voto

Lukasz Tracewski Points 2248

Vous comparez deux choses différentes. Apache Spark est un moteur de calcul, tandis que mentionné par vous Amazon et Microsoft solutions offrent des services. Ces services pourraient aussi bien avoir l'Étincelle avec MLlib derrière la scène. Ils vous sauver de la peine construction d'un service web vous-même, mais vous payez des frais supplémentaires.

Nombre d'entreprises, à l'instar de Données Domino Labo, Cloudera ou IBM offrir des produits que vous pouvez déployer sur votre propre Étincelle de cluster et facilement construire des services autour de vos modèles (avec différents degrés de flexibilité).

Naturellement, vous construire un service pour vous-même avec différents outils open source. Qui en particulier? Tout dépend de ce que vous êtes après. Comment l'utilisateur doit interagir avec le modèle? Devrait-il y avoir une sorte d'INTERFACE utilisateur ou la plaisanterie une API REST? Avez-vous besoin de modifier certains paramètres sur le modèle ou le modèle lui-même? Les emplois de plus d'un lot ou de la nature en temps réel? Vous pouvez naturellement vous construire tout-en-un solution, mais ça va être un énorme effort.

Ma recommandation personnelle serait de profiter, si vous le pouvez, de l'un des services offerts par Amazon, Google, Microsoft ou quoi que ce soit. Besoin d'un déploiement sur site? Vérifier les Données Domino Labo, leur produit est mature et permet facilement de travailler avec des modèles (à partir de la construction jusqu'à déploiement). Cloudera est plus axé sur le cluster de calcul (y compris l'Étincelle), mais il faudra un certain temps avant qu'ils ont quelque chose à maturité.

[EDIT] je vous recommande de regarder Apache PredictionIO, open source d'apprentissage de la machine serveur - projet fantastique avec beaucoup de potentiel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X