Как стать автором
Обновить
85.61
Первая грузовая компания (ПГК)
Крупнейшая цифровая логистическая компания на ж/д

Введение в MLflow: настройка и запуск

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров400

Привет, Хабр! Я Александр Кузьмичёв, специалист по анализу данных и машинному обучению в ПГК Диджитал. Мы в компании занимаемся разработкой цифровых продуктов для железнодорожных грузоперевозок. Ранее я рассказывал о том, как открытая платформа MLflow помогает нам в работе.

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

Сегодня мы заложим фундамент, начнём с вводной статьи.  Я расскажу, как установить и настроить MLflow, а также как опубликовать его с доступом в интернет. Это пригодится для мини- и пет-проектов. В дальнейшем добавлю функционал по логированию, что значительно упростит процесс работы с моделями.

Что потребуется:

  • Docker

  • Statics IP- статический (неизменяемый внешний) IP

  • Internet

  • Free space ~40gb

Что получим:

  • MLflow

  • Jupyter

  • Minio

  • Mysql

  • Настроенные пути к портам

  • Логин и пароли для моделей

Путь к установке

Для начала нам нужно установить Docker – программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации. Docker позволит нам использовать готовые образы и настроить их под нас. Для публикации экспериментов в сеть нужно приобрести статический IP у вашего интернет-провайдера.

После установки Docker нам также потребуется настроить роутер, а именно – привязать MAC-адрес к определённому IP (192.168.0.151). Выбор пал на этот IP, так как технически проще работать с одним фиксированным адресом. В дальнейшем наш внешний IP будет привязан именно к нему.

Установка MLflow:

Мы постарались сделать процесс сборки по запуску максимально простым — «в один клик».

1.     Покупаем статический IPадрес у провайдера

2.     Привязываем MAC-адрес ПК к IP (192.168.0.151)

3.     Устанавливаем Docker (https://www.docker.com/)

4.     Клонируем проект (https://github.com/Triumrus/Mlflow-server-on-windows)

5.     Запускаем mlflow-docker-compose\start-mlflow.bat (Ждём, когда установит и скачает все программы)

6.     После выполнения и установок закрываем и ещё раз запускаем mlflow-docker-compose\start-mlflow.bat, где он уже запустит сервера

Запуск и остановка серверов

  • Запуск - mlflow-docker-compose\start-mlflow.bat 

  • Остановка - mlflow-docker-compose\stop-mlflow.bat,

URL

Внешний адрес можно узнать на 2ip.ru
@ Пример: 81.88.208.255

Логины и пароли (по умолчанию)

  • Minio и Mysql

Файл .env - устанавливаем свои логин и пароль.

По умолчанию

AWS_ACCESS_KEY_ID=minio
AWS_SECRET_ACCESS_KEY=minio123
MYSQL_DATABASE=mlflow_database
MYSQL_USER=mlflow_user
MYSQL_PASSWORD=mlflow
MYSQL_ROOT_PASSWORD=mysql
  • MLflow и модели

Файл Caddyfile - устанавливаем свои логин и пароль.

По умолчанию

# mlflow
admin looChaekie9Eitow

# jupyter
# Порты для публикации моделей
#Port Login Password 
8001 admin Aiquoos5ahNgai8o
8002 admin aZee2eeshuth7qua
8003 admin Nai8shohj2ki6Cei

Настройка IP-роутера

  • В роутере за ПК закрепить IP (192.168.0.151)

  • Настроить переадресацию внешнего IP на ваш.

  • Заменить 81.88.208.255 на ваш.

Пример в роутере TP-Link Archer C1200
Пример в роутере TP-Link Archer C1200
Пример в роутере TP-Link Archer C1200
Пример в роутере TP-Link Archer C1200
Пример в роутере TP-Link Archer C1200
Пример в роутере TP-Link Archer C1200

Настройка антивируса/защиты

  • Добавить исключения в антивирус. Добавляем MLflow и порт для каждой модели.

  • Брандмауэр
    Брандмауэр защитника Windows → Дополнительные параметры → Правило для входящих подключений → Создать правило → Для порта → Далее → Протокол TCP → Определенные локальные порты → Вписываем 5000,8001–8003,9000,9001 → Далее → Далее → Далее → Вписываем имя mlflow — Готово

    • Брандмауэр
      Брандмауэр защитника Windows → Дополнительные параметры → Правило для входящих подключений → Создать правило → Для порта → Далее → Протокол TCP → Определенные локальные порты → Вписываем 5000,8001–8003,9000,9001 → Далее → Далее → Далее → Вписываем имя mlflow — Готово

    • Брандмауэр
      Брандмауэр защитника Windows → Дополнительные параметры → Правило для входящих подключений → Создать правило → Для порта → Далее → Протокол TCP → Определенные локальные порты → Вписываем 5000,8001–8003,9000,9001 → Далее → Далее → Далее → Вписываем имя mlflow — Готово

    Брандмауэр
    Брандмауэр защитника Windows → Дополнительные параметры → Правило для входящих подключений → Создать правило → Для порта → Далее → Протокол TCP → Определенные локальные порты → Вписываем 5000,8001–8003,9000,9001 → Далее → Далее → Далее → Вписываем имя mlflow — Готово

  • Брандмауэр
    Брандмауэр защитника Windows → Дополнительные параметры → Правило для входящих подключений → Создать правило → Для порта → Далее → Протокол TCP → Определенные локальные порты → Вписываем 5000,8001–8003,9000,9001 → Далее → Далее → Далее → Вписываем имя mlflow — Готово

    • Брандмауэр
      Брандмауэр защитника Windows -> Дополнительные параметры -> Правило для входящих подключений -> Создать правило -> Для порта -> Далее -> Протокол TCP -> Определенные локальные порты -> Вписываем 5000,8001-8003,9000,9001 -> Далее -> Далее -> Далее -> Вписываем имя mlflow - Готово

    • Добавление дополнительных портов (модели/streamlit/другое)

    Добавление порта в сетевой доступ

    При желании добавить ещё одну модель или приложение с сетевым доступом, надо её повесить на порт, например, 8004 

    В docker-compose.yml
    В строке 11

    Добавляем нужные порты

        caddy:
            image: caddy:latest
            container_name: caddy-container
            volumes:
                - ./Caddyfile:/etc/caddy/Caddyfile
            restart: unless-stopped
            ports:
                - "5000:5000"
                - "8001:8001"
                - "8002:8002"
                - "8003:8003"
                - "2019:2019"
                - "8004:8004" #Добавили нужный порт
    

    В строке 93
    Добавляем нужные порты

    jupyter:
            build:
              context: .
              dockerfile: ./docker/jupyter/Dockerfile
            container_name: jupyter
            volumes:
              - ./jovyan:/home/jovyan
              - ./credentials:/home/jovyan/.aws/credentials
            ports:
              - 8888:8888
            expose:
              - "8001"
              - "8002"
              - "8003"
              - "8004" #Добавили нужный порт
            command: "start-notebook.sh --NotebookApp.token="
    

    В файл Caddyfile

    В конце добавляем

    # Доступ из локальной сети без авторизации
    http://192.168.0.151:8004 {
        reverse_proxy jupyter:8004
    }
    
    # /----------/
    # Доступ из сети без авторизации
    http://81.88.210.241:8004 {
        reverse_proxy jupyter:8004
    }
    
    # ИЛИ
    
    # # Доступ из сети С авторизаций.
    # Добавляет авторизацию
    # Пароль можно зашифровать в DOCKER в контейнере "caddy-container"
    # Команда : caddy hash-password
    http://81.88.210.241:8004 {
        basic_auth {
            admin $2a$14$QN7CZ4aQ7Hpy9EKTImI/eetKvZPk6T.pP/31EvQmKJ8/E/IoTfFbS
        }
        reverse_proxy jupyter:8004
    }
    # /----------/
    

    + в Роутере, Антивирусе, Брандмауэре прописать как ранее показывалось.

    Автоматизация процессов

    Теперь давайте немного поговорим о том, как можно автоматизировать некоторые процессы в MLflow.

    Остановимся на области в красном квадрате на схеме.

    1. Хранение слепка данных: На этапе логирования и сохранения моделей важно иметь возможность восстановить эксперименты и провести повторное тестирование. Рекомендуем сохранять md5 или hash строк и/или таблицы — это займёт немного места и в случае восстановления эксперимента поможет отслеживать изменения: были ли изменения – да или нет.

    2. Фичи и модели: При длительной работе над проектом создаётся огромное количество фичей и разнообразных подходов используемых моделей. И всегда остаётся вероятность, что «не сыгравшая» фича, «сыграет» при новой модели или в комбинации с другой фичей.

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

    3. Аналитический отчёт: Формируйте аналитические отчёты для каждой модели в формате .md. Это позволит ответить на многие вопросы о модели без необходимости глубокого погружения в неё.

    4. Интеграция с GitLab: отслеживайте в MLflow, какая сборка проекта была использована.

    Надеемся, что статья сможет стать полезной отправной точкой для ваших экспериментов с MLflow. Далее расскажем о теории и практике отбора признаков через Optuna и свяжем с MLflow, AutoML.

Теги:
Хабы:
0
Комментарии0

Публикации

Информация

Сайт
pgk.ru
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия