Развертывайте модели Amazon SageMaker Autopilot на конечных точках бессерверного вывода PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Развертывание моделей Amazon SageMaker Autopilot на бессерверных конечных точках логических выводов

Amazon SageMaker Автопилот автоматически создает, обучает и настраивает лучшие модели машинного обучения (ML) на основе ваших данных, позволяя вам сохранять полный контроль и прозрачность. Автопилот также может автоматически развертывать обученные модели в конечных точках логического вывода в реальном времени.

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

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

В этом посте мы покажем, как развернуть модели, обученные Autopilot, на бессерверные конечные точки логического вывода с помощью Библиотеки Бото3 для Создатель мудреца Амазонки.

Режимы обучения автопилота

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

В настоящее время автопилот поддерживает три режима обучения:

  • Авто – В зависимости от размера набора данных Autopilot автоматически выбирает либо режим ансамбля, либо режим HPO. Для наборов данных размером более 100 МБ Autopilot выбирает HPO; в противном случае он выбирает ансамбль.
  • Ансамбль – Автопилот использует АвтоГлюон метод ансамбля с использованием наложения моделей и создает оптимальную прогностическую модель.
  • Оптимизация гиперпараметров (HPO) – Автопилот находит наилучшую версию модели, настраивая гиперпараметры с помощью байесовской оптимизации или многоточечной оптимизации во время выполнения обучающих заданий в вашем наборе данных. Режим HPO выбирает алгоритмы, наиболее подходящие для вашего набора данных, и выбирает лучший диапазон гиперпараметров для настройки ваших моделей.

Чтобы узнать больше о режимах обучения автопилота, см. Режимы обучения.

Обзор решения

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

Запускаем два задания Autopilot с помощью Библиотеки Boto3 для SageMaker. Первая работа использует ансамбль в качестве выбранного режима обучения. Затем мы развертываем сгенерированную модель единого ансамбля на бессерверной конечной точке и отправляем запросы на вывод на эту размещенную конечную точку.

Второе задание использует режим обучения HPO. Для типов задач классификации Autopilot создает три контейнера вывода. Мы извлекаем эти три контейнера вывода и развертываем их на отдельных бессерверных конечных точках. Затем мы отправляем запросы на вывод на эти размещенные конечные точки.

Дополнительные сведения о типах задач регрессии и классификации см. Определения контейнера вывода для типов задач регрессии и классификации.

Мы также можем запускать задания автопилота из Студия Amazon SageMaker Пользовательский интерфейс. Если вы запускаете задания из пользовательского интерфейса, обязательно отключите Автоматическое развертывание вариант в Развертывание и дополнительные настройки раздел. В противном случае Autopilot развернет лучшего кандидата на конечной точке в реальном времени.

Предпосылки

Убедитесь, что у вас установлены последние версии пакетов Boto3 и SageMaker Python:

pip install -U boto3 sagemaker

Нам нужна версия пакета SageMaker >= 2.110.0 и версия Бото3 >= boto3-1.24.84.

Запуск задания автопилота в режиме ансамбля

Чтобы запустить задание Autopilot с помощью библиотек SageMaker Boto3, мы используем create_auto_ml_job API. Затем мы проходим в AutoMLJobConfig, InputDataConfigи AutoMLJobObjective в качестве входных данных для create_auto_ml_job, Смотрите следующий код:

bucket = session.default_bucket()
role = sagemaker.get_execution_role()
prefix = "autopilot/bankadditional"
sm_client = boto3.Session().client(service_name='sagemaker',region_name=region)

timestamp_suffix = strftime('%d%b%Y-%H%M%S', gmtime())
automl_job_name = f"uci-bank-marketing-{timestamp_suffix}"
max_job_runtime_seconds = 3600
max_runtime_per_job_seconds = 1200
target_column = "y"
problem_type="BinaryClassification"
objective_metric = "F1"
training_mode = "ENSEMBLING"

automl_job_config = {
    'CompletionCriteria': {
      'MaxRuntimePerTrainingJobInSeconds': max_runtime_per_job_seconds,
      'MaxAutoMLJobRuntimeInSeconds': max_job_runtime_seconds
    },    
    "Mode" : training_mode
}

automl_job_objective= { "MetricName": objective_metric }

input_data_config = [
    {
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': f's3://{bucket}/{prefix}/raw/bank-additional-full.csv'
        }
      },
      'TargetAttributeName': target_column
    }
  ]

output_data_config = {
	    'S3OutputPath': f's3://{bucket}/{prefix}/output'
	}


sm_client.create_auto_ml_job(
				AutoMLJobName=auto_ml_job_name,
				InputDataConfig=input_data_config,
				OutputDataConfig=output_data_config,
				AutoMLJobConfig=automl_job_config,
				ProblemType=problem_type,
				AutoMLJobObjective=automl_job_objective,
				RoleArn=role)

Автопилот возвращает BestCandidate модельный объект, который имеет InferenceContainers требуется для развертывания моделей в конечных точках вывода. Чтобы получить BestCandidate для предыдущей работы мы используем describe_automl_job функция:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
best_candidate = job_response['BestCandidate']
inference_container = job_response['BestCandidate']['InferenceContainers'][0]
print(inference_container)

Разверните обученную модель

Теперь мы развертываем предыдущий контейнер вывода на бессерверной конечной точке. Первым шагом является создание модели из контейнера вывода, затем создание конфигурации конечной точки, в которой мы указываем MemorySizeInMB и MaxConcurrency значения для бессерверной конечной точки вместе с названием модели. Наконец, мы создаем конечную точку с конфигурацией конечной точки, созданной выше.

Рекомендуем выбрать свой объем памяти конечной точки в соответствии с размером вашей модели. Объем памяти должен быть не меньше размера вашей модели. Ваша бессерверная конечная точка имеет минимальный размер ОЗУ 1024 МБ (1 ГБ), а максимальный размер ОЗУ, который вы можете выбрать, составляет 6144 МБ (6 ГБ).

Вы можете выбрать следующие размеры памяти: 1024 МБ, 2048 МБ, 3072 МБ, 4096 МБ, 5120 МБ или 6144 МБ.

Чтобы помочь определить, является ли бессерверная конечная точка правильным вариантом развертывания с точки зрения затрат и производительности, мы рекомендуем вам обратиться к SageMaker Serverless Inference Toolkit для сравнительного анализа, который тестирует различные конфигурации конечных точек и сравнивает наиболее оптимальную конфигурацию с сопоставимым экземпляром хостинга в реальном времени.

Обратите внимание, что бессерверные конечные точки принимают только SingleModel для контейнеров вывода. Автопилот в режиме сборки генерирует единую модель, поэтому мы можем развернуть этот контейнер модели как есть на конечной точке. См. следующий код:

# Create Model
	model_response = sm_client.create_model(
				ModelName=model_name,
				ExecutionRoleArn=role,
				Containers=[inference_container]
	)

# Create Endpoint Config
	epc_response = sm_client.create_endpoint_config(
		EndpointConfigName = endpoint_config_name,
		ProductionVariants=[
			{
				"ModelName": model_name,
				"VariantName": "AllTraffic",
				"ServerlessConfig": {
					"MemorySizeInMB": memory,
					"MaxConcurrency": max_concurrency
				}
			}
		]
	)

# Create Endpoint
	ep_response = sm_client.create_endpoint(
		EndpointName=endpoint_name,
		EndpointConfigName=endpoint_config_name
	)

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

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

Отправить запрос на вывод обученной модели

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

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer


payload = "34,blue-collar,married,basic.4y,no,no,no,telephone,may,tue,800,4,999,0,nonexistent,1.1,93.994,-36.4,4.857,5191.0"

predictor = Predictor(
        endpoint_name=endpoint,
        sagmaker_session=session,
        serializer=CSVSerializer(),
    )

prediction = predictor.predict(payload).decode(‘utf-8’)
print(prediction)

Запуск задания автопилота в режиме HPO

В режиме HPO для CompletionCriteria, Кроме MaxRuntimePerTrainingJobInSeconds и MaxAutoMLJobRuntimeInSeconds, мы могли бы также указать MaxCandidates чтобы ограничить количество кандидатов, которые будут генерироваться заданием Autopilot. Обратите внимание, что это необязательные параметры, и они устанавливаются только для ограничения времени выполнения задания для демонстрации. См. следующий код:

training_mode = "HYPERPARAMETER_TUNING"

automl_job_config["Mode"] = training_mode
automl_job_config["CompletionCriteria"]["MaxCandidates"] = 15
hpo_automl_job_name =  f"{model_prefix}-HPO-{timestamp_suffix}"

response = sm_client.create_auto_ml_job(
					  AutoMLJobName=hpo_automl_job_name,
					  InputDataConfig=input_data_config,
					  OutputDataConfig=output_data_config,
					  AutoMLJobConfig=automl_job_config,
					  ProblemType=problem_type,
					  AutoMLJobObjective=automl_job_objective,
					  RoleArn=role,
					  Tags=tags_config
				)

Чтобы получить BestCandidate для предыдущего задания мы снова можем использовать describe_automl_job функция:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
best_candidate = job_response['BestCandidate']
inference_containers = job_response['BestCandidate']['InferenceContainers']
print(inference_containers)

Разверните обученную модель

Автопилот в режиме HPO для типа задачи классификации создает три контейнера вывода.

Первый контейнер обрабатывает этапы преобразования функций. Затем контейнер алгоритма генерирует predicted_label с наибольшей вероятностью. Наконец, контейнер вывода постобработки выполняет обратное преобразование предсказанной метки и сопоставляет ее с исходной меткой. Для получения дополнительной информации см. Определения контейнера вывода для типов задач регрессии и классификации.

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

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

Мы извлекаем три контейнера вывода из BestCandidate со следующим кодом:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
inference_containers = job_response['BestCandidate']['InferenceContainers']

models = list()
endpoint_configs = list()
endpoints = list()

# For brevity, we've encapsulated create_model, create endpoint_config and create_endpoint as helper functions
for idx, container in enumerate(inference_containers):
    (status, model_arn) = create_autopilot_model(
								    sm_client,
								    automl_job_name,
            						role,
								    container,
								    idx)
    model_name = model_arn.split('/')[1]
    models.append(model_name)

    endpoint_config_name = f"epc-{model_name}"
    endpoint_name = f"ep-{model_name}"
    (status, epc_arn) = create_serverless_endpoint_config(
								    sm_client,
								    endpoint_config_name,
								    model_name,
            						memory=2048,
								    max_concurrency=10)
	endpoint_configs.append(endpoint_config_name)

	response = create_serverless_endpoint(
								    sm_client,
								    endpoint_name,
								    endpoint_config_name)
	endpoints.append(endpoint_name)

Отправить запрос на вывод обученной модели

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

визуальное представление потока запросов на вывод трех контейнеров вывода из режима HPO

Смотрите следующий код:

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer

payload = "51,technician,married,professional.course,no,yes,no,cellular,apr,thu,687,1,0,1,success,-1.8,93.075,-47.1,1.365,5099.1"


for _, endpoint in enumerate(endpoints):
    try:
        print(f"payload: {payload}")
        predictor = Predictor(
            endpoint_name=endpoint,
            sagemaker_session=session,
            serializer=CSVSerializer(),
        )
        prediction = predictor.predict(payload)
        payload=prediction
    except Exception as e:
        print(f"Error invoking Endpoint; {endpoint} n {e}")
        break

Полная реализация этого примера доступна в следующем jupyter. ноутбук.

Убирать

Чтобы очистить ресурсы, вы можете удалить созданные бессерверные конечные точки, конфигурации конечных точек и модели:

sm_client = boto3.Session().client(service_name='sagemaker',region_name=region)

for _, endpoint in enumerate(endpoints):
    try:
        sm_client.delete_endpoint(EndpointName=endpoint)
    except Exception as e:
        print(f"Exception:n{e}")
        continue
        
for _, endpoint_config in enumerate(endpoint_configs):
    try:
        sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config)
    except Exception as e:
        print(f"Exception:n{e}")
        continue

for _, autopilot_model in enumerate(models):
    try:
        sm_client.delete_model(ModelName=autopilot_model)
    except Exception as e:
        print(f"Exception:n{e}")
        continue

Заключение

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

Мы рекомендуем вам попробовать это решение с набором данных, соответствующим ключевым показателям эффективности вашего бизнеса. Вы можете обратиться к решению, реализованному в блокноте Jupyter, в Репо GitHub.

Дополнительные ссылки


Об авторе

Развертывайте модели Amazon SageMaker Autopilot на конечных точках бессерверного вывода PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Правин Чамарти является старшим специалистом по искусственному интеллекту и машинному обучению в Amazon Web Services. Он увлечен AI/ML и всем, что связано с AWS. Он помогает клиентам в Северной и Южной Америке масштабировать, внедрять инновации и эффективно управлять рабочими нагрузками машинного обучения на AWS. В свободное время Правин любит читать и смотреть научно-фантастические фильмы.

Отметка времени:

Больше от Машинное обучение AWS

Запускайте несколько генеративных моделей ИИ на графическом процессоре, используя многомодельные конечные точки Amazon SageMaker с TorchServe, и сэкономьте до 75 % на затратах на логические выводы | Веб-сервисы Amazon

Исходный узел: 1887176
Отметка времени: сентябрь 6, 2023