Краткий обзор MLOps

MLOps — это набор методов, направленных на надежное и эффективное развертывание и поддержку моделей машинного обучения в производственной среде. Слово представляет собой соединение «машинного обучения» и практики непрерывного развития DevOps в области программного обеспечения.

DevOps против MLOps

Системы машинного обучения отличаются от обычных программных решений следующими особенностями:

  • CI — это уже не только тестирование и проверка кода и компонентов, но также тестирование и проверка данных, схем данных и моделей.
  • CD больше не относится к одному программному пакету или сервису, а представляет собой систему (конвейер обучения машинного обучения), которая должна автоматически развертывать другой сервис (сервис прогнозирования моделей).
  • CT — это новое свойство, уникальное для систем ML, которое связано с автоматическим переобучением и обслуживанием моделей.

Бенчмаркинг

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

Графический процессор стирает пол с ЦП в этом тесте времени выполнения конвейера. ЦП потребовалось более 5 часов для задачи, которую графический процессор выполнил чуть более чем за минуту, что в колоссальные в 267 раз быстрее. Это наилучший сценарий для ЦП, поскольку многопоточность использовалась как для обработки данных, так и для обучения. Работа Data Scientist в основном состоит из экспериментов с данными, функциями и параметрами. Такое ускорение разработки может стать решающим фактором в том, чтобы вывести ваш продукт на рынок раньше, чем ваш конкурент.

Машина: NC24rs_v3 (24 виртуальных процессора, 448 ГБ ОЗУ, 4 × NVIDIA Tesla V100)

Данные: https://www.kaggle.com/c/new-york-city-taxi-fare-prediction/data

Код: https://github.com/rppol/MLOps_GPU/tree/main/notebooks

Практическая реализация MLOps

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

Здесь мы будем использовать Rapids и Dask для обработки и обучения данных на основе графического процессора. Jenkins будет использоваться для конвейеров CI/CD, а MLflow — для отслеживания моделей.

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

Необходимы базовые знания Linux и Python.

Настройка среды

Для этого вам понадобится машина с графическим процессором Nvidia, которая удовлетворяет этим предпосылкам. Я использовал виртуальную машину NC24rs_v3 с Ubuntu 20.04 в Azure.

  1. Установите виртуальную машину и подключитесь к ней по SSH
  2. Установить драйверы Nvidia
  3. Установить Докер
  4. Установить Nvidia Container Toolkit
  5. Установить и настроить Git
  6. Установить и запустить Дженкинс
  7. Установите и настройте Conda для Jenkins, выполнив следующие действия:

8. Создайте структуру каталогов

  • Каталог сервера инференса Triton
  • Каталог данных

В идеале в продакшн-системах API будет постоянно подпитывать данные, и для контроля версий следует использовать такие инструменты, как dvc. Здесь мы будем использовать статические данные конкурса Прогноз стоимости такси в Нью-Йорке. Учебный файл разделен в соотношении 9:1 как train.csv и test.csv соответственно. Используйте приведенный ниже скрипт, чтобы загрузить их с Google Диска (~ 5 ГБ).

10. Установка и настройка Triton Inference Server

Мы разрабатываем модель XGBoost. Triton имеет FIL Backend, созданный с помощью RAPIDS Forest Inference Library для быстрого вывода на основе графического процессора.

11. Откройте порты на ВМ

"Код"

Репозиторий GitHub: https://github.com/rppol/MLOps_GPU

Состав:

  1. ноутбуки: эти ноутбуки предназначены не для развертывания, а для тестирования производительности и экспериментов.
  • nyc-taxi-fare-cpu.ipynb: Интуитивно понятный ноутбук только с процессором, созданный с пандами (обработка данных), модином (многопоточность), XGBoost (все основные тренировки).
  • nyc-taxi-fare-gpu.ipynb: интуитивно понятный ноутбук только с графическим процессором, созданный с помощью dask_cudf (обработка данных), xgboost.dask (распределенное обучение на основе графического процессора).

