Рекомендации по глубокому обучению в Azure Databricks

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

Databricks Машинное обучение предоставляет предварительно созданную инфраструктуру глубокого обучения с databricks Runtime для Машинное обучение, которая включает в себя наиболее распространенные библиотеки глубокого обучения, такие как TensorFlow, PyTorch и Keras. Также содержит встроенную, предварительно настроенную поддержку GPU, включая драйверы и вспомогательные библиотеки.

Databricks Runtime ML также включает все возможности рабочей области Azure Databricks, такие как создание и управление кластерами, управление библиотеками и средой, управление кодом с папками Databricks Git, поддержка автоматизации, включая Задания и API Databricks, а также интегрированный MLflow для отслеживания разработки моделей и развертывания моделей и обслуживания.

Управление ресурсами и средой

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

Настройка среды разработки

С помощью Databricks Runtime можно настроить среду разработки на уровне записной книжки, кластера и задания.

Использование политик кластера

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

Рассмотрим gpu A100 для рабочих нагрузок глубокого обучения

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

  • Databricks поддерживает графические процессоры A100 во всех облаках. Полный список поддерживаемых типов GPU см. в разделе "Поддерживаемые типы экземпляров".
  • 100 GPU обычно имеют ограниченную доступность. Обратитесь к поставщику облачных служб для выделения ресурсов или заранее рассмотрите возможность резервирования емкости.

Лучшие практики для загрузки данных

Облачное хранилище данных, обычно, не оптимизировано для ввода/вывода, что может быть сложной задачей для моделей глубокого обучения, требующих больших наборов данных. Databricks Runtime ML включают в себя Delta Lake и Petastorm для оптимизации пропускной способности данных для приложений глубокого обучения.

Для хранения данных в Databricks рекомендуется использовать таблицы Delta Lake. Delta Lake упрощает ETL и позволяет эффективно обращаться к данным. В частности, для образов Delta Lake помогает оптимизировать прием для обучения и вывода. В справочном решении для приложений с образами приведен пример оптимизации ETL для образов с использованием Delta Lake.

Petastorm предоставляет интерфейсы API, позволяющие подготавливать данные в формате Parquet для использования с помощью TensorFlow, Keras или PyTorch. API SparkConverter обеспечивает интеграцию c DataFrame Spark. Petastorm также предоставляет сегментирование данных для распределенной обработки. Дополнительные сведения см. в статье Загрузка данных с помощью Petastorm.

Рекомендации по обучению моделей глубокого обучения

Databricks рекомендует использовать Databricks Runtime для Машинное обучение и отслеживания MLflow и автологирования для всех обучающих моделей.

Начало работы с кластером с одним узлом

Кластер GPU с одним узлом, как правило, является самым быстрым и экономичным для разработки моделей глубокого обучения. Один узел с 4 графическими процессорами (GPU), скорее всего, будет быстрее для глубокого обучения, в котором 4 рабочих узла имеют 1 графический процессор. Это обусловлено тем, что распределенное обучение влечет за собой нагрузку на сеть.

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

Использование метрики TensorBoard и кластера для мониторинга процесса обучения

TensorBoard предустановлен в Databricks Runtime ML. Его можно использовать в записной книжке или на отдельной вкладке. Дополнительные сведения см. в разделе TensorBoard.

Метрики кластера доступны во всех средах выполнения Databricks. Вы можете проверить использование сети, процессора и памяти для проверки узких мест. Дополнительные сведения см . в метриках кластера.

Оптимизация производительности для глубокого обучения

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

Ранняя остановка

Ранняя остановка отслеживает значение метрики, вычисленное в наборе проверки, и прекращает обучение, когда метрика перестает улучшаться. Это лучше, чем угадывать большое количество эпох для завершения. Каждая библиотека глубокого обучения предоставляет собственный API для ранней остановки; например, см. раздел API обратного вызова EarlyStopping для TensorFlow/Keras и для PyTorch Lightning. Пример записной книжки см . в примере записной книжки TensorFlow Keras.

Настройка размера пакета

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

