MLOps для Spark-приложений в AWS с Amazon SageMaker: кейс Udemy

MLOps Spark Python PySpark AWS Sahemaker примиеры курсы обучение, машинное обучение примеры Spark курсы, MLOps-инженер примеры курсы обучение, курсы Spark ML, Школа Больших Данных Учебный центр Коммерсант

Как MLOps-инженеры платформы онлайн-курсов Udemy ускорили цикл разработки и внедрения проектов машинного обучения, используя возможности Amazon SageMaker для создания и отладки Spark-приложений в удаленном облачном кластере.

MLOps на AWS

Чтобы воспользоваться преимуществами бесшовной интеграции процессов разработки и развертывания машинного обучения согласно концепции MLOps, совсем не обязательно выстраивать собственную платформу из открытых или проприетарных инструментов. Можно воспользоваться готовыми комплексными решениями, например, Amazon SageMaker, который представляет собой облачный полностью управляемый сервис для полного производственного цикла создания и сопровождения ML-моделей.

Однако, на практике даже крупные компании, которые активно применяют проекты Machine Learning в своем бизнесе, приходят к таким MLOps-платформам не сразу. Например, платформа онлайн-обучения Udemy, где более 57 миллионов студентов изучают 213 000 курсов, изначально использовала кластер AWS EMR для работы с большими данными в экосистеме Apache Hadoop. Имея общий кластер для разработки и эксплуатации в производственной среде, инженеры Udemy столкнулись со следующими проблемами:

  • конфликт за использование ресурсов, несмотря на автоматическое масштабирование кластера EMR, иногда задание одного пользователя длительное время потребляло все ресурсы кластера и блокировало работу всех остальных;
  • негибкое управление зависимостями — все проекты должны использовать одни и те же версии центральной библиотеки и зависимости, что усложняет развитие ML-сервисов и их обновление;
  • неавтоматизированный процесс разработки, который включает циклические шаги от создания кода в блокноте или IDE и его фиксации в Github до запуска пакетного задания в кластере и проверку журналов отладки в пользовательском интерфейсе EMR.

Чтобы устранить эти проблемы, инженеры Udemy попытались уменьшить конфликты ресурсов, создав несколько кластеров для определенных групп задач. Например, некоторые особенно нагруженные рабочие процессы получили свой собственный выделенный кластер, потоковым приложениям выделили другой. Чтобы улучшить процесс разработки, была протестирована библиотека SparkMagic — расширение Jupyter, позволяющее удаленно запускать процессы Spark через REST API Livy. Sparkmagic включает набор инструментов для интерактивного запуска кода Spark на нескольких языках, а также несколько ядер, которые можно использовать для превращения Jupyter в интегрированную среду Spark. Подробнее об этой библиотеке мы писали здесь. Однако, применение SparkMagic оказался ненадежным из-за отсутствия контроля над версией самого Apache Spark и простого способа установить пакеты PyPI для конкретного проекта в рабочей среде. Кроме того, к недостаткам этого решения также относятся возможные сбои в настройке из-за потребления слишком большого количества ресурсов или неправильной конфигурации и более сложное развертывание. Поэтому для реализации MLOps-концепции своих ML-проектов на Apache Spark инженеры Udemy выбрали инструменты Amazon SageMaker. Как это работает и чем особенно полезно, мы рассмотрим далее.

Настройка Spark-приложения для ML в AWS SageMaker

AWS SageMaker включает PySparkProcessor, который позволяет любому заданию Spark выполняться на эфемерном кластере Spark. Это дает возможность быстро обрабатывать небольшие данные на небольшом экземпляре частного блокнота, а затем запускать удаленное задание для обработки больших данных, используя следующие компоненты:

  • общий интерфейс для экземпляра Spark в среде ноутбука и удаленной работе в эфемерном кластере. Независимо от среды, этот экземпляр должен быть настроен на основе конфигурации конкретного проекта и иметь доступ к одним и тем же данным для быстрой локальной обработки выборочных данных, а также для удаленного запуска полного объема.
  • механизм упаковки и запуска Spark-проектов со всеми их специфическими зависимостями от эфемерных, зависящих от задания кластеров Spark с их произвольными спецификациями.

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

Таким образом, быстрые итерации на небольших экземплярах блокнотов могут значительно сэкономить время при устранении большинства синтаксических и логических ошибок. А технологии контейнеризации, такие как Docker Compose, могут еще больше увеличить эффективность этого процесса за счет создания мини-кластеров с несколькими узлами на одном компьютере, чтобы имитировать полноценную работу в удаленном производственном кластере.

Поскольку SageMaker предоставляет управляемые экземпляры блокнотов в качестве локальной среды разработки, каждый MLOps-инженер может использовать их привычным образом, эксплуатируя предварительно определенные ядра ЦП с различными средами выполнения. Это позволяет стандартизировать среду разработки и снизить затраты на настройку и обслуживание. MLOps-инженер может сразу напрямую приступить к разработке ML-приложений Spark на Python или Scala, с возможностью изменить версию фреймворка, установленную непосредственно из среды блокнота.

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

Напомним, PySparkProcessor — это компонент SageMaker, который позволяет выполнять задания Apache Spark в эфемерной распределенной среде, управляемой AWS. Хотя основной целью этого компонента является предварительная и постобработка данных, его можно применять для выполнения любых произвольных вычислительных задач, таких как проектирование фичей, обучение и оценка моделей.

Внутренняя архитектура PySparkProcessor использует технологии Apache Hadoop, Spark и контейнеров, выполняя при запуске последовательность событий:

  1. экземпляры AWS EC2 выделяются в сервисной учетной записи Amazon SageMaker на основе параметров, переданных пользователем, таких как тип инстанса и их количество;
  2. агент SageMaker устанавливается на всех подготовленных инстансах EC2;
  3. образ контейнера, соответствующий выбранной пользователем версии Spark, загружается в экземпляр из AWS ECR;
  4. агент SageMaker передает метаданные контейнерам, которые определяют основную или дополнительную роль, используемую в Apache Hadoop и Spark для идентификации узлов драйверов и исполнителей;
  5. контейнеры запускают процессы Apache Hadoop YARN для выполнения Spark-заданий в распределенной среде;
  6. командная строка-оболочка spark-submit, называемая в SageMaker smspark-submit, вызывается с параметрами пользователя после запуска процессов Apache Hadoop.
  7. Задание Spark выполняется в кластере, а логи сохраняются в AWS CloudWatch и, при необходимости, в корзине S

Команда MLOps-инженеров Udemy расширила возможности PySparkProcessor, реализовав собственный класс PySparkProcessorWithBootstrap. Он управляет списком объектов ProcessingInput, передаваемых PySparkProcessor, и позволяет запускать сценарий начальной загрузки на всех узлах кластера при их запуске. Этот скрипт начальной загрузки устанавливает переменные среды, запускает скрипт начальной загрузки для конкретного проекта, который выполняет пользовательскую предварительную обработку для их рабочих процессов. Также скрипт позволяет установить требования к конкретному проекту и передать все аргументы, чтобы вызвать команду smpark-submit для входа в проект Spark.

Разработка и внедрение ML-решений

Код курса
MLOPS
Ближайшая дата курса
10 марта, 2025
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.

Как применять эти и другие средства MLOps в проектах аналитики больших данных и машинного обучения, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://aws.amazon.com/ru/sagemaker/mlops/
  2. https://medium.com/udemy-engineering/delivering-ml-products-efficiently-utilizing-spark-to-go-beyond-single-node-machine-learning-bf400f83f059
  3. https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html
Поиск по сайту