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

MLflow состоит в основном из четырех модулей.

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

Основные понятия о MLFLow.

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

  1. Версия кода: хэш фиксации Git, используемый для запуска, если он был запущен из проекта MLflow.
  2. Время начала и окончания: время начала и окончания выполнения.
  3. Параметры: входные параметры типа "ключ-значение" по вашему выбору. И ключи, и значения являются строками.
  4. Метрики: метрики "ключ-значение", где значение является числовым. Каждую метрику можно обновлять в ходе выполнения (например, чтобы отслеживать, как сходится функция потерь вашей модели), а MLflow записывает и позволяет визуализировать полную историю метрики.
  5. Артефакты. Выходные файлы, такие как модели и другие.

MLflow использует два компонента для хранения или записи прогонов — базовое хранилище и хранилище артефактов. Серверная часть хранит прогоны записей, параметры модели, метрики, теги, заметки, метаданные и т. д., тогда как хранилище артефактов записывает такие артефакты, как (файлы, модели, изображения, объекты в памяти и т. д.).

По умолчанию всякий раз, когда вы создаете эксперимент в mlflow и затем запускаете его локально, создается каталог с именем «mlruns», внутри которого сохраняются ваши артефакты и серверные данные, такие как метрики, параметры и т. д., как показано ниже. . Внутри артефакта сохраняется ваша модель и другой артефакт.

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

Сценарий 1

  • Бэкенд-хранилище: локальная файловая система
  • Хранилище артефактов: локальная файловая система

Сценарий второй:

  • Серверное хранилище: база данных SQLite
  • Хранилище артефактов: локальная файловая система

Сценарий третий:

  • Сервер отслеживания: да, удаленный сервер (EC2).
  • Серверное хранилище: база данных PostgreSQL (в нашем случае RDS).
  • Магазин артефактов: ведро s3.

Использование MLflow с AWS RDS, EC2 и S3

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

  • Сервер отслеживания: удаленный сервер (EC2).
  • Внутреннее хранилище: база данных PostgreSQL (AWS RDS).
  • Хранилище артефактов: корзина AWS s3.
  1. Запуск экземпляра EC2

Сначала нам нужно запустить экземпляр EC2. Получите инстанс уровня бесплатного пользования для этого упражнения, например инстанс t2.micro с ОС Amazon Linux.

Также необходимо отредактировать группу безопасности, чтобы экземпляр EC2 принимал соединения SSH (порт 22) и HTTP (порт 5000): Ниже приведен снимок экрана группы безопасности для моего экземпляра.

2. Создайте корзину S3.

Для хранения артефактов вам понадобится хранилище артефактов, в нашем случае это будет корзина S3. Имя моей корзины s3 — «mlflow-artifacts-remote-buckets».

3. Создайте новую базу данных PostgreSQL, которая будет использоваться в качестве внутреннего хранилища.

Перейдите в консоль RDS и нажмите «Создать базу данных». Обязательно выберите тип движка «PostgreSQL» и шаблон «Уровень бесплатного пользования».

Выберите имя для своего инстанса БД, установите основное имя пользователя «mlflow» и установите флажок «Автоматическое создание пароля», чтобы Amazon RDS автоматически генерировал пароль.

Наконец, в разделе «Дополнительная конфигурация» укажите имя базы данных, чтобы RDS автоматически создал для вас исходную базу данных.

После нажатия на «запустить базу данных» вы сможете проверить только что сгенерированный пароль, но учтите, что автоматически сгенерированный пароль будет показан только один раз! В моем случае это выглядит так:

Обратите внимание на следующую информацию:

  • главное имя пользователя
  • пароль
  • исходное имя базы данных
  • конечная точка

После создания экземпляра БД перейдите в консоль RDS, выберите новую базу данных и в разделе «Подключение и безопасность» выберите группу безопасности VPC. Измените группу безопасности, добавив новое входящее правило, разрешающее соединения postgreSQL через порт 5432 из группы безопасности экземпляра EC2. Таким образом, сервер сможет подключиться к базе данных postgres.

Теперь подключитесь к экземпляру EC2 и выполните следующие действия.

  1. судо ням обновление
  2. pip3 установить mlflow boto3 psycopg2-binary
  3. aws configure # вам нужно будет ввести свои учетные данные AWS здесь

И самый важный

4.mlflow server -h 0.0.0.0 -p 5000 --backend-store-uri postgresql://DB_USER:DB_PASSWORD@DB_ENDPOINT:5432/DB_NAME --default-artifact-root s3://S3_BUCKET_NAME

5. Получите доступ к удаленному серверу отслеживания с вашего локального компьютера.

Откройте новую вкладку в своем веб-браузере и перейдите по этому адресу: http://<EC2_PUBLIC_DNS>:5000 (вы можете найти общедоступный DNS экземпляра, проверив сведения о своем экземпляре в консоли EC2).

Здесь вы увидите эксперименты в mlflow.

Теперь для дальнейшего продвижения в этом модуле: см. код здесь.

Пример кода.

Если вы все еще здесь, это хорошо. У нас осталось еще два модуля.

Модели МЛФлоу

MLflow предлагает стандартный формат для упаковки обученных моделей машинного обучения. APIS большинства библиотек, таких как Sklearn и Pytorch, написаны на MLflow для упаковки моделей с использованием встроенных в mlflow API, таких как mlflow.sklearn.log_model и других. Формат определяет соглашение, которое позволяет сохранять модель в разных разновидностях (функция Python, pytorch, sklearn и т. д.), которые могут быть поняты разными платформами обслуживания и вывода модели.

Все разновидности, которые поддерживает конкретная модель, определены в ее файле MLmodel в формате YAML. Например, mlflow.sklearn выводит модели следующим образом:

И его файл MLmodel описывает два варианта:

Эту модель можно использовать с любым инструментом, поддерживающим вариант модели sklearn или python_function. Они показаны ниже с общими платформами.

Вы можете исследовать их, если хотите.

Если вы хотите регистрировать только свою модель, вы можете регистрировать их, используя вариант «mlflow.log_artifact». Это также было показано в репо.

Реестр Млфлов

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

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

Весь код можно найти по ссылке ниже.

Гитхаб код

Этот код основан на https://github.com/DataTalksClub/mlops-zoomcamp из этого курса.