Измените размер пакета вместе со скоростью обучения. Хорошее эмпирическое правило: если увеличить размер пакета на n, увеличивается скорость обучения на sqrt (n). При ручной настройке попробуйте изменить размер пакета с коэффициентом в 2 или 0,5. Затем продолжайте настройку для оптимизации производительности вручную или путем тестирования различных гиперпараметров с помощью автоматизированного средства, например Hyperopt.

Перенос обучения

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

Переход на распределенное обучение

Databricks Runtime ML включает HorovodRunner, spark-tensorflow-distributorTorchDistributor и Hyperopt, чтобы упростить переход от одного узла к распределенному обучению.

HorovodRunner

Horovod — это проект с открытым исходным кодом, который позволяет масштабировать глубокое обучение для нескольких GPU или распределенного вычисления. HorovodRunner, построенная с помощью Databricks и включенная в Databricks Runtime ML, — это программа-оболочка Horovod, обеспечивающая совместимость со Spark. API позволяет масштабировать код с одним узлом с минимальными изменениями. HorovodRunner работает с TensorFlow, Keras и PyTorch.

spark-tensorflow-distributor

spark-tensorflow-distributor — это собственный пакет с открытым кодом в TensorFlow для распределенного обучения с помощью TensorFlow в кластерах Spark. См. пример записной книжки.

ФакелDistributor

TorchDistributor — это модуль с открытым исходным кодом в PySpark, который упрощает распределенное обучение с помощью PyTorch в кластерах Spark, который позволяет запускать задания обучения PyTorch в качестве заданий Spark. См . распределенное обучение с помощью TorchDistributor.

Hyperopt

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

Рекомендации по выводу

В этом разделе содержатся общие советы по использованию моделей для вывода с Azure Databricks.

  • Чтобы снизить затраты, рассмотрим как ЦП, так и оптимизированные для вывода GPU, такие как NC T4_v3-серии. Четкой рекомендации не существует, так как наилучший выбор зависит от размера модели, объемов данных и других переменных.

  • Используйте MLflow, чтобы упростить развертывание и обслуживания моделей. MLflow может регистрировать в журнале любую модель глубокого обучения, в том числе пользовательские алгоритмы предварительной обработки и постобработки. Модели в каталоге Unity или моделях, зарегистрированных в реестре моделей рабочей области, можно развертывать для пакетного, потокового или онлайн-вывода.

Интернет-обслуживание

Лучшим вариантом для обслуживания с низкой задержкой является Интернет-обслуживание за REST API. Databricks предоставляет службу моделей для онлайн-вывода. Служба моделей предоставляет единый интерфейс для развертывания, управления и запроса моделей ИИ и поддерживает обслуживание следующих компонентов:

  • Настраиваемые модели. Это модели Python, упакованные в формате MLflow. Примеры включают scikit-learn, XGBoost, PyTorch и модели преобразователя распознавания лиц.
  • Современные открытые модели, доступные API-интерфейсами модели Foundation. Эти модели являются курируемыми архитектурами базовых моделей, поддерживающими оптимизированное вывод. Например, базовые модели, такие как Llama-2-70B-chat, BGE-Large и Mistral-7B, доступны для немедленного использования с ценами на токен . Для рабочих нагрузок, требующих гарантий производительности и настраиваемых вариантов модели, их можно развернуть с подготовленной пропускной способностью.
  • Внешние модели. Это модели, размещенные за пределами Databricks. Например, базовые модели, такие как, GPT-4 OpenAI, Anthropic в Клоде и других. Конечные точки, обслуживающие эти модели, могут централизованно управляться, и клиенты могут устанавливать ограничения скорости и элементы управления доступом для них.

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

Другие распространенные управляемые службы для вывода в режиме подключения к сети содержат:

Вывод пакетной и потоковой передачи

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

  • Если вы планируете получать доступ к данным для многократного вывода, рассмотрите возможность создания задания предварительной обработки для ETL-данных в таблицу Delta Lake перед выполнением задания вывода. Таким образом, стоимость приема и подготовки данных распределяется по нескольким операциям чтения данных. Разделение предварительной обработки от вывода также позволяет выбрать другое оборудование для каждого задания, чтобы оптимизировать затраты и производительность. Например, для вывода можно использовать ЦП для ETL и GPU.
  • Используйте функции Spark Pandas UDF для масштабирования вывода пакетной и потоковой передачи в кластере.