AWS Sagemaker:

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

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

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

Сейчас мы увидим, как обучить, протестировать и развернуть модель машинного обучения с помощью AWS Sagemaker (используя бесплатные ресурсы шины).

Шаги включают

  1. Создание экземпляра блокнота SageMaker
  2. Подготовьте данные
  3. Обучите модель учиться на данных
  4. Разверните модель
  5. Оцените производительность вашей модели машинного обучения

В целях обучения мы будем использовать Набор банковских маркетинговых данных. Этот сбор данных включает подробную информацию о демографии клиентов, реакции на маркетинговые кампании и внешние переменные. Для вашего удобства данные пронумерованы, а в столбце набора данных указано, подписался ли клиент на услугу, предоставляемую банком.

Шаг 1:

Вход в Консоль управления AWS

Ссылка: https://aws.amazon.com/console/

Войдите в свою учетную запись или создайте, а затем войдите в систему как пользователь Root.

Затем в меню поиска найдите Amazon SageMaker.

Измените регион на Западная часть США (Орегон) (вы можете использовать другие регионы, также это зависит от требований к задержке и доступности сервисов AWS, которые вы планируете использовать).

Шаг 2. Создание экземпляра Notebook в AWS SageMaker.

Прокрутите вправо и выберите Блокнот → Экземпляр блокнота → Создать экземпляр блокнота.

Имя экземпляра Notebook: укажите уникальное имя проекта

Тип экземпляра Notebook: ml.t2.medium (зависит от использования)

Упругий вывод, оставьте значение по умолчанию "Нет".

Идентификатор платформы, оставьте значение по умолчанию.

Теперь создайте роль IAM

Выберите «Создать новую роль» в разделе «Роль IAM» в разделе «Разрешения и шифрование», затем выберите «Создать роль».

Затем выберите любую корзину S3 и нажмите «Создать роль».

Затем оставьте все настройки как есть и нажмите «Создать экземпляр блокнота».

Шаг 3: Подготовка данных

Выберите «Открыть», откройте Jupyter, а затем в Jupyter выберите «Создать», а затем выберите «conda_python3».

После создания экземпляра блокнота измените имя на изображении ниже: «Развертывание проекта машинного обучения в AWS Sagemaker».

Теперь мы импортируем необходимые библиотеки.

# import libraries
import boto3, re, sys, math, json, os, sagemaker, urllib.request
from sagemaker import get_execution_role
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import Image
from IPython.display import display
from time import gmtime, strftime
from sagemaker.predictor import csv_serializer

# Define IAM role
role = get_execution_role()
prefix = 'sagemaker/DEMO-xgboost-dm'
my_region = boto3.session.Session().region_name # set the region of the instance

# this line automatically looks for the XGBoost image URI and builds an XGBoost container.
xgboost_container = sagemaker.image_uris.retrieve("xgboost", my_region, "latest")

print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + xgboost_container + " container for your SageMaker endpoint.")

Теперь нам нужно создать корзину S3 для хранения наших данных, приведенный ниже код поможет вам создать корзину S3 с помощью кода.

bucket_name = 'mlprojectmitaoe' # <--- CHANGE THIS VARIABLE TO A UNIQUE NAME FOR YOUR BUCKET
s3 = boto3.resource('s3')
try:
    if  my_region == 'us-east-1':
      s3.create_bucket(Bucket=bucket_name)
    else: 
      s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })
    print('S3 bucket created successfully')
except Exception as e:
    print('S3 error: ',e)

Вывод приведенного выше кода

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

try:
  urllib.request.urlretrieve ("https://d1.awsstatic.com/tmt/build-train-deploy-machine-learning-model-sagemaker/bank_clean.27f01fbbdf43271788427f3682996ae29ceca05d.csv", "bank_clean.csv")
  print('Success: downloaded bank_clean.csv.')
except Exception as e:
  print('Data load error: ',e)

try:
  model_data = pd.read_csv('./bank_clean.csv',index_col=0)
  print('Success: Data loaded into dataframe.')
