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 /