2. src: эта папка содержит все исходные файлы. Мы разделили блокнот на модули, чтобы упростить его настройку для развертывания MLOps. Каждая основная функция разделена на скрипты Python с интуитивно понятными названиями. Каждый скрипт поддерживает независимое выполнение.

  • read_params.py: изменение жестко заданных значений может быть очень раздражающим и подверженным ошибкам. Этот скрипт Python создает вспомогательные функции для чтения файла params.yaml, т. е. универсальный пункт назначения для изменения параметров.
  • dask_client.py: создает клиент Dask, этот клиент выполняется через сценарии, так как создание нового требует времени. Максимальная выделенная память GPU должна быть указана в файле params.yaml.
  • load_data.py: помогает загружать данные обучения и тестирования в память графического процессора. Использует dask_cudf для ускорения и распространения чтения. Параметр test должен быть установлен в true для чтения тестовых данных. Относительный путь к каталогу данных и имена файлов должны быть указаны в файле params.yaml.
  • feature_engg.py: это скрипт очистки данных, манипулирования и добавления функций. Он удаляет выбросы и необоснованные данные и добавляет интересные функции, такие как расстояние до различных ориентиров.
  • split_data.py: разделяет данные как сценарии обучения и проверки. Коэффициент разделения можно варьировать с помощью файла params.yaml.
  • generate_Dmatrix.py: преобразует данные в формат, который может обрабатывать XGBoost.
  • train.py: обучающий скрипт для локального использования и устранения неполадок. Это не используется в автоматизированном конвейере.
  • train_with_tracking.py: сценарий обучения модели с отслеживанием MLflow. Сервер MLflow должен быть запущен перед выполнением этого скрипта. Он отслеживает все параметры и построенную модель. Он также тестирует модель на невидимых данных и отслеживает показатели. Посетите это для получения руководства по тонкой настройке моделей XGBoost.
  • log_production_model.py: этот скрипт находит лучшую модель из всех версий, сравнивая rmse. Он загружает, конвертирует и сохраняет эту модель в папке производственной модели для дальнейшей обработки.

3. тест: проводит тестирование скриптов Python как для модели, так и для сервера.

  • test_and_evaluate.py: генерирует прогнозы по невидимым данным и сравнивает с фактическими значениями. Генерирует такие показатели, как среднеквадратическая ошибка, средняя абсолютная ошибка, R-квадрат ошибки. Модель может быть передана в качестве аргумента или загружена из каталога production_model.
  • triton_inference_test.py: проверяет, работает ли Triton Server с данными 1%. Использует grpc для работы в сети.

4. scripts: содержит сценарии оболочки, выполняемые Jenkins.

  • train_test_log.sh: поезда, тесты и журналы новой модели.
  • Productionize.sh: получает лучшую модель и копирует ее в репозиторий моделей.
  • triton_test.sh: тестирует Triton после загрузки новой модели.

5. артефакты: сохраняет модели в формате MLflow.

6. Jenkinsfile: описывает конвейер CI/CD.

7. params.yaml: Единый пункт назначения для управления всем, хранения конфигурации, параметров, пути, ip, портов.

Построение конвейера CI/CD

  1. Форк https://github.com/rppol/MLOps_GPU
  2. Войдите в Jenkins ( your_public_ip_here:8080 )

Имя пользователя: админ

Пароль можно узнать с помощью следующей команды:

3. Добавьте свои учетные данные GitHub

4. Нажмите Новый элемент

5. Выберите «Конвейер», введите действительное имя и нажмите «ОК».

6. Выберите «Не разрешать параллельные сборки», так как одна сборка потребляет все ресурсы графического процессора.

7. Прокрутите вниз до Pipeline и выберите следующие параметры:

  • Введите URL вашего репозитория
  • Прикрепите свои учетные данные GitHub, созданные на шаге 2.
  • Выбрать основную ветку

8. Нажмите «Применить и сохранить».

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

Запуск конвейера CI/CD и развертывание

  1. Убедитесь, что Jenkins, MLflow Server и Triton запущены

2. Доступ к серверам можно получить здесь:

  • Дженкинс: your_ip_here:8080
  • JupyterLab: your_ip_here:9999/лаборатория?
  • MLflow: your_ip_here:8003
  • Сервер логических выводов Triton: your_ip_here:8001
  • Метрики Triton: your_ip_here:8002

3. Выполнение конвейера

  • Перейдите по адресу: your_ip_here:8080/job/your_pipeline_name/
  • Нажмите Build Now, чтобы начать выполнение.

  • Наведите указатель мыши на каждый этап, чтобы проверить журналы.

4. Отслеживание MLflow

  • Каждая сборка конвейера создает новую модель, а MLflow предоставляет интуитивно понятный пользовательский интерфейс для мониторинга всего.

  • Выберите два или более прогона и нажмите «Сравнить», чтобы сравнить их.

Настройка гиперпараметров

  • Перейдите по адресу: your_ip_here:9999/lab?
  • Отредактируйте значения в params.yaml как душе угодно.
  • Посетите это, чтобы настроить гиперпараметры как профессионал

Заключение

Благодаря приведенной выше демонстрации стало очевидно, что конвейер MLOps можно полностью ускорить на графических процессорах. Виртуальная машина с GPU стоит в 1,8 раза больше, чем виртуальная машина с процессором, но с ускорением примерно 267 × она окупается.

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

LinkedIn: https://www.linkedin.com/in/rutikpol/

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