Очень подробное руководство по созданию службы отслеживания моделей машинного обучения с помощью AWS и MLFlow.

Команды Data Science слишком хорошо знакомы с трудностями отслеживания сотен итераций модели, которые могут быть сгенерированы в рамках одного эксперимента/проекта. Сегодня один из распространенных способов справиться с этим — иметь общие файловые системы, в которых команды могут сохранять свои модели с согласованной номенклатурой, например:

ProjectID_ModelType_DatasetIteration_ImageID_NumLayers_Neurons.model

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

Предлагаемое решение

Все команды, большие и малые, должны использовать удаленный сервер MLflow, размещенный в облаке. Члены команд должны регистрировать версии кода, версии данных, метаданные модели и теги вместе с каждой моделью, которая обучается в рамках конкретного эксперимента/проекта.

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

  • Отслеживание MLflow: позволяет записывать и запрашивать код, данные, конфигурации и результаты процесса обучения модели.
  • Проекты MLflow. Это позволяет упаковывать и повторно развертывать код обработки данных, чтобы обеспечить воспроизводимые запуски на любой платформе.
  • Модели MLflow. Это API для простого развертывания моделей в различных средах.
  • Реестр моделей MLflow: позволяет хранить, комментировать и управлять моделями в центральном репозитории.

В этой статье вы узнаете, как настроить сервер MLflow, защищенный паролем, для всей вашей команды. Основное внимание будет уделено отслеживанию моделей и реестру моделей — двум наиболее важным компонентам, делающим эту среду полезной для вашей команды.

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

Сервер MLflow — Архитектура решения

Этот учебник будет разбит на пять ключевых компонентов:

  • Установка необходимых сервисов AWS: EC2, S3 и RDS.
  • Настройка интерфейса командной строки AWS и SSH в EC2
  • Установка всех зависимостей в экземпляр
  • Настройка удаленного сервера
  • Запуск пользовательского интерфейса MLflow из браузера

Настройка хост-компьютера с AWS EC2

Перейдите в консоль управления AWS и запустите новый экземпляр EC2.

  1. В этом руководстве мы выберем ОС Amazon Linux, но вы можете использовать другие ОС Linux и Windows из списка.

2. Создайте новую пару ключей, если у вас ее еще нет. Это понадобится вам для входа по SSH в ваш экземпляр и настройки различных аспектов вашего сервера.

3. Создайте новую группу безопасности и разрешите трафик SSH, HTTPS и HTTP из любого места (0.0.0.0/0). подключение, которое открыто для всего Интернета. Для этого руководства не стесняйтесь оставлять его открытым для трафика из любого места.

4. Объем хранилища EC2 не должен превышать 8–16 ГБ для вашего сервера, если только вы не собираетесь использовать этот экземпляр для других целей. Я бы порекомендовал вам оставить этот экземпляр в качестве выделенного сервера EC2.

Настройка корзины S3 — хранилища объектов

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

1. Создайте новую корзину в консоли управления AWS.

2. Включите списки управления доступом и оставьте заблокированным общий доступ. ACL позволят другим учетным записям AWS с соответствующими учетными данными получать доступ к объектам в корзине.

Настройка базы данных AWS RDS Postgres

Этот компонент рабочего процесса MLflow будет отвечать за хранение запусков, параметров, метрик, тегов, заметок, путей к хранилищам объектов и других метаданных.

  1. Создайте базу данных из консоли управления AWS. Мы будем работать с базой данных PostgreSQL.

2. Выберите уровень бесплатного пользования

3. Дайте вашей БД имя, назначьте главное имя пользователя и укажите пароль для этой учетной записи. Вы будете использовать эту информацию для запуска сервера MLflow.

4. Выберите тип экземпляра. В зависимости от того, какой объем трафика вы собираетесь пропускать через сервер MLflow, т. е. сколько раз вы будете запрашивать модели и данные, вы должны предоставить более мощный экземпляр.

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

5. Общий доступ необходим, чтобы позволить другим пользователям за пределами вашего VPC записывать/читать БД. Вы можете указать IP-адреса списка надежных отправителей, используя группу безопасности.

6. Вам нужно будет создать группу безопасности с входящим правилом, которое разрешает весь TCP-трафик из любого места (0.0.0.0/0) или с определенных IP-адресов.

