Организация и отслеживание обучения и экспериментов по машинному обучению

MLOPs — это растущая и важная область в области машинного обучения. Я работаю в Data Science и Medium уже несколько лет и никогда не видел такого взрыва инструментов в этой области, от MLFlow до SageMaker Pipelines.

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

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

ПРИМЕЧАНИЕ. В этой статье предполагается базовое знание конкретных подфункций AWS и SageMaker, таких как Studio (пользовательский интерфейс SageMaker), и взаимодействие с SageMaker и AWS в целом с помощью SageMaker Python SDK и Boto3 AWS Python SDK. . В этой статье мы не будем сосредотачиваться на построении модели, но будем использовать платформу Sklearn для создания образца модели.

Настраивать

Для разработки мы будем работать в консоли SageMaker Studio с ядром обработки данных ml.t3.medium. Это адаптированный пользовательский интерфейс для SageMaker, который также поставляется с множеством предварительно созданных образов для популярных платформ и типов вычислительных экземпляров, поддерживающих блокноты. Вы можете запустить эту записную книжку локально в своей собственной среде, но функции пользовательского интерфейса Studio помогут вам визуализировать эксперименты SageMaker, поэтому настоятельно рекомендуется работать в этой среде.

Для работы с SageMaker нам понадобятся два основных пакета: SageMaker Python SDK и Boto3 AWS Python SDK. SageMaker Python SDK содержит новейшие и самые простые способы взаимодействия с функцией SageMaker Experiments.

# update boto3 and sagemaker to ensure latest SDK version
import sys
!{sys.executable} -m pip install --upgrade pip
!{sys.executable} -m pip install --upgrade boto3
!{sys.executable} -m pip install --upgrade sagemaker

Затем мы можем импортировать необходимые библиотеки для работы с SageMaker Experiments.

import os
import boto3
import json
import sagemaker
from sagemaker.session import Session
from sagemaker import get_execution_role
from sagemaker.experiments.run import Run
from sagemaker.experiments import load_run
from sagemaker.utils import unique_name_from_base

Объект «Выполнить» — это то, что мы будем инициализировать для нашего эксперимента SageMaker. Это будет обсуждаться далее, когда мы приступим к запуску наших экспериментов. Далее настраиваем все необходимые клиенты для работы с AWS и SageMaker.

sagemaker_session = Session()
boto_sess = boto3.Session()
role = get_execution_role()
default_bucket = sagemaker_session.default_bucket()
sm = boto_sess.client("sagemaker")
region = boto_sess.region_name

Набор данных

В нашем примере мы будем работать с набором данных регрессии потребления бензина от Kaggle. Исходный источник данных лицензирован здесь.

Предварительная обработка данных и построение модели

Мы можем загрузить этот пример набора данных в нашу среду Studio и визуализировать нашу файловую систему на стороне консоли.

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

import pandas as pd
df = pd.read_csv("petrol_consumption.csv")
df.head()

#split model data
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor

X = df.drop('Petrol_Consumption', axis = 1)
y = df['Petrol_Consumption']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
sc = StandardScaler()
X_train = sc.fit_transform(X_train) 
X_test = sc.transform(X_test)

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

#Model Building
samp_estimators = 10
regressor = RandomForestRegressor(n_estimators=samp_estimators)
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)

Мы также можем оценить модель с помощью показателя RMSE.

from sklearn.metrics import mean_squared_error
print(mean_squared_error(y_test,y_pred,squared=False))

Теперь, когда мы знаем, что у нас есть цикл обучения и модель, давайте сосредоточимся на настройке SageMaker Experiments.

Эксперименты с SageMaker

В новых обновленных экспериментах SageMaker Experiments есть два основных объекта, на которых мы хотим сосредоточиться:

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

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

В нашем случае с моделью случайного леса мы не будем усложнять: один гиперпараметр, который мы хотим отслеживать и настраивать, — это количество оценок, которые мы передаем. Давайте сначала определим имя нашего эксперимента, а затем также диапазон оценок, которые мы хотим оценивать против.

# Define variables for experiment name and rf estimators
experiment_name = "sm-experiments-sample-sklearn"
estimators = [10, 20, 30, 40, 50]

Теперь мы перебираем эти различные оценки и создаем прогон для каждого значения этого гиперпараметра.

for est in enumerate(estimators):
    run_name = f"run-{est[0]}"

В цикле основным вызовом, который мы делаем для экспериментов, является вызов API load_run. Здесь мы инициализируем эксперимент, поскольку в данном случае его еще нет, а также пять прогонов для каждого из значений гиперпараметров, которые попадут под этот эксперимент.

with load_run(
        experiment_name=experiment_name, run_name=run_name, sagemaker_session=Session()
    ) as run:

В этом блоке мы можем определить нашу функцию обучения, которую мы определили ранее. Здесь также есть несколько других ключевых вызовов API, которые вы можете использовать: log_metric и log_parameter. Как видно из названия, их можно использовать для отслеживания ключевых параметров и показателей, которые вы хотите получить из своих циклов обучения. Здесь мы зафиксируем значение нашей оценки в качестве параметра и RMSE для этого запуска в качестве метрики.

run.log_parameter("estimators", est[1])
regressor = RandomForestRegressor(n_estimators=est[1])
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
run.log_metric(name = "RMSE", value = mean_squared_error(y_test,y_pred,squared=False))

Вы также можете захватывать любые ключевые файлы или артефакты с помощью log_artifact и log_run. После запуска этой ячейки мы можем перейти к пользовательскому интерфейсу SageMaker Experiments в Studio, чтобы визуализировать то, что мы только что построили.

Здесь мы видим, что наш эксперимент создан.

Если мы посмотрим на конкретный эксперимент, мы сможем увидеть различные прогоны, которые мы проводили.

В каждом запуске мы можем видеть наши метрики и параметры, которые мы зафиксировали с помощью наших вызовов API регистрации.

Мы также можем построить и сравнить все эти различные прогоны, если отметим их и перейдем на вкладку «Анализ». В этом случае давайте сделаем гистограмму, чтобы понять, как наши модели работали при каждом значении гиперпараметра оценки.

Кредиты/дополнительные ресурсы

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

Заключение



Полный код примера можно найти по ссылке выше. Я надеюсь, что эта статья была полезным руководством для начала работы с SageMaker Experiments. Для специалистов по данным как никогда важно ознакомиться с областью MLOps, и SageMaker Experiments — это мощный инструмент, который можно использовать в этой области.

Если вам понравилась эта статья, не стесняйтесь связаться со мной в LinkedIn и подписаться на мою Информационную рассылку. Если вы новичок в Medium, зарегистрируйтесь с помощью моего Реферала для участников.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.