Spark упрощает развертывание машинного обучения

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

Решения для пакетного прогнозирования

В настоящее время доступно множество решений / инструментов для пакетного прогнозирования, проще всего написать код на Python и запланировать его с помощью Cron, но с этим подходом есть 2 проблемы:

1. С каждым прогнозом возникают накладные расходы на травление / распаковку модели.

2. Мы не используем оптимизацию scikit-learn для прогнозирования решения.

Еще одно решение - использовать такие инструменты, как Airflow и Perfect для пакетного прогнозирования. Также доступны облачные решения для пакетного прогнозирования, например MLFlow и Amazon Sagemaker.

Но если вы хотите воспользоваться преимуществами оптимизации scikit-learn и не хотите полагаться на внешние инструменты, то Spark станет многообещающим решением для пакетного прогнозирования.

Пакетное прогнозирование с использованием Spark

Когда я говорю о развертывании модели машинного обучения с помощью Spark, многие думают, что это можно легко сделать с помощью Spark MLlib и Yes; это действительно решение. Но я больше склоняюсь к использованию scikit-learn и tensorflow для машинного обучения, поскольку они более гибкие и предоставляют более надежные методы. Поэтому я предпочитаю создавать свои модели машинного обучения с использованием конвейеров scikit-learn и tensorflow, развертывать модель через Spark, а затем использовать пакетное прогнозирование для оценки / прогнозирования.

Spark не только предоставляет возможности планирования и мониторинга для пакетных прогнозов, но и масштабируется для более сложных моделей и наборов данных. Более того, если вы имеете опыт работы с данными и имеете солидный опыт работы со Spark и Hadoop, вам не нужны сторонние решения для развертывания моделей машинного обучения. В этом посте я объясню, как можно развернуть модели машинного обучения через Spark и выполнять прогнозы с использованием параллельной обработки.

Шаги прогнозирования пакета Spark

Пакетное прогнозирование с использованием Spark - это решение из 7 шагов, и эти шаги одинаковы как для задач классификации, так и для задач регрессии.

1. Создайте модель ML, обработайте ее и сохраните файл pickle в HDFS.

2. Напишите искровое задание и извлеките объект Python.

3. Распространите этот объект python по всем узлам Spark.

4. Создайте UDF pyspark и вызовите метод прогнозирования для транслируемого объекта модели.

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

6. Создайте искровой фрейм данных для прогнозирования с одним уникальным столбцом и функциями из шага 5.

7. Создайте столбец прогноза в Dataframe из шага 6 и вызовите UDF со столбцами функций.

Готово !!

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

Глубокое погружение

Теперь давайте посмотрим на реальную реализацию кода (на Python) для вышеуказанных 7 шагов.

На шаге 1 мы создаем модель машинного обучения и сохраняем ее в файле pickle.

Здесь rf в строке 3 - это модель случайного леса, обученная обнаружению мошенничества с кредитными картами. Если вы хотите увидеть, как я создал эту случайную модель прогнозирования лесов, обратитесь к ссылке на github.

На шагах 2 и 3 мы создадим искровое задание, извлечем объект python и передадим его узлам кластера. Широковещательный объект Python сделает модель ML доступной на нескольких узлах для параллельной обработки пакета.

На этапе S tep 4 мы создадим UDF pyspark для прогнозирования обнаружения мошенничества.

На шагах 5 и 6 мы создадим список функций и создадим фрейм данных с уникальными идентификаторами.

Наконец, на шаге 7 мы вызовем UDF pyspark для фрейма данных из шага 6 и сгенерируем прогнозы со столбцами функций.

Используя эти шаги, любую модель пакетного прогнозирования, созданную с помощью scikit-learn, можно развернуть в кластере Spark.

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

В этом подходе шаги 1–4 и шаг 7 одинаковы для всех моделей, и если вы можете выбрать столбцы признаков с шага 5 с шагом 1 и отсоединить позже, то этот процесс будет полностью автоматизирован и может быть использован для производства любого прогнозирования партии. модели, построенные в scikit-learn. Я использовал его много раз и полностью автоматизировал прогнозирование пакетов машинного обучения.

Заключение

Создание моделей машинного обучения с помощью пакетной обработки Spark - это очень простое, легкое и быстрое решение для многих проблем. В зависимости от того, с какой периодичностью меняются входные данные, пакетные прогнозы можно планировать один или несколько раз в день. Пакетные прогнозы с использованием Spark не сохраняют состояние и также могут быть объединены с прогнозами в реальном времени для параллельного выполнения. Spark batch позволяет планировать задания в пряжи с функциями регистрации и мониторинга. Кроме того, поскольку Spark полностью масштабируем, и вы можете управлять кластером самостоятельно, процесс пакетного прогнозирования выполняется очень быстро.

Чтобы получить доступ к полному коду для пакетного прогнозирования с помощью Spark, перейдите по ссылке на github.

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

Github: https://github.com/charumakhijani
LinkedIn:
https://www.linkedin.com/in/charu-makhijani- 23b18318 /