7. Запустите RDS

Установите интерфейс командной строки AWS и экземпляр Access с помощью SSH

AWS CLI — это инструмент, позволяющий управлять ресурсами AWS из командной строки. Вы можете перейти по этой ссылке, чтобы установить CLI с веб-сайта AWS.

После установки интерфейса командной строки AWS вы можете настроить свои учетные данные AWS на своем компьютере, чтобы разрешить вам запись в хранилище объектов S3. Это понадобится вам при включении MLflow в скрипты, записные книжки или API.

  1. На панели инструментов экземпляра EC2 выберите свой экземпляр MLflow EC2 и нажмите «подключиться».

2. Перейдите на вкладку «Клиент SSH» и скопируйте пример SSH в буфер обмена из нижней части подсказки.

3. Вставьте команду SSH в свое приглашение (здесь я использую Git Bash из папки, в которой я сохранил свой файл .pem)

4. Установите следующие зависимости

sudo pip3 install mlflow[extras] psycopg2-binary boto3

sudo yum install httpd-tools

sudo amazon-Linux-extras install nginx1

5. Создайте пользователя nginx и установите пароль

sudo htpasswd -c /etc/nginx/.htpasswd testuser

6. Далее мы настроим обратный прокси nginx на порт 5000.

sudo nano /etc/nginx/nginx.conf

Используя nano, мы можем отредактировать файл конфигурации nginx, чтобы добавить следующую информацию об обратном прокси:

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

Запустите nginx и сервер MLflow.

Теперь вы можете запустить обратный прокси-сервер nginx и запустить удаленные серверы MLflow. Эта часть требует, чтобы вы получили некоторую информацию из консоли управления AWS.

  1. Запускаем наш сервер nginx.

sudo service nginx start

2. Запустите сервер MLflow и настройте все компоненты хранилища объектов (S3) и внутреннего хранилища (RDS).

mlflow server --backend-store-uri postgresql://MASTERUSERNAME:YOURPASSWORD@YOUR-DATABASE-ENDPOINT:5432/postgres --default-artifact-root s3://BUCKETNAME --host 0.0.0.0

Где можно найти эту информацию?

  • MASTERUSERNAME — имя пользователя, которое вы задали для своей БД PostgreSQL RDS.
  • YOURPASSWORD — пароль, который вы устанавливаете для своей БД PostgreSQL RDS.
  • YOUR-DATABASE-ENDPOINT — это можно найти в информации о вашей базе данных RDS в консоли управления AWS.
  • BUKCETNAME — название вашей корзины S3.

Выполнив эту команду, вы должны получить массивную распечатку и информацию о ваших рабочих идентификаторах и идентификаторах pid.

Выключение сервера MLflow или работа в фоновом режиме

Если вы хотите выключить сервер MLflow в любое время, вы можете использовать следующую команду: sudo fuser -k port/tcp

Если вы хотите запустить его в фоновом режиме, закрыть терминал и продолжить работу сервера, вы должны добавить nohup и & в команду запуска сервера MLflow.

nohup mlflow server --backend-store-uri postgresql://MASTERUSERNAME:YOURPASSWORD@YOUR-DATABASE-ENDPOINT:5432/postgres --default-artifact-root s3://BUCKETNAME --host 0.0.0.0 &

Доступ к пользовательскому интерфейсу MLflow из браузера

Теперь, когда вы правильно настроили всю инфраструктуру вашего сервера MLFlow, вы можете начать взаимодействовать с ним из командной строки, скриптов и т. д.

Чтобы получить доступ к пользовательскому интерфейсу MLflow, вам потребуется общедоступный IP-адрес IPV4 ваших экземпляров EC2.

  1. Скопируйте и вставьте свой общедоступный IP-адрес IPV4 (его можно найти в консоли управления EC2). Убедитесь, что вы добавили http:// перед IP-адресом.
  2. Вам будет предложено ввести имя пользователя и пароль nginx.

3. Вуаля! Теперь вы можете получать доступ к своим экспериментам и моделям и управлять ими из пользовательского интерфейса MLflow.

Заключение

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

Если у вас есть вопросы или вы хотите поговорить о науке о данных, свяжитесь со мной в LinkedIn.