Многомодельное машинное обучение (ML) в большом масштабе в Azure с использованием Spark

Фабрика данных Azure
Azure Data Lake
Azure Databricks
Машинное обучение Azure
Azure Synapse Analytics

В этой статье описана архитектура применения большого числа моделей, использующая Apache Spark в Azure Databricks или Azure Synapse Analytics. Spark — это мощное средство для преобразования больших объемов сложных данных, которое требуется для некоторых решений.

Примечание.

При применении большого числа моделей используйте Spark 3.0 и более поздних версий. В этих версиях возможности преобразования данных и поддержка Python и Pandas гораздо лучше, чем в предыдущих.

При работе со статьей, которая дополняет текущий документ (Многомодельное машинное обучение (ML) в большом масштабе с использованием Машинного обучения Azure), используется Машинное обучение и вычислительные кластеры.

Архитектура

Architecture diagram for many models machine learning at scale on Azure with Spark.

Скачайте файл Visio для этой архитектуры.

Поток данных

  1. Прием данных. Фабрика данных Azure извлекает данные из базы данных-источника и копирует их в Azure Data Lake Storage.
  2. Конвейер обучения моделей:
    1. Подготовка данных. Конвейер обучения извлекает данные из Data Lake Storage и группирует их в наборы данных для обучения моделей с помощью Spark.
    2. Обучение моделей. Конвейер обучает модели для всех наборов данных, созданных во время подготовки. Он использует API функций Pandas для параллельного обучения нескольких моделей. После обучения модели конвейер регистрирует ее в Машинном обучении вместе с метриками тестирования.
  3. Конвейер повышения уровня модели:
    1. Оценка моделей. Перед перемещением в рабочую среду конвейер повышения уровня оценивает обученные модели. Конвейер DevOps с помощью бизнес-логики определяет, соответствует ли модель критериям развертывания. Например, конвейер может проверить, превышает ли точность данных тестирования 80 %.
    2. Регистрация моделей. Этот конвейер регистрирует модели, которые соответствуют требованиям рабочей области рабочего Машинного обучения.
  4. Конвейер пакетной оценки модели:
    1. Подготовка данных. Конвейер пакетной оценки извлекает данные из Data Lake Storage и группирует их в наборы данных для оценки с помощью Spark.
    2. Оценка моделей. Конвейер выполняет одновременную оценку нескольких наборов данных с помощью API функций Pandas. Конвейер находит соответствующую модель для каждого набора данных в Машинном обучении, выполняя поиск по тегам модели. Затем конвейер скачивает модель и использует ее для оценки набора данных. Для хранения результатов в конвейере используется соединитель Spark для Synapse SQL.
  5. Оценка в реальном времени. Служба Azure Kubernetes (AKS) при необходимости может выполнять оценку в режиме реального времени. Учитывая наличие большого числа моделей, их нужно загружать по требованию, а не предварительно.
  6. Результаты:
    1. Прогнозы. Конвейер пакетной оценки сохраняет прогнозы в SQL.
    2. Метрики. Power BI подключается к прогнозам модели для получения и агрегирования результатов, которые будут представлены.

Компоненты

  • Машинное обучение Azure — это служба ML корпоративного уровня для быстрого создания и развертывания моделей. Эта служба предоставляет пользователям со всеми уровнями навыков конструктор с небольшим объемом кода, автоматизированное ML (AutoML) и размещенную среду Jupyter Notebook, которая поддерживает различные среды IDE.
  • Azure Synapse Analytics — это служба аналитики, которая объединяет интеграцию данных, корпоративное хранилище данных и аналитику больших данных.
  • Synapse SQL — это система распределенных запросов для T-SQL, которая поддерживает сценарии хранения и виртуализации данных, а также расширяет возможности T-SQL для реализации сценариев потоковой передачи и ML. Система предлагает бессерверные модели и модели выделенных ресурсов.
  • Azure Data Lake Storage — это масштабируемая и безопасная служба хранения для высокопроизводительных аналитических рабочих нагрузок.
  • Служба Azure Kubernetes (AKS) — это полностью управляемая служба Kubernetes для развертывания и администрирования контейнерных приложений. AKS упрощает развертывание управляемого кластера AKS в Azure, перекладывая операционные издержки на Azure.
  • Azure DevOps — это набор служб для разработчиков, который обеспечивает комплексное управление жизненным циклом приложений и инфраструктуры. DevOps включает решения для отслеживания работы, управления исходным кодом, сборки, CI/CD, управления пакетами и тестирования.
  • Microsoft Power BI — это набор программных служб, приложений и соединителей, которые работают вместе, чтобы превратить несвязанные источники данных в согласованные, визуально привлекательные и интерактивные сведения.

Альтернативные варианты

  • Для обучения и оценки модели вы можете использовать Spark в Azure Synapse вместо Spark в Azure Databricks.
  • Исходные данные могут поступать из любой базы данных.
  • Вы можете использовать управляемую конечную точку в сети или AKS для развертывания вывода в режиме реального времени.

Подробности сценария

Для выполнения многих задач машинного обучения (ML) недостаточно одной модели ML. Может ли это прогнозировать продажи для каждого элемента каждого магазина или моделирования обслуживания для сотен нефтяных скважин, наличие модели для каждого экземпляра может улучшить результаты по многим проблемам машинного обучения. Этот шаблон использования большого числа моделей очень распространен в самых разных отраслях и применяется ко многим реальным вариантам использования. С использованием Машинного обучения Azure комплексный конвейер моделей может включать обучение моделей, развертывание пакетного вывода и развертывание в режиме реального времени.

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

