В процессе настройки модели машинного обучения важно отслеживать результаты экспериментов, гиперпараметры и обученные модели. 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')
Приведенный выше сценарий создаст следующую запись на сервере отслеживания:
Нажав на пробег, мы можем просмотреть сохраненный график: