3

wir derzeit eine Vorhersage-Engine testen basierend auf Spark-Implementierung von LDA in 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 (wir das pyspark.ml Paket verwenden, nicht pyspark.mllib)Serve Echtzeit-Vorhersagen mit ausgebildeten Spark-ML-Modell

Wir konnten erfolgreich ein Modell auf einem Spark-Cluster trainieren (mit Google Cloud Dataproc). Jetzt versuchen wir, das Modell zu verwenden, um Echtzeitvorhersagen als eine API (z. B. eine Kolbenanwendung) zu liefern.

Was wäre der beste Ansatz, um dies zu erreichen?

Unser Hauptproblem ist, dass es scheint, dass wir die gesamte Spark-Umgebung zurückbringen müssen, um das trainierte Modell zu laden und die Transformation auszuführen. Bisher haben wir versucht, laufen Spark in lokalen Modus für jede empfangene Anforderung aber dieser Ansatz hat uns:

  1. Schlechte Leistungen (Zeit, um die SparkSession zu Spin-up, um die Modelle laden, führen die Transformation ...)
  2. Schlechte Skalierbarkeit (Unfähigkeit gleichzeitige Anforderungen zu verarbeiten)

Der ganze Ansatz scheint ziemlich schwer, gäbe es eine einfachere Alternative zu sein, oder sogar eine, die Funken nicht brauchen würde, überhaupt zu bedeuten?

Unten sind vereinfachte Code der Training und Vorhersage Schritte.

Trainings-Code

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://...") 

Prediction Code

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 

Antwort

2

Wenn Sie bereits ein ausgebildetes Machine Learning-Modell in Funken haben, können Sie Hydroshpere Mist verwenden, um die Modelle (Test- oder Vorhersage) rest api Verwendung dienen ohne Erstellen einer Spark Context. Dadurch werden Sie von Neuerstellung der Funken Umwelt schonen und verlassen sich nur auf web services zur Vorhersage

Siehe: