https://github.com/Hydrospheredata/hydro-serving

от вопрос уже есть ответ здесь:

Как обслуживать модель Spark MLlib? 3 ответа

В настоящее время мы тестируем механизм прогнозирования, основанный на реализации LDA Spark в 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 (мы используем пакет pyspark.ml, а не pyspark.mllib)

Мы смогли успешно обучить модели в кластере Spark (используя Google Cloud Dataproc). Теперь мы пытаемся использовать модель для предоставления прогнозов в режиме реального времени в качестве API (например, приложения колбы).

Каков наилучший подход для достижения этого?

Наша главная проблема в том, что нам кажется, что нам нужно вернуть всю среду Spark, чтобы загрузить обученную модель и запустить преобразование. До сих пор мы пробовали запускать Spark в локальном режиме для каждого полученного запроса, но этот подход дал нам:

Плохая производительность (время раскручивать SparkSession, загружать модели, запускать трансформацию ...)Плохая масштабируемость (невозможность обрабатывать параллельные запросы)

Весь подход кажется довольно тяжелым, будет ли более простая альтернатива или даже такая, которая вообще не должна будет подразумевать Spark?

Ниже приведены упрощенные коды шагов обучения и прогнозирования.

Учебный код
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://...")
Код прогноза
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

Ответы на вопрос(1)

Ваш ответ на вопрос