vectorassembler spark quantilediscretizer apache-spark machine-learning apache-spark-mllib

apache-spark - vectorassembler - quantilediscretizer pyspark



¿Cómo servir un modelo Spark MLlib? (4)

Estás comparando dos cosas bastante diferentes. Apache Spark es un motor de cómputo, mientras que usted lo menciona, Amazon y Microsoft ofrecen servicios. Estos servicios también podrían tener a Spark con MLlib detrás de escena. Le ahorran la molestia de crear un servicio web usted mismo, pero usted paga más.

Numerosas empresas, como Domino Data Lab, Cloudera o IBM ofrecen productos que puede implementar en su propio clúster Spark y crear fácilmente servicios en torno a sus modelos (con diversos grados de flexibilidad).

Naturalmente, usted mismo crea un servicio con varias herramientas de código abierto. ¿Cuál específicamente? Todo depende de lo que buscas. ¿Cómo debe interactuar el usuario con el modelo? ¿Debería haber algún tipo de interfaz de usuario o broma una API REST? ¿Necesita cambiar algunos parámetros en el modelo o en el modelo mismo? ¿Son los trabajos más por lotes o en tiempo real? Naturalmente, puede crear una solución todo en uno, pero será un gran esfuerzo.

Mi recomendación personal sería aprovechar, si puede, uno de los servicios disponibles de Amazon, Google, Microsoft o lo que sea. ¿Necesita implementación local? Consulte Domino Data Lab, su producto es maduro y permite trabajar fácilmente con modelos (desde la construcción hasta la implementación). Cloudera está más enfocado en la computación en clúster (incluido Spark), pero pasará un tiempo antes de que tengan algo maduro.

[EDITAR] Recomiendo echar un vistazo a Apache PredictionIO , servidor de aprendizaje automático de código abierto: un proyecto increíble con mucho potencial.

Estoy evaluando herramientas para aplicaciones basadas en ML de producción y una de nuestras opciones es Spark MLlib, pero tengo algunas preguntas sobre cómo servir un modelo una vez que está capacitado.

Por ejemplo, en Azure ML, una vez capacitado, el modelo se expone como un servicio web que se puede consumir desde cualquier aplicación, y es un caso similar con Amazon ML.

¿Cómo sirve / despliega modelos ML en Apache Spark?


He podido hacer que esto funcione. Advertencias: Python 3.6+ usando Spark ML API (no MLLIB, pero seguro que debería funcionar de la misma manera)

Básicamente, siga este ejemplo proporcionado en el github AzureML de MSFT .

Palabra de advertencia: el código tal cual se proporcionará pero hay un error en el método run() ejemplo al final:

#Get each scored result preds = [str(x[''prediction'']) for x in predictions] result = ",".join(preds) # you can return any data type as long as it is JSON-serializable return result.tolist()

Debiera ser:

#Get each scored result preds = [str(x[''prediction'']) for x in predictions] #result = ",".join(preds) # you can return any data type as long as it is JSON-serializable output = dict() output[''predictions''] = preds return json.dumps(output)

Además, estoy completamente de acuerdo con la respuesta de la evaluación MLeap, esto puede hacer que el proceso se ejecute mucho más rápido, pero pensé que respondería la pregunta específicamente


Por un lado, un modelo de aprendizaje automático creado con chispa no se puede servir de la manera tradicional en Azure ML o Amazon ML.

Databricks afirma que puede implementar modelos utilizando su computadora portátil, pero aún no lo he intentado.

Por otro lado, puede usar un modelo de tres maneras:

  • Entrenamiento sobre la marcha dentro de una aplicación y luego aplicando predicción. Esto se puede hacer en una aplicación de chispa o en un cuaderno.
  • Entrene a un modelo y guárdelo si implementa un MLWriter luego cárguelo en una aplicación o cuaderno y ejecútelo contra sus datos.
  • Entrene un modelo con Spark y jpmml-spark a formato PMML usando jpmml-spark . PMML permite que diferentes herramientas estadísticas y de minería de datos hablen el mismo idioma. De esta manera, una solución predictiva se puede mover fácilmente entre herramientas y aplicaciones sin la necesidad de una codificación personalizada. por ejemplo, de Spark ML a R.

Esas son las tres formas posibles.

Por supuesto, puede pensar en una arquitectura en la que tenga un servicio RESTful detrás del cual pueda construir utilizando spark-jobserver, por ejemplo, para capacitar e implementar, pero necesita algo de desarrollo. No es una solución lista para usar.

También puede usar proyectos como Oryx 2 para crear su arquitectura lambda completa para entrenar, implementar y servir un modelo.

Desafortunadamente, describir cada una de las soluciones mencionadas anteriormente es bastante amplio y no encaja en el alcance de SO.


Una opción es usar MLeap para servir un Spark PipelineModel en línea sin dependencias de Spark / SparkContext . No tener que usar SparkContext es importante ya que reducirá el tiempo de puntuación para un solo registro de ~ 100 ms a microsegundos de un solo dígito .

Para usarlo, debes:

  • Serialice su modelo Spark con las utilidades MLeap
  • Cargue el modelo en MLeap (no requiere SparkContext ni ninguna dependencia de Spark)
  • Cree su registro de entrada en JSON (no un DataFrame)
  • Marque su récord con MLeap

MLeap está bien integrado con todas las etapas de canalización disponibles en Spark MLlib (con la excepción de LDA en el momento de escribir este artículo). Sin embargo, las cosas pueden ser un poco más complicadas si usa Estimadores / Transformadores personalizados.

Eche un vistazo a las Preguntas frecuentes de MLeap para obtener más información sobre transformadores / estimadores personalizados, rendimientos e integración.