Потенциальные варианты использования

  • Розничная торговля. Для сети продуктовых магазинов нужно создать отдельную модель прогнозирования доходов для каждого магазина и каждой позиции. В общей сложности потребуется более 1000 моделей на магазин.
  • Цепочка поставок. Для каждой комбинации склада и продукта дистрибьюторская компания должна оптимизировать инвентаризацию.
  • Рестораны. Для сети с тысячами франшиз нужно прогнозировать спрос для каждой франшизы.

Рекомендации

Эти рекомендации реализуют основные принципы платформы Azure Well-Architected Framework, которая является набором руководящих принципов, которые можно использовать для улучшения качества рабочей нагрузки. Дополнительные сведения см. в статье Microsoft Azure Well-Architected Framework.

  • Секции данных. Секционирование данных — основной фактор реализации шаблона использования большого числа моделей. Если требуется использовать отдельную модель для каждого магазина, набор данных будет содержать все данные для одного магазина. При этом наборов данных будет столько же, сколько магазинов. Если вы хотите выполнить моделирование продуктов по магазинам, то для каждого сочетания продукта и магазина будет использоваться отдельный набор данных. В зависимости от формата исходных данных может быть легко секционировать данные или потребоваться обширные перетасовки и преобразования данных. Spark и Synapse SQL очень хорошо масштабируются для таких задач, а Pandas в Python не очень подходит для их выполнения, так как работает только в одном узле и процессе.
  • Управление моделями. Конвейеры обучения и оценки определяют и вызывают нужную модель для каждого набора данных. Для этого они вычисляют теги, характеризующие набор данных, а затем с помощью этих тегов выполняют поиск соответствующей модели. Теги определяют ключ секции данных и версию модели, а также могут предоставлять другие сведения.
  • Выбор правильной архитектуры:
    • Spark будет подходящим вариантом, если в конвейере обучения применяются сложные требования к преобразованию и группированию данных. Решение предоставляет гибкие методы разделения и группирования данных по комбинациям характеристик, таким как "продукт — магазин" или "расположение — продукт". Результаты можно разместить в кадре данных Spark для использования на дальнейших этапах.
    • Когда алгоритмы обучения и оценки машинного обучения просты, вы можете секционировать данные с помощью библиотек, таких как Scikit-learn. В таких случаях может не потребоваться Spark, поэтому при установке Azure Synapse или Azure Databricks можно избежать возможных сложностей.
    • Если наборы данных для обучения уже созданы (например, они находятся в отдельных файлах или отдельных строках либо столбцах), для сложных преобразований не требуется Spark.
    • Решение Машинного обучения и вычислительных кластеров обеспечивает высокую степень универсальности для ситуаций, требующих сложной настройки. Например, вы можете использовать пользовательский контейнер Docker или скачивать файлы либо предварительно обученные модели. Компьютерное зрение и глубокое обучение при обработке естественного языка (NLP) — это примеры областей применения, в которых может потребоваться такая универсальность.
  • Обучение и оценка Spark. При использовании архитектуры Spark вы можете применить API функций Pandas в Spark для параллельного обучения и оценки.
  • Отдельные репозитории для моделей. Чтобы защитить развернутые модели, рекомендуем хранить их в собственном репозитории, который не затрагивают конвейеры обучения и тестирования.
  • Вывод по сети: если конвейер загружает и кэширует все модели в начале, модели могут исчерпать память контейнера. Поэтому загружайте модели по требованию в методе запуска, даже если это может привести к значительному увеличению задержки.
  • Масштабируемость обучения. С помощью Spark можно параллельно обучать сотни тысяч моделей. Spark выполняет несколько процессов обучения на каждой виртуальной машине в кластере. Каждое ядро может выполнять отдельный процесс. Хоть это и оптимальное использование ресурсов, важно точно определить размер кластера и выбрать правильный номер SKU, особенно если процесс обучения использует много ресурсов и долго выполняется.

Оптимизация затрат

Оптимизация затрат заключается в поиске способов уменьшения ненужных расходов и повышения эффективности работы. Дополнительные сведения см. в разделе Обзор критерия "Оптимизация затрат".

Составить более четкое представление о затратах на выполнение этого сценария в Azure вы можете с помощью калькулятора цен. Вот приемлемые начальные допущения:

  • Обслуживающие модели обучаются ежедневно, чтобы оставаться актуальными.
  • Для набора данных в 40 миллионов строк с 10 тысячами комбинаций магазинов и продуктов обучение Azure Databricks с применением кластера, который подготовлен с 12 виртуальными машинами, использующими экземпляры Ls16_v2, занимает около 30 минут.
  • Пакетная оценка с тем же набором данных занимает около 20 минут.
  • С помощью Машинного обучения можно выполнять развертывание в режиме реального времени. Выберите подходящий тип виртуальной машины и размер кластера для требуемого объема запросов.
  • Кластер AKS автоматически масштабируется по мере необходимости. В результате в среднем остаются активными два узла в месяц.

Чтобы узнать, как изменятся цены для вашего варианта использования, измените переменные в соответствии с ожидаемым размером данных и требованиями к обслуживанию нагрузки. В зависимости от размера данных для обучения увеличьте или уменьшите размер кластера Azure Databricks. Чтобы обеспечить возможность одновременной работы большего числа пользователей во время обслуживания моделей, увеличьте размер кластера AKS.

Соавторы

Эта статья поддерживается корпорацией Майкрософт. Первоначально он был написан следующими участник.

Автор субъекта:

Следующие шаги