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

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

I. Запустите экземпляр EC2 и установите MLflow

1. Запустите новый экземпляр EC2. Выберите Amazon Linux AMI:

2. Выберите экземпляр t2 micro:

3. Перейдите к шагу 6: Настройка группы безопасности. Разрешите SSH-соединение с вашего IP-адреса, чтобы настроить экземпляр и HTTP-соединения для взаимодействия с сервером отслеживания:

4. Просмотрите и запустите свой экземпляр.

5. Подключитесь к своему экземпляру с помощью SSH:

6. Установите MLflow:

sudo pip install mlflow

Понизьте версию dateutil, чтобы избежать конфликта версий с MLflow (см. Ветку https://github.com/snowflakedb/snowflake-sqlalchemy/issues/42):

sudo pip install -U python-dateutil==2.6.1

7. Проверить установку:

mlflow --help

II. Настроить сервер NGINX

8. Установите nginx и запустите сервер:

sudo yum install nginx
sudo service nginx start

9. Установите инструменты httpd, чтобы разрешить защиту паролем:

sudo yum install httpd-tools

10. Добавьте пароль для пользователя testuser:

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

11. Измените конфигурационный файл nginx:

sudo nano /etc/nginx/nginx.conf

добавить обратный прокси на порт 5000:

location / {
 proxy_pass https://localhost:5000/;
 auth_basic “Restricted Content”;
 auth_basic_user_file /etc/nginx/.htpasswd;
 }

12. Перезагрузите nginx:

sudo service nginx reload

13. Настройте учетные данные aws. (Здесь нам нужно перейти на более раннюю версию, чтобы избежать конфликта версий: https://github.com/aws/aws-cli/issues/3542):

sudo yum downgrade aws-cli.noarch python27-botocore
aws configure

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

14. Теперь запустим mlflow server. Сначала создайте корзину S3 для хранения моделей и артефактов:

15. Запустите сервер отслеживания MLflow. По умолчанию он будет использовать порт 5000:

mlflow server --default-artifact-root s3://test.bucket.for.mlflow/ --host 0.0.0.0

14. Теперь мы можем получить доступ к вашему серверу, используя его публичный DNS:

Http://ec2-52-53-184-209.us-west-1.compute.amazonaws.com/

15. Теперь мы можем использовать Python API для регистрации параметров, показателей и любых артефактов и сохранения их на нашем сервере отслеживания:

import mlflow
import numpy as np
import matplotlib.pyplot as plt
''' include user name and password to request '''
TRACKING_URI = 'https://testuser:[email protected]'
''' set up tracking uri '''
mlflow.set_tracking_uri(TRACKING_URI)
client = mlflow.tracking.MlflowClient(TRACKING_URI)
''' create plot that we will track as an artifact '''
x = np.linspace(0, 2*np.pi, num=100)
y = np.cos(x)
plt.plot(x,y)
plt.savefig('./test_picture.png')
''' log parameters, metrics and artifacts on server '''
with mlflow.start_run(experiment_id=0):
    mlflow.log_param('parameter', 1)
    mlflow.log_metric('metric', 2)
    mlflow.log_artifact('./test_picture.png')

Приведенный выше сценарий создаст следующую запись на сервере отслеживания:

Нажав на пробег, мы можем просмотреть сохраненный график: