3

Nous testons actuellement un moteur de prédiction basée sur la mise en œuvre de Spark de LDA en Python: https://spark.apache.org/docs/2.2.0/ml-clustering.html#latent-dirichlet-allocation-lda https://spark.apache.org/docs/2.2.0/api/python/pyspark.ml.html#pyspark.ml.clustering.LDA (nous utilisons le paquet pyspark.ml, non pyspark.mllib)Serve prédictions en temps réel avec le modèle Spark formé ML

Nous avons réussi à former un modèle sur un cluster Spark (en utilisant Google Cloud Dataproc). Nous essayons maintenant d'utiliser le modèle pour servir des prédictions en temps réel en tant qu'API (par exemple une application de flacon).

Quelle serait la meilleure approche pour y parvenir? Notre principal point douloureux est qu'il nous semble nécessaire de ramener tout l'environnement Spark afin de charger le modèle formé et d'exécuter la transformation. Jusqu'à présent, nous avons essayé de courir Spark en mode local pour chaque demande, mais a reçu cette approche nous a donné:

  1. mauvaises performances (temps de spin-le SparkSession, charger les modèles, exécutez la transformation ...)
  2. évolutivité médiocre (incapacité à traiter les demandes simultanées)

L'approche globale semble assez lourd, y aurait-il une alternative plus simple, ou même qui ne serait pas besoin d'impliquer Spark du tout?

Le code ci-dessous est un code simplifié des étapes d'apprentissage et de prédiction.

Code de formation

def train(input_dataset): 
    conf = pyspark.SparkConf().setAppName("lda-train") 
    spark = SparkSession.builder.config(conf=conf).getOrCreate() 

    # Generate count vectors 
    count_vectorizer = CountVectorizer(...) 
    vectorizer_model = count_vectorizer.fit(input_dataset) 
    vectorized_dataset = vectorizer_model.transform(input_dataset) 

    # Instantiate LDA model 
    lda = LDA(k=100, maxIter=100, optimizer="em", ...) 

    # Train LDA model 
    lda_model = lda.fit(vectorized_dataset) 

    # Save models to external storage 
    vectorizer_model.write().overwrite().save("gs://...") 
    lda_model.write().overwrite().save("gs://...") 

Code de prédiction

def predict(input_query): 
    conf = pyspark.SparkConf().setAppName("lda-predict").setMaster("local") 
    spark = SparkSession.builder.config(conf=conf).getOrCreate() 

    # Load models from external storage 
    vectorizer_model = CountVectorizerModel.load("gs://...") 
    lda_model = DistributedLDAModel.load("gs://...") 

    # Run prediction on the input data using the loaded models 
    vectorized_query = vectorizer_model.transform(input_query) 
    transformed_query = lda_model.transform(vectorized_query) 

    ... 

    spark.stop() 

    return transformed_query 

Répondre

2

Si vous avez déjà un modèle d'apprentissage de la machine formé à étincelle, vous pouvez utiliser Hydroshpere Mist pour servir les modèles (tests ou prédiction) en utilisant rest apisans créant un Spark Context. Cela vous évitera de recréer l'environnement de la bougie et se fonder uniquement sur web services pour la prédiction

Se référer: