paint-brush
Как настроить машину разработки с помощью MLFlow и MinIOк@minio
6,371 чтения
6,371 чтения

Как настроить машину разработки с помощью MLFlow и MinIO

к MinIO10m2023/11/03
Read on Terminal Reader
Read this story w/o Javascript

Слишком долго; Читать

В этом посте представлен простой в использовании рецепт настройки MLflow и MinIO на машине разработки.
featured image - Как настроить машину разработки с помощью MLFlow и MinIO
MinIO HackerNoon profile picture

О Млфлове

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


В качестве инструмента управления полным жизненным циклом MLflow содержит следующие компоненты.


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


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

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

Варианты установки

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


Вариант, который лучше всего подходит для организации, в которой есть несколько команд, использующих большие наборы данных и создающих модели, которые сами по себе могут стать довольно большими, показан ниже. Этот вариант требует настройки трех серверов — сервера отслеживания, базы данных PostgreSQL и хранилища объектов S3 — наша реализация будет использовать MinIO.


Варианты установки


Сервер отслеживания — это единая точка входа с компьютера инженера-разработчика для доступа к функциям MLflow. (Не обманывайтесь его названием — он содержит все перечисленные выше компоненты — отслеживание, модель, проекты и репозитории.) Сервер отслеживания использует PostgreSQL для хранения сущностей. Сущностями являются прогоны, параметры, метрики, теги, примечания и метаданные. (Подробнее о запусках позже.) Сервер отслеживания в нашей реализации обращается к MinIO для хранения артефактов. Примерами артефактов являются модели, наборы данных и файлы конфигурации.


Что хорошо в современных инструментах, доступных сегодня инженерам, так это то, что вы можете эмулировать производственную среду, включая выбор инструментов и подключение к сети, с помощью контейнеров. Именно это я и покажу в этом посте. Я покажу, как использовать Docker Compose для установки описанных выше серверов как сервисов, работающих в контейнере. Кроме того, конфигурация MLflow настроена таким образом, что при желании вы можете использовать существующий экземпляр MinIO. В этом посте я покажу, как развернуть новый экземпляр MinIO, но в файлах нашего репозитория Github есть файл docker-compose, который показывает, как подключиться к существующему экземпляру MinIO.

Что мы установим

Ниже приведен список всего, что необходимо установить. В этот список входят серверы, которые станут сервисами в контейнерах (MinIO, Postgres и MLFlow), а также необходимые вам SDK (MinIO и MLflow).


  1. Докер Рабочий стол

  2. Сервер отслеживания MLFlow через Docker Compose

  3. Сервер MinIO через Docker Compose

  4. PostgresSQL через Docker Compose

  5. MLFlow SDK через установку pip

  6. MinIO SDK через установку pip


Начнем с Docker Desktop, который будет служить хостом для наших сервисов Docker Compose.

Докер Рабочий стол

Вы можете найти подходящую установку для вашей операционной системы на сайте Docker. Если вы устанавливаете Docker Desktop на Mac, вам необходимо знать, какой чип использует ваш Mac — Apple или Intel. Вы можете определить это, щелкнув значок Apple в верхнем левом углу вашего Mac и выбрав пункт меню «Об этом Mac».


Теперь мы готовы установить наши сервисы.

Сервер MLFlow, Postgres и MinIO

Сервер отслеживания MLFLow, PostgresSQL и MinIO будут установлены как службы с использованием файла Docker Compose, показанного ниже.


 version: "3.3" services: db: restart: always image: postgres container_name: mlflow_db expose: - "${PG_PORT}" networks: - backend environment: - POSTGRES_USER=${PG_USER} - POSTGRES_PASSWORD=${PG_PASSWORD} - POSTGRES_DATABASE=${PG_DATABASE} volumes: - ./db_data:/var/lib/postgresql/data/ healthcheck: test: ["CMD", "pg_isready", "-p", "${PG_PORT}", "-U", "${PG_USER}"] interval: 5s timeout: 5s retries: 3 s3: restart: always image: minio/minio container_name: mlflow_minio volumes: - ./minio_data:/data ports: - "${MINIO_PORT}:9000" - "${MINIO_CONSOLE_PORT}:9001" networks: - frontend - backend environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_ADDRESS=${MINIO_ADDRESS} - MINIO_PORT=${MINIO_PORT} - MINIO_STORAGE_USE_HTTPS=${MINIO_STORAGE_USE_HTTPS} - MINIO_CONSOLE_ADDRESS=${MINIO_CONSOLE_ADDRESS} command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 tracking_server: restart: always build: ./mlflow image: mlflow_server container_name: mlflow_server depends_on: - db ports: - "${MLFLOW_PORT}:5000" networks: - frontend - backend environment: - AWS_ACCESS_KEY_ID=${MINIO_ACCESS_KEY} - AWS_SECRET_ACCESS_KEY=${MINIO_SECRET_ACCESS_KEY} - MLFLOW_S3_ENDPOINT_URL=http://s3:${MINIO_PORT} - MLFLOW_S3_IGNORE_TLS=true command: > mlflow server --backend-store-uri postgresql://${PG_USER}:${PG_PASSWORD}@db:${PG_PORT}/${PG_DATABASE} --host 0.0.0.0 --serve-artifacts --artifacts-destination s3://${MLFLOW_BUCKET_NAME} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${MLFLOW_PORT}/"] interval: 30s timeout: 10s retries: 3 volumes: db_data: minio_data: networks: frontend: driver: bridge backend: driver: bridge


Стоит отметить несколько вещей, которые помогут вам устранить проблемы, если что-то пойдет не так. Во-первых, и MinIO, и PostgreSQL используют локальную файловую систему для хранения данных. Для PostgreSQL это папка db_data, а для MinIO — папка minio_data. Если вы когда-нибудь захотите начать чистую установку заново, удалите эти папки.


Далее, этот файл Docker Compose управляется конфигурацией. Например, вместо жесткого кодирования имени базы данных PostgreSQL в `mlflow`, имя берется из файла `config.env`, показанного ниже, с использованием следующего синтаксиса в файле Docker Compose — `${PG_DATABASE}`.


 # Postgres configuration PG_USER=mlflow PG_PASSWORD=mlflow PG_DATABASE=mlflow PG_PORT=5432 # MLflow configuration MLFLOW_PORT=5000 MLFLOW_BUCKET_NAME=mlflow # MinIO access keys - these are needed by MLflow MINIO_ACCESS_KEY=XeAMQQjZY2pTcXWfxh4H MINIO_SECRET_ACCESS_KEY=wyJ30G38aC2UcyaFjVj2dmXs1bITYkJBcx0FtljZ # MinIO configuration MINIO_ROOT_USER: 'minio_user' MINIO_ROOT_PASSWORD: 'minio_pwd' MINIO_ADDRESS: ':9000' MINIO_STORAGE_USE_HTTPS: False MINIO_CONSOLE_ADDRESS: ':9001' MINIO_PORT=9000 MINIO_CONSOLE_PORT=9001


Все переменные среды, необходимые этим службам, настраиваются в этом файле. Этот файл конфигурации также содержит информацию, необходимую для взаимодействия этих служб друг с другом. Обратите внимание, что именно использование переменных среды сообщает серверу отслеживания MLFlow, как получить доступ к MinIO. Другими словами, URL-адрес (включая номер порта), ключ доступа, секретный ключ доступа и сегмент. Это подводит меня к моему последнему и самому важному моменту об использовании Docker Compose: при первом запуске этих сервисов службы отслеживания MLflow не будут работать, потому что вам нужно будет сначала войти в пользовательский интерфейс MinIO, получить ключи и создать корзину. который служба отслеживания будет использовать для хранения артефактов.


Давайте сделаем это сейчас. Запустите службы в первый раз, используя команду ниже.


 docker-compose --env-file config.env up -d --build


Убедитесь, что вы запускаете эту команду в том же каталоге, где находится ваш файл Docker Compose.


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

Консоль MinIO

В браузере перейдите по адресу «localhost:9001». Если вы указали другой порт для адреса консоли MinIO в файле docker-compose, используйте вместо него этот порт. Войдите в систему, используя пользователя root и пароль, указанные в файле config.env.


