2017-02-14 15 views
3

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

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

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

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

Это лучший подход к API-ify предсказанию? Из-за пространства функций мы не можем предварительно предсказать все комбинации.

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

+0

Недавно мы попытались использовать сервер jobserver для решения аналогичной проблемы выполнения заданий Spark по запросу. Хотя это хорошо, оно далеко не готово к отправке продукта. Вы должны сделать много настроек вручную, поддержка Spark 2.x находится в режиме предварительного просмотра, и для ее развертывания требуется работа. Если вы готовы внести значительный объем работы, продолжайте. Мы закончили работу с решением, основанным на незарегистрированном REST API Sparks. –

+0

Будет ли он отвечать в приличное время (менее 0,1 сек)? По моему опыту, ML-конвейеры очень медленны из-за различных шагов в их вычислении, таких как преобразование схем, проверки типов и, что наиболее важно, какая-то модельная/матричная трансляция, по крайней мере, на NaiveBayes, W2V и некоторые другие, которые я использовал. (стоимость амортизируется, когда у вас есть тонны прогнозов, но их установка запретительна в одном случае с предсказанием). В любом случае, я не вижу искровых труб ML, работающих где-нибудь ближе к второй секунде. Вы достигли иначе? – GPI

ответ

1

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