Команды специалистов по обработке и анализу данных часто сталкиваются с проблемами, когда дело доходит до эффективного управления их экспериментами по машинному обучению. Хотя блокноты 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/