После входа в систему перейдите на вкладку «Ключи доступа» и нажмите кнопку «Создать ключ доступа».


Вкладка «Ключи доступа»


Вы попадете на страницу «Создать ключ доступа».


Страница создания ключа доступа



Ваш ключ доступа и секретный ключ не сохраняются, пока вы не нажмете кнопку «Создать». Не уходите с этой страницы, пока это не будет сделано. Не беспокойтесь о копировании ключей с этого экрана. После того, как вы нажмете кнопку «Создать», вам будет предоставлена возможность загрузить ключи в вашу файловую систему (в файле JSON). Если вы хотите использовать MinIO SDK для управления необработанными данными, создайте еще один ключ доступа и секретный ключ, пока вы находитесь на этой странице.


Создание ключа доступа


Затем создайте корзину с именем mlflow. Это просто: перейдите на вкладку «Корзины» и нажмите кнопку «Создать сегмент».


Получив ключи и создав корзину, вы можете завершить настройку служб, остановив контейнеры, обновив config.env, а затем перезапустив контейнеры. Команда ниже остановит и удалит ваши контейнеры.


 docker-compose down


Заново:

 docker-compose --env-file config.env up -d --build


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

Запуск пользовательского интерфейса MLflow

Перейдите к `localhost:5000`. Вы должны увидеть пользовательский интерфейс MLflow.


Запуск пользовательского интерфейса MLflow


Потратьте некоторое время, чтобы изучить все вкладки. Если вы новичок в MLflow, ознакомьтесь с концепцией запусков и экспериментов.


  • Запуск — это проход по вашему коду, в результате которого обычно создается обученная модель.
  • Эксперименты — это способ пометить связанные запуски, чтобы вы могли видеть их сгруппированными в пользовательском интерфейсе MLflow. Например, вы могли обучить несколько моделей с использованием разных параметров, пытаясь добиться максимальной точности (или производительности). Пометка этих запусков одинаковым названием эксперимента сгруппирует их на вкладке «Эксперименты».

Установите пакет Python MLflow.

Пакет MLflow Python представляет собой простую установку через pip. Я рекомендую установить его в виртуальной среде Python.


 pip install mlflow


Дважды проверьте установку, перечислив библиотеку MLflow.


 pip list | grep mlflow


Вы должны увидеть библиотеку ниже.


 mlflow 2.5.0

Установите пакет MinIO Python.

Вам не требуется прямой доступ к MinIO, чтобы воспользоваться преимуществами функций MLflow — MLflow SDK будет взаимодействовать с экземпляром MinIO, который мы настроили выше. Однако вы можете захотеть напрямую взаимодействовать с этим экземпляром MinIO, чтобы управлять данными, прежде чем они будут переданы в MLflow. MinIO — отличный способ хранить всевозможные неструктурированные данные. MinIO полностью использует базовое оборудование, поэтому вы можете сохранять все необходимые необработанные данные, не беспокоясь о масштабировании или производительности . MinIO включает функции репликации сегментов для синхронизации данных в нескольких местах. Кроме того, когда-нибудь ИИ будет регулироваться; когда этот день наступит, вам понадобятся корпоративные функции MinIO ( блокировка объектов , управление версиями , шифрование и юридические блокировки ), чтобы защитить ваши хранящиеся данные и убедиться, что вы случайно не удалите что-то, что может запросить регулирующий орган.


Если вы установили пакет Python MLflow в виртуальной среде, установите MinIO в той же среде.


 pip install minio


Дважды проверьте установку.

 pip list | grep minio


Это подтвердит, что библиотека Minio установлена, и отобразит используемую вами версию.

 minio 7.1.15

Краткое содержание

В этом посте представлен простой рецепт настройки MLflow и MinIO на машине разработки. Целью было сэкономить ваше время и усилия на исследовании серверов MLflow и конфигурации docker-compose.


Было приложено все усилия, чтобы сохранить точность этого рецепта. Если у вас возникнет проблема, сообщите нам об этом, написав нам по адресу [email protected] или присоединившись к обсуждению на нашем общем канале Slack .


Вы готовы начать кодирование и обучение моделей с помощью MLflow и MinIO.


Также опубликовано здесь .