Команды специалистов по обработке и анализу данных часто сталкиваются с проблемами, когда дело доходит до эффективного управления их экспериментами по машинному обучению. Хотя блокноты Jupyter широко используются, полагаться на них или электронные таблицы для хранения результатов экспериментов может стать слишком сложно и затруднить совместную работу членов команды. Это особенно верно при работе с несколькими гиперпараметрами, различными архитектурами моделей, развивающимися источниками данных и многочисленными метриками. Такой подход ставит под угрозу воспроизводимость и затрудняет сравнение экспериментов.

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

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

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

Теперь давайте пройдемся по шагам, чтобы настроить его:

Шаг 1. Настройте корзину Amazon S3 для хранения артефактов

Войдите в Консоль управления AWS и перейдите к сервису S3. Нажмите кнопку «Создать корзину», чтобы начать создание новой корзины. В поле «Имя корзины» укажите глобально уникальное имя для вашей корзины.

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

Шаг 2. Запустите экземпляр EC2 для удаленного сервера отслеживания

Чтобы начать запуск экземпляра EC2 для размещения удаленного сервера отслеживания, войдите в Консоль управления AWS и перейдите к сервису EC2. Нажмите кнопку «Запустить экземпляры» и присвойте имя своему экземпляру.

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

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

Найдите и выберите только что созданную пару ключей в раскрывающемся меню. Наконец, нажмите «Запустить экземпляр», чтобы инициировать запуск экземпляра EC2.

После создания экземпляра найдите имя группы безопасности VPC в разделе «Безопасность». Нажмите на группу безопасности, и вы найдете опцию «Редактировать входящие правила».

Оттуда нажмите «Добавить правило», выберите порт «5000» и выберите «Везде» или «0.0.0.0/0» в качестве «Источника». Затем нажмите «Сохранить правила». Это добавит порт MLflow в группу безопасности экземпляра EC2, что позволит вам получить доступ к пользовательскому интерфейсу MLflow с любого IP-адреса.

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

Далее мы создадим роль IAM, которая предоставит экземпляру необходимые разрешения. Для этого перейдите в консоль IAM и выберите «Роли» в меню слева. Нажмите на кнопку «Создать роль», чтобы продолжить. В разделе «Выберите тип доверенного объекта» выберите «Сервис AWS» в качестве типа доверенного объекта и выберите «EC2» в качестве варианта использования. Перейдите к следующему шагу и выберите следующие две политики разрешений: «AmazonS3FullAccess» и «AmazonRDSFullAccess».

Теперь перейдите к следующему шагу и укажите имя и описание этой новой роли IAM. Наконец, нажмите кнопку «Создать роль», чтобы создать роль IAM.

Теперь перейдите на панель мониторинга экземпляра EC2 и выполните следующие действия. Нажмите «Действия», затем выберите «Безопасность» и выберите «Изменить роль IAM». В раскрывающемся меню найдите и выберите только что созданную роль IAM. Наконец, нажмите «Обновить роль IAM», чтобы привязать роль к экземпляру EC2.

Это позволит напрямую взаимодействовать с различными сервисами и ресурсами AWS из инстанса EC2, избавляя от необходимости повторно вводить учетные данные.

Шаг 3. Настройте экземпляр Amazon RDS с PostgreSQL в качестве серверного хранилища MLflow

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

В разделе «Настройки» укажите уникальный идентификатор экземпляра БД и укажите главное имя пользователя и пароль для базы данных. Обязательно запишите их, так как они понадобятся на шаге 4, когда мы запустим сервер отслеживания MLflow.

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

После создания экземпляра RDS найдите имя группы безопасности VPC в разделе «Подключение и безопасность».

Нажмите на группу безопасности, перейдите к деталям и нажмите «Изменить правила для входящих подключений».

Оттуда нажмите «Добавить правило», выберите «PostgreSQL» в качестве типа, а затем выберите группу безопасности экземпляра EC2, который мы создали выше.

Наконец, нажмите «Сохранить правила». Это добавит порт PostgreSQL (5432) в группу безопасности экземпляра RDS. Делая это, мы гарантируем, что входящие соединения на этом порту разрешены, обеспечивая соединение между экземпляром RDS и сервером отслеживания MLflow.

Шаг 4. Установите MLflow и запустите сервер удаленного отслеживания

Во-первых, нам нужно подключиться к созданному экземпляру EC2. Для этого выберите «Подключиться» и выберите «Подключение экземпляра EC2» в качестве метода подключения.

Это откроет SSH-соединение на основе браузера в консоли, обеспечивая безопасный доступ к экземпляру EC2. После подключения мы можем приступить к установке MLflow и других необходимых пакетов в консоли.

sudo yum -y install python-pip
pip3 install mlflow boto3 psycopg2-binary

Теперь, чтобы запустить сервер MLflow, выполните следующую команду:

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

Примечание. Вы найдете значение DB_ENDPOINT в разделе «Подключение и безопасность» вашего экземпляра RDS.

После выполнения команды вы должны увидеть сообщение, подтверждающее запуск сервера MLflow.

Шаг 5. Получите доступ к пользовательскому интерфейсу сервера удаленного отслеживания MLflow

Чтобы убедиться, что сервер удаленного отслеживания MLflow работает, вы можете получить доступ к его пользовательскому интерфейсу (UI) через веб-браузер. Для этого найдите URL-адрес экземпляра EC2, на котором размещен сервер MLflow:

Получив URL-адрес, откройте новую вкладку в веб-браузере и введите URL-адрес. Добавьте «: 5000» в конец URL-адреса, чтобы указать порт сервера MLflow. Это позволит вам получить доступ к пользовательскому интерфейсу удаленного сервера отслеживания MLflow, предоставляя вам инструменты для отслеживания экспериментов и управления ими.

Теперь давайте рассмотрим пример кода Python, который демонстрирует, как создавать и отслеживать эксперименты с помощью MLflow:

Если вы собираетесь выполнять код MLflow за пределами среды AWS, например в вашей локальной системе, вам необходимо сначала настроить интерфейс командной строки AWS, выполнив следующую команду в терминале:

aws configure

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

Чтобы получить идентификатор ключа доступа AWS и секретный ключ доступа:

В правом верхнем углу консоли вы увидите свое имя или идентификатор учетной записи. Нажмите здесь. Выберите «Мои учетные данные безопасности». В разделе «Ключи доступа» вы найдете существующие ключи доступа, связанные с пользователем. Если вам нужно создать новый ключ доступа, нажмите на кнопку «Создать ключ доступа». Это создаст новый идентификатор ключа доступа и секретный ключ доступа для пользователя.

После того, как вы настроили AWS CLI с вашими учетными данными, вы можете продолжить с кодом ниже:

import os

import mlflow
from mlflow.tracking import MlflowClient

# Specify Public URL of EC2 instance where the MLflow tracking server is running
TRACKING_SERVER_HOST = "ec2-18-234-201-70.compute-1.amazonaws.com"

mlflow.set_tracking_uri(f"http://{TRACKING_SERVER_HOST}:5000") 
print(f"Tracking Server URI: '{mlflow.get_tracking_uri()}'")

#specify name of experiment (will be created if it does not exist)
mlflow.set_experiment("my-test-exp")
import mlflow.sklearn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

# Load the sample dataset
data = load_iris()
X, y = data.data, data.target

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Enable MLflow autologging
mlflow.sklearn.autolog()

# Define a dictionary of classification models
models = {
    "Logistic Regression": LogisticRegression(),
    "Decision Tree": DecisionTreeClassifier(),
    "Random Forest": RandomForestClassifier()
}

# Train and log each classification model
for model_name, model in models.items():

    with mlflow.start_run():

        # Set the tag for name of user who ran the experiment
        mlflow.set_tag("User", "Chirag Daryani")
        
        # Train the model
        model.fit(X_train, y_train)
        
        # Evaluate the model on the test set
        accuracy = model.score(X_test, y_test)
        
        # Log model metrics
        mlflow.log_metric("Accuracy", accuracy)

        print(f"Artifacts URI: '{mlflow.get_artifact_uri()}'")

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

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

Обратите внимание:

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

Сообщите мне, понравился ли вам этот пост и есть ли у вас какие-либо вопросы или предложения в поле для ответов ниже.

Свяжитесь со мной по адресу: https://www.linkedin.com/in/chiragdaryani/