Рекомендации на основе запросов в реальном времени с помощью Spark — Spark JobServer?

Мы пытаемся найти способ загрузить обученную модель Spark (2.x) ML, чтобы по запросу (через интерфейс REST) ​​мы могли запросить ее и получить прогнозы, например. http://predictor.com:8080/give/me/predictions?a=1,b=2,c=3

Существуют готовые библиотеки для загрузки модели в Spark (учитывая, что она была сохранена где-то после обучения с использованием MLWritable), а затем использовать ее для прогнозов, но кажется излишним обернуть ее в задание и запускать это для каждого запроса/вызова из-за к инициализации SparkContext.

Однако использование Spark имеет то преимущество, что мы можем сохранить нашу конвейерную модель и выполнять те же преобразования функций без необходимости реализовывать ее за пределами SparkContext.

Немного покопавшись, мы обнаружили, что spark-job-server потенциально может помочь нам в этом. проблема, позволяя нам инициализировать «горячий» искровой контекст для сервера заданий, и, следовательно, мы можем затем обслуживать запросы, вызывая задание прогнозирования (и получая результаты) в существующем контексте с использованием искрового задания-сервера. РЕСТ API.

Является ли это лучшим подходом к API-ify прогноза? Из-за пространства признаков мы не можем заранее предсказать все комбинации.

В качестве альтернативы мы думали об использовании Spark Streaming и сохранении прогнозов в очереди сообщений. Это позволяет нам не использовать spark-job-server, но не упрощает общий процесс. Кто-нибудь пробовал подобный подход?


person fritsjanb    schedule 14.02.2017    source источник
comment
Недавно мы пытались использовать jobserver для решения аналогичной проблемы выполнения заданий Spark по требованию. Хотя это хорошо, это далеко не готовый к отгрузке продукт. Вам нужно сделать много настроек вручную, поддержка Spark 2.x находится в предварительной версии, и ее развертывание требует работы. Если вы готовы проделать значительный объем работы, вперед. В итоге мы остановились на решении, основанном на недокументированном REST API Sparks.   -  person Yuval Itzchakov    schedule 14.02.2017
comment
Будет ли он даже отвечать в приличное время (менее 0,1 секунды)? По моему опыту, конвейеры ML очень медленные из-за различных этапов их вычислений, таких как преобразование схем, проверки типов и, что наиболее важно, какая-то трансляция модели/матрицы, по крайней мере, на NaiveBayes, W2V и некоторых других, которые я использовал. (стоимость амортизируется, когда у вас есть множество прогнозов, но их настройка непомерно высока в одном случае прогноза). В любом случае, я не вижу, чтобы трубы искрового ML работали меньше секунды. Добились ли вы иного?   -  person GPI    schedule 14.02.2017


Ответы (2)


Другим вариантом может быть livy от cloudera (http://livy.io/ | https://github.com/cloudera/livy#rest-api), который позволяет кэшировать сеансы, интерактивные запросы, пакетные задания. и более. Я использовал его и нашел его очень многообещающим.

person Garren S    schedule 04.03.2017

Сценарии

  • Прогнозирование с использованием Spark Streaming — поддерживает оценку/прогнозирование в реальном времени, но требует потока на основе потока (модель Push).

    • Pipeline: score/predict on stream -> store in a realtime store -> serve data via REST or plug analytical toolkit for dashboards
    • Плюсы: оценка в реальном времени, возможность отображения в реальном времени при использовании с хранилищами, поддерживающими потоковую запись (например, Druid).
    • Минусы: оценивает все события, раздувание хранилища, требуется дальнейшая стратегия архивирования данных, чтобы сохранить легкость панели мониторинга.
  • Прогнозы на основе REST (PredictionIO, SJS) — поддерживает оценку на уровне взаимодействия (модель «запрос-ответ»).

    • Pipeline: deploy trained model in a SparkContext -> Predict and return scores based on REST request
    • Плюсы: поддерживает интерактивную оценку, выборочную оценку событий, делает взаимодействие WebApp интеллектуальным.
    • Минусы: меньшая производительность, чем оценка на основе потоков, больший объем памяти, дополнительная платформа, необходимая для Apache Spark.

Ответ

Это зависит от варианта использования. Если у вас поток данных на основе потока и вам требуется оценивать все события, используйте конвейер на основе Spark Streaming. Примером из реальной жизни может быть оценка входящих финансовых транзакций для обнаружения мошенничества. Если ваше требование основано на взаимодействии, используйте оценку на основе REST. Например, порекомендуйте аналогичные товары/продукты Пользователю на основе взаимодействия Пользователя с веб-сайтом/приложением.

person CᴴᴀZ    schedule 26.03.2018