Nano Hash - криптовалюты, майнинг, программирование

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

Я оцениваю инструменты для производственных приложений на основе машинного обучения, и один из наших вариантов - Spark MLlib, но у меня есть несколько вопросов о том, как обслуживать модель после ее обучения?

Например, в Azure ML после обучения модель отображается как веб-служба, которую можно использовать из любого приложения, как и в случае с Amazon ML.

Как вы обслуживаете / развертываете модели машинного обучения в Apache Spark?


Ответы:


1

С одной стороны, модель машинного обучения, построенная на Spark, не может быть использована так, как вы работаете в Azure ML или Amazon ML традиционным способом.

Databricks утверждает, что может развертывать модели с помощью ноутбука, но на самом деле я этого еще не пробовал.

С другой стороны, вы можете использовать модель тремя способами:

  • Обучение на лету внутри приложения с последующим применением прогнозирования. Это можно сделать в приложении Spark или в блокноте.
  • Обучите модель и сохраните ее, если она реализует MLWriter, затем загрузите приложение или записную книжку и запустите ее с вашими данными.
  • Обучите модель с помощью Spark и экспортируйте ее в формат PMML с помощью jpmml-spark. PMML позволяет различным инструментам статистики и интеллектуального анализа данных говорить на одном языке. Таким образом, решение для прогнозирования можно легко перемещать между инструментами и приложениями без необходимости специального кодирования. например, от Spark ML до R.

Это три возможных пути.

Конечно, вы можете подумать об архитектуре, в которой у вас есть служба RESTful, за которой вы можете построить, используя Spark-jobserver для каждого примера, для обучения и развертывания, но требует некоторой доработки. Это не готовое решение.

Вы также можете использовать такие проекты, как Oryx 2, для создания полной лямбда-архитектуры для обучения, развертывания и обслуживания модели.

К сожалению, описание каждого из упомянутых выше решений довольно обширно и не укладывается в рамки SO.

10.11.2016
  • Я бы дал шанс искорке. Вы можете кэшировать модель (даже полный искровый конвейер) легко и быстро отвечать на ML-релевантные запросы, такие как классификации или запросы. Это также дает вам возможность кэшировать агрегированные таблицы и быстро возвращать json, содержащий эти данные или их части, для визуализации или дальнейшей обработки в другом приложении. 30.11.2016

  • 2

    Один из вариантов - использовать MLeap для обслуживания Spark PipelineModel в Интернете без зависимостей от Spark / SparkContext. . Отсутствие необходимости использовать SparkContext важно, поскольку это снизит время оценки для отдельной записи с ~ 100 мс до однозначных микросекунд.

    Чтобы использовать его, вам необходимо:

    • Сериализуйте свою модель Spark с помощью утилит MLeap
    • Загрузите модель в MLeap (не требует SparkContext или каких-либо зависимостей Spark)
    • Создайте входную запись в JSON (а не в DataFrame)
    • Забейте свой рекорд с MLeap

    MLeap хорошо интегрирован со всеми этапами конвейера, доступными в Spark MLlib (за исключением LDA на момент написания этой статьи). Однако все может немного усложниться, если вы используете собственные оценщики / преобразователи.

    Взгляните на FAQ по MLeap для получения дополнительной информации о настраиваемых преобразователях / оценках, производительности и интеграция.

    11.04.2018

    3

    Вы сравниваете две довольно разные вещи. Apache Spark - это вычислительный движок, хотя упомянутые вами решения Amazon и Microsoft предлагают услуги. С таким же успехом у этих сервисов может быть Spark с MLlib. Они избавляют вас от проблем с созданием веб-сервиса самостоятельно, но вы платите дополнительно.

    Ряд компаний, например Domino Data Lab, Cloudera или IBM, предлагают продукты, которые вы можете развернуть в собственном кластере Spark и легко построить сервис на основе ваших моделей (с различной степенью гибкости).

    Естественно, вы сами создаете сервис с помощью различных инструментов с открытым исходным кодом. Что конкретно? Все зависит от того, что вам нужно. Как пользователь должен взаимодействовать с моделью? Должен быть какой-то UI или REST API? Вам нужно изменить какие-то параметры модели или самой модели? Задания больше носят пакетный характер или выполняются в режиме реального времени? Естественно, вы можете создать комплексное решение, но это потребует огромных усилий.

    Моя личная рекомендация - по возможности воспользоваться одной из доступных услуг Amazon, Google, Microsoft или других компаний. Требуется локальное развертывание? Проверьте Domino Data Lab, их продукт зрелый и позволяет легко работать с моделями (от создания до развертывания). Cloudera больше ориентирована на кластерные вычисления (включая Spark), но пройдет некоторое время, прежде чем у них появится что-то зрелое.

    [EDIT] Я бы порекомендовал взглянуть на Apache PredictionIO, сервер машинного обучения с открытым исходным кодом - потрясающий проект с большим потенциалом.

    10.11.2016

    4

    Я просто смог заставить это работать. Предостережения: Python 3.6 + с использованием Spark ML API (не MLLIB, но уверен, что он должен работать таким же образом)

    В основном следуйте этому примеру, приведенному на github AzureML от MSFT.

    Предупреждение: код будет подготовлен как есть, но в конце примера метода run() есть ошибка:

            #Get each scored result
            preds = [str(x['prediction']) for x in predictions]
            result = ",".join(preds)
            # you can return any data type as long as it is JSON-serializable
            return result.tolist()
    

    Должно быть:

            #Get each scored result
            preds = [str(x['prediction']) for x in predictions]
            #result = ",".join(preds)
            # you can return any data type as long as it is JSON-serializable
            output = dict()
            output['predictions'] = preds
            return json.dumps(output)
    

    Кроме того, полностью согласен с ответом на оценку MLeap, это может ускорить процесс, но подумал, что отвечу на этот вопрос конкретно

    18.04.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..