Позвольте инженерам машинного обучения обучать, развертывать и прогнозировать модели (ML) в облаке AWS простым и экономичным способом.

Введение

Amazon SageMaker - это полностью управляемый сервис, который позволяет специалистам по данным и инженерам машинного обучения быстро создавать, обучать и развертывать модели и конвейеры машинного обучения легко масштабируемым и экономичным способом. SageMaker был запущен примерно в ноябре 2017 года, и у меня была возможность узнать о встроенных алгоритмах и функциях SageMaker от Криса Скринака во время выездного семинара для партнеров Amazon. За этот период SageMaker значительно повзрослел, чтобы позволить инженерам машинного обучения быстро и масштабируемо развертывать и отслеживать модели. Помимо встроенных алгоритмов, появилось много новых функций, таких как AutoPilot, Model Clarify и Feature Store, Docker Container. В этом блоге будут рассмотрены эти новые функции SageMaker и способ обучения без использования сервера, развертывание и вывод в реальном времени.

Архитектура

Шаги для приведенной ниже эталонной архитектуры объясняются в конце раздела этой статьи о конвейере SageMaker.

Возможности SageMaker

A) Машинное обучение Auto Pilot-Low Code

  • Запущен примерно в декабре 2019 г.
  • Первое в отрасли автоматизированное машинное обучение, обеспечивающее контроль и прозрачность моделей машинного обучения
  • Выполняет обработку функций, выбирает лучший алгоритм, обучает и выбирает лучшую модель всего за несколько кликов
  • Вертикальные сервисы искусственного интеллекта, такие как Amazon Personalize и Amazon Forecast, можно использовать для персонализированных рекомендаций и прогнозирования проблем.
  • AutoPilot - это общий сервис машинного обучения для всех видов задач классификации и регрессии, таких как обнаружение мошенничества, анализ оттока и целевой маркетинг.
  • Поддерживает встроенные алгоритмы SageMaker, такие как xgboost и linear Learner
  • Максимальный размер входного набора данных по умолчанию составляет 5 ГБ, но его можно увеличить только в ГБ.

Демонстрация автопилота

Данные для эксперимента с автопилотом

Рассматриваемый набор данных является общедоступными данными, предоставленными UCI.

Информация о наборе данных:

Данные опроса описывают различные сценарии вождения, включая пункт назначения, текущее время, погоду, количество пассажиров и т. Д., А затем спрашивают человека, примет ли он купон, если он является водителем. Задача, которую мы будем выполнять с этим набором данных, - это Классификация

Эксперимент с автопилотом

Импортируйте данные для обучения.

%%sh
wget https://archive.ics.uci.edu/ml/machine-learning-databases/00603/in-vehicle-coupon-recommendation.csv

После загрузки данных AutoPilot можно настроить за считанные минуты с помощью студии SageMaker. Добавьте пути обучающих входных и выходных данных, метку для прогнозирования и включения автоматического развертывания модели. SageMaker развертывает лучшую модель и создает конечную точку после успешного обучения.

В качестве альтернативы можно выбрать модель по своему желанию и развернуть ее.

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

Вывести и оценить модель

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

No Urgent Place,Friend(s),Sunny,80,10AM,Carry out & Take away,2h,Female,21,Unmarried partner,1,Some college - no 
degree,Unemployed,$37500 - $49999,,never,never,,4~8,1~3,1,1,0,0,1,1

Сделайте вывод о модели, используя набор данных проверки, используя код, приведенный в Github.

Б) Уточнение SageMaker

  • Запущен примерно в декабре 2020 г.
  • Объясняет, как модели машинного обучения (ML) делали прогнозы во время экспериментов с автопилотом.
  • Отслеживает дрейф смещения для моделей в производстве
  • Предоставляет компоненты, которые помогают клиентам AWS создавать менее предвзятые и более понятные модели машинного обучения.
  • Предоставляет объяснения для отдельных прогнозов, доступных через API.
  • Помогает в создании модели управления для приложений машинного обучения.

Информация о смещении может быть получена для эксперимента с автопилотом.

bias_data_config = sagemaker.clarify.DataConfig(
    s3_data_input_path=training_data_s3_uri,
    s3_output_path=bias_report_1_output_path,
    label="Y",
    headers=train_cols,
    dataset_type="text/csv",
)

model_config = sagemaker.clarify.ModelConfig(
    model_name=model_name,
    instance_type=train_instance_type,
    instance_count=1,
    accept_type="text/csv",
)

В) Магазин функций SageMaker

  • Запущен примерно в декабре 2020 г.
  • Amazon SageMaker Feature Store - это полностью управляемый репозиторий для хранения, обновления, извлечения и совместного использования функций машинного обучения (ML) в S3.
  • Набор функций, который использовался для обучения модели, должен быть доступен для прогнозирования в реальном времени (вывода).
  • Data Wrangler из SageMaker Studio можно использовать для разработки функций и загрузки функций в хранилище функций.
  • Магазин функций - как онлайн-магазины, так и офлайн-магазины могут быть загружены через отдельный канал разработки с помощью SDK
  • Источники потоковой передачи могут напрямую загружать функции в онлайн-магазин функций для вывода или создания функций.
  • Магазин функций автоматически создает каталог данных Amazon Glue при создании групп функций, и при необходимости его можно отключить.

В таблице ниже показаны различные хранилища данных, используемые для поддержки функций. Некоторые платформы с открытым исходным кодом, такие как Feast, превратились в платформу хранилища функций, и любое хранилище данных типа "ключ-значение", поддерживающее быстрый поиск, можно использовать в качестве хранилища функций.

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

