Организация и отслеживание обучения и экспериментов по машинному обучению
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 .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.