except Exception as e:
    print('Data load error: ',e)

Теперь мы перемешаем и разделим данные на обучающие и тестовые данные.

train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))])
print(train_data.shape, test_data.shape)

Данные обучения (70% клиентов) используются во время обучения модели, а остальные (30% клиентов), которые используются в качестве тестовых данных, используются для оценки производительности модели.

Теперь мы будем обучать модель ML

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

pd.concat([train_data['y_yes'], train_data.drop(['y_no', 'y_yes'], axis=1)], axis=1).to_csv('train.csv', index=False, header=False)
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('train.csv')
s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')

Приведенный ниже код устанавливает сеанс Amazon SageMaker, создает экземпляр модели XGBoost (оценщик) и указывает гиперпараметры для модели.

sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(xgboost_container,role, instance_count=1, instance_type='ml.m4.xlarge',output_path='s3://{}/{}/output'.format(bucket_name, prefix),sagemaker_session=sess)
xgb.set_hyperparameters(max_depth=5,eta=0.2,gamma=4,min_child_weight=6,subsample=0.8,silent=0,objective='binary:logistic',num_round=100)

Код использует градиентную оптимизацию для обучения модели на экземпляре ml.m4.xlarge. Через некоторое время вы увидите создание журналов тренировок в своем блокноте Jupyter.

xgb.fit({'train': s3_input_train})

Шаг 4. Разверните модель

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

xgb_predictor = xgb.deploy(initial_instance_count=1,instance_type='ml.m4.xlarge')

Чтобы определить, подписались ли клиенты в тестовых данных на банковский продукт или нет, вставьте предоставленный код в следующую ячейку кода и выберите «Выполнить».

from sagemaker.serializers import CSVSerializer

test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array
xgb_predictor.serializer = CSVSerializer() # set the serializer type
predictions = xgb_predictor.predict(test_data_array).decode('utf-8') # predict!
predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array
print(predictions_array.shape)

Шаг 6. Оцените производительность модели

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

cm = pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])
tn = cm.iloc[0,0]; fn = cm.iloc[1,0]; tp = cm.iloc[1,1]; fp = cm.iloc[0,1]; p = (tp+tn)/(tp+tn+fp+fn)*100
print("\n{0:<20}{1:<4.1f}%\n".format("Overall Classification Rate: ", p))
print("{0:<15}{1:<15}{2:>8}".format("Predicted", "No Purchase", "Purchase"))
print("Observed")
print("{0:<15}{1:<2.0f}% ({2:<}){3:>6.0f}% ({4:<})".format("No Purchase", tn/(tn+fn)*100,tn, fp/(tp+fp)*100, fp))
print("{0:<16}{1:<1.0f}% ({2:<}){3:>7.0f}% ({4:<}) \n".format("Purchase", fn/(tn+fn)*100,fn, tp/(tp+fp)*100, tp))

Шаг 6: Очистите все ресурсы.

На этом шаге вы отключаете ресурсы, которые использовали в этом блоге.

xgb_predictor.delete_endpoint(delete_endpoint_config=True)

Удалите свои тренировочные артефакты и корзину S3.

bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)
bucket_to_delete.objects.all().delete()

После этого шага вы можете остановить и удалить блокнот SageMaker.

Заключение

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

Спасибо за чтение !!

Ссылка на набор данных и код: https://github.com/SanchitAgarkar/Deploy-Machine-Learning-Project-on-AWS-Sagemaker.

Ссылка для введения в машинное обучение:

https://medium.com/@sanchitsagarkar03/introduction-to-machine-learning-e5291029a2ce

Ссылка для машинного обучения: благо или проклятие?

https://medium.com/@sanchitsagarkar03/machine-learning-boon-or-curse-a32a7006aab

Ссылка на автономный и онлайн-режим обучения Модель машинного обучения / глубокого обучения с использованием графического процессора и процессора.

https://medium.com/@sanchitsagarkar03/offline-and-online-mode-of-training-machine-learning-deep-learning-model-using-gpu-and-cpu-4066bf604bff