record_identifier_value = str(2990130)
featurestore_runtime.get_record(FeatureGroupName=transaction_feature_group_name, RecordIdentifierValueAsString=record_identifier_value)

Группа функций также доступна как внешняя таблица Hive.

CREATE EXTERNAL TABLE IF NOT EXISTS sagemaker_featurestore.coupon (
  write_time TIMESTAMP
  event_time TIMESTAMP
  is_deleted BOOLEAN
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  STORED AS
  INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
  OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
LOCATION 's3://coupon-featurestore/onlinestore/139219451296/sagemaker/ap-south-1/offline-store/coupon-1621050755/data'

D) Конвейеры SageMaker

  • Запущен примерно в декабре 2020 г.
  • SageMaker изначально поддерживает MLOPS через проект SageMaker, а конвейеры создаются во время создания проекта SageMaker.
  • MLOPS - это стандарт для оптимизации непрерывной поставки моделей. Это необходимо для успешного применения машинного обучения промышленного уровня.
  • Конвейер SageMaker - это серия взаимосвязанных шагов, которые определены определением конвейера JSON для выполнения сборки, обучения и развертывания или только обучения и развертывания и т. Д.
  • Альтернативными способами настройки MLOPS в SageMaker являются Mlflow, Airflow и Kubeflow, Step Functions и т. Д.

Контейнеры Docker

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

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

Демонстрация контейнера SageMaker

Загрузите папку Github. В папке контейнера должны отображаться файлы, как показано на изображении.

Набор данных такой же, как мы рассматривали для эксперимента с автопилотом.

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

Окончательно закодированные объекты (97 меток) хранятся в coupon_train.csv и будут использоваться для обучения и проверки на местном уровне.

Сборка контейнера Docker

Следующие шаги должны быть выполнены упорядоченным образом.

  1. Создайте изображение
docker build -t recommend-in-vehicle-coupon:latest .

2. Обучите функции в локальном режиме

./train_local.sh recommend-in-vehicle-coupon:latest

3. Обслуживать модель в локальном режиме

./serve_local.sh recommend-in-vehicle-coupon:latest

Серверы работают и ждут запроса.

4. Прогнозирование на местном уровне

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

./predict.sh payload.csv

Как только запрос будет принят, серверы, которые слушают, ответят на полученные запросы.

5. Отправить изображение

После завершения локального тестирования образ контейнерного поезда, развертывания и обслуживания можно отправить в AWS ECR. В случае, если какое-либо изменение кода сделано, достаточно только финальной сборки и шага push.

./build_and_push.sh

Развернутый образ контейнера

Образы AWS ECR можно извлекать, а контейнеры запускать из Lambda, AWS EKS и т. Д.

Лямбда-функция

Вызовы API SageMaker, предназначенные для обучения, развертывания и вывода, создаются как лямбда-функции. Затем развернутую функцию обработчика Lambda следует интегрировать со шлюзом API, чтобы конвейер можно было запустить для любого инициированного события API.

Лямбда-функция, хранящаяся в Github, состоит из трех основных блоков.

Создание обучающей программы SageMaker

Лямбда прочитает функции из s3 и завершит обучение.

client = boto3.client("sagemaker", region_name=region)
        client.create_training_job(**create_training_params) 
        status = client.describe_training_job(TrainingJobName=job_name)["TrainingJobStatus"]

Создание модели и конечной точки SageMaker

Создайте модель

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

Зарегистрируйте модели в среде SageMaker, используя приведенный ниже вызов API.

create_model_response = client.create_model(
              ModelName=model_name, ExecutionRoleArn=role, PrimaryContainer=primary_container
              )

Создать конфигурацию конечной точки

response = client.create_endpoint_config(
            EndpointConfigName=endpoint_config_name,
            ProductionVariants=[
                {
                    'VariantName': 'variant-1',
                    'ModelName': model_name,
                    'InitialInstanceCount': 1,
                    'InstanceType': 'ml.t2.medium'
                }
            ]
        )

Создать конечную точку

response = client.create_endpoint(
            EndpointName=endpoint_name,
            EndpointConfigName=endpoint_config_name
        )

Вызов функции модели SageMaker

На основе сообщения тела запроса API конечная точка будет вызываться Lambda.

response = client.invoke_endpoint(
            EndpointName=EndpointName,
            Body=event_body.encode('utf-8'),
            ContentType='text/csv'
        )

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

Тестирование вывода в реальном времени с полным состоянием

Запуск обучения SageMaker

После интеграции шлюза API и Lambda можно запустить задание Training Job, передав тело запроса ниже в функцию Lambda.

{"key":"train_data"}

Запуск модели SageMaker и развертывание конечной точки

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

{"key" : "deploy_model",
"training_job" :"<training job name>"
}

Запуск конечной точки модели SageMaker

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

Ожидаемый ответ будет таким, как показано ниже.

События, созданные во время вызова, можно просмотреть в журналах облачного наблюдения.

Вывод

Затраты на логические выводы машинного обучения составляют более 80% операционных затрат на выполнение рабочих нагрузок машинного обучения. Возможности SageMaker, такие как оркестровка контейнеров, многомодельная конечная точка, бессерверный вывод, могут сэкономить как эксплуатационные расходы, так и затраты на разработку. Кроме того, конвейеры обучения и вывода, основанные на событиях, могут позволить любому нетехническому специалисту из отдела продаж или маркетинга обновлять как пакетные прогнозы, так и прогнозы в реальном времени одним нажатием кнопки, созданной с использованием таких механизмов, как API, веб-перехватчики со своего портала продаж. на специальной основе перед запуском своей кампании.