Como servir um modelo Spark MLlib?

Estou avaliando ferramentas para aplicações baseadas em ML de produção e uma de nossas opções é o Spark MLlib, mas eu tenho algumas perguntas sobre como servir um modelo uma vez que ele é treinado?

Por exemplo, no Azure ML, uma vez treinado, o modelo é exposto como um serviço da Web que pode ser consumido de qualquer aplicativo, e é um caso semelhante com o Amazon ML.

Como você serve / implanta modelos ML no Apache Spark?

   

    Por um lado, um modelo de aprendizado de máquina criado com faísca não pode ser oferecido da maneira tradicional no modo como você serve no ML do Azure ou no Amazon ML.

    As bibliotecas de dados afirmam ser capaz de implantar modelos usando seu notebook, mas eu ainda não tentei isso.

    Por outro lado, você pode usar um modelo de três maneiras:

    • Treinar em tempo real dentro de uma aplicação, aplicando a previsão. Isso pode ser feito em um aplicativo de ignição ou em um notebook.
    • Treine um modelo e salve-o se ele implementar um MLWriter e carregue em um aplicativo ou notebook e execute-o em seus dados.
    • Treine um modelo com o Spark e exporte-o para o formato PMML usando jpmml-spark . A PMML permite que diferentes ferramentas statistics e de mineração de dados falem o mesmo idioma. Dessa maneira, uma solução preditiva pode ser facilmente movida entre ferramentas e aplicativos sem a necessidade de codificação personalizada. por exemplo, de Spark ML para R.

    Essas são as três maneiras possíveis.

    É claro, você pode pensar em uma arquitetura na qual você tem serviço RESTful, atrás do qual você pode construir usando o spark-jobserver por exemplo para treinar e implantar, mas precisa de algum desenvolvimento. Não é uma solução pronta para uso.

    Você também pode usar projetos como o Oryx 2 para criar sua arquitetura lambda completa para treinar, implantar e servir um modelo.

    Infelizmente, descrever cada uma das soluções mencionadas acima é bastante amplo e não se encheckbox no escopo do SO.

    Uma opção é usar o MLeap para exibir um Spark PipelineModel on-line sem dependencies no Spark / SparkContext . Não ter que usar o SparkContext é importante, pois diminuirá o tempo de pontuação de um único registro de ~ 100 ms para microssegundos de um dígito .

    Para usá-lo, você precisa:

    • Serialize seu modelo Spark com utilitários MLeap
    • Carregue o modelo no MLeap (não requer um SparkContext ou nenhuma dependência do Spark)
    • Crie seu registro de input em JSON (não um DataFrame)
    • Marque seu registro com o MLeap

    O MLeap está bem integrado com todos os estágios do pipeline disponíveis no Spark MLlib (com exceção do LDA no momento da redação deste texto). No entanto, as coisas podem ficar um pouco mais complicadas se você estiver usando Estimadores / Transformadores personalizados.

    Dê uma olhada no FAQ do MLeap para mais informações sobre transformadores / estimadores personalizados, performances e integração.

    Você está comparando duas coisas bem diferentes. O Apache Spark é um mecanismo de computação, embora seja mencionado por você. As soluções da Amazon e da Microsoft oferecem serviços. Esses serviços podem também ter o Spark com o MLlib atrás da cena. Eles poupam você do problema de criar um serviço web, mas você paga mais.

    Número de empresas, como Domino Data Lab, Cloudera ou IBM, oferecem produtos que você pode implantar em seu próprio cluster do Spark e criar serviços facilmente em torno de seus modelos (com vários graus de flexibilidade).

    Naturalmente, você mesmo constrói um serviço com várias ferramentas de código aberto. Qual especificamente? Tudo depende do que você está depois. Como o usuário deve interagir com o modelo? Deve haver algum tipo de interface do usuário ou uma API REST? Você precisa alterar alguns parâmetros no modelo ou no próprio modelo? Os trabalhos são mais de natureza em lote ou em tempo real? Você pode naturalmente construir uma solução completa, mas isso será um grande esforço.

    Minha recomendação pessoal seria aproveitar, se puder, de um dos serviços disponíveis da Amazon, Google, Microsoft ou qualquer outra coisa. Precisa de implantação local? Verifique o Domino Data Lab, seu produto é maduro e permite trabalhar facilmente com modelos (do edifício até a implantação). O Cloudera está mais focado na computação em cluster (incluindo o Spark), mas vai demorar um pouco até que eles tenham algo maduro.

    [EDIT] Eu recomendo dar uma olhada no Apache PredictionIO , servidor de aprendizado de máquina de código aberto – projeto incrível com muito potencial.