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

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

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

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

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

У цьому дописі ми покажемо, як розгорнути навчені моделі автопілота на безсерверних кінцевих точках висновку за допомогою Бібліотеки Boto3 та цінності Amazon SageMaker.

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

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

Зараз автопілот підтримує три режими навчання:

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

Щоб дізнатися більше про режими навчання автопілота, див Режими навчання.

Огляд рішення

У цій публікації ми використовуємо Маркетинг UCI Bank набір даних, щоб передбачити, чи підпишеться клієнт на строковий депозит, запропонований банком. Це тип задачі двійкової класифікації.

Ми запускаємо два завдання автопілота за допомогою Бібліотеки Boto3 для SageMaker. У першій роботі в якості обраного режиму навчання використовується ансамбль. Потім ми розгортаємо модель єдиного ансамблю, згенеровану на безсерверній кінцевій точці, і надсилаємо запити на висновки до цієї розміщеної кінцевої точки.

Друга робота використовує режим навчання HPO. Для типів проблем класифікації Autopilot генерує три контейнери висновків. Ми витягуємо ці три контейнери висновків і розгортаємо їх на окремих безсерверних кінцевих точках. Потім ми надсилаємо запити на висновки до цих розміщених кінцевих точок.

Для отримання додаткової інформації про типи задач регресії та класифікації див Визначення контейнера висновків для типів проблем регресії та класифікації.

Ми також можемо запускати завдання автопілота з Студія Amazon SageMaker інтерфейс користувача. Якщо ви запускаєте завдання з інтерфейсу користувача, обов’язково вимкніть Автоматичне розгортання опція в Розгортання та додаткові параметри розділ. В іншому випадку Autopilot розгорне найкращий кандидат на кінцеву точку в реальному часі.

Передумови

Переконайтеся, що у вас встановлено останню версію пакетів Boto3 і SageMaker Python:

pip install -U boto3 sagemaker

Нам потрібна версія пакета SageMaker >= 2.110.0 і версія Boto3 >= boto3-1.24.84.

Запустіть завдання автопілота в режимі групування

Щоб запустити завдання автопілота за допомогою бібліотек 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, який тестує різні конфігурації кінцевих точок і порівнює найоптимальнішу з порівнянним примірником хостингу в реальному часі.

Зауважте, що безсерверні кінцеві точки приймають лише 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 щоб обмежити кількість кандидатів, які генеруватиме робота автопілота. Зауважте, що це необов’язкові параметри, які встановлено лише для обмеження часу виконання завдання для демонстрації. Перегляньте наступний код:

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 з найбільшою ймовірністю. Нарешті, контейнер висновків після обробки виконує зворотне перетворення прогнозованої мітки та відображає її на вихідній мітці. Для отримання додаткової інформації див Визначення контейнера висновків для типів проблем регресії та класифікації.

Ми витягуємо ці три контейнери висновків і розгортаємо їх на окремих безсерверних кінцевих точках. Для логічного висновку ми послідовно викликаємо кінцеві точки, відправляючи корисне навантаження спочатку в контейнер перетворення функцій, потім передаючи вихідні дані з цього контейнера в контейнер алгоритму і, нарешті, передаючи вихідні дані з попереднього контейнера логічного висновку в контейнер постобробки, який виводить передбачену мітку.

Наступна схема ілюструє архітектуру цієї установки. діаграма, яка ілюструє модель автопілота в режимі 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

Висновок

У цьому дописі ми показали, як ми можемо розгортати моделі, згенеровані автопілотом, у режимах ансамблю та HPO на безсерверних кінцевих точках висновку. Це рішення може пришвидшити вашу здатність використовувати економічно ефективні та повністю керовані служби ML, такі як Autopilot, для швидкого створення моделей із необроблених даних, а потім розгортати їх на повністю керованих безсерверних кінцевих точках висновків із вбудованим автоматичним масштабуванням для зменшення витрат. .

Ми радимо вам спробувати це рішення з набором даних, що відповідає KPI вашого бізнесу. Ви можете звернутися до рішення, реалізованого в блокноті Jupyter у GitHub репо.

Додаткові посилання


Про автора

Розгортайте моделі Amazon SageMaker Autopilot на кінцевих точках безсерверного висновку PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Правін Чамарті є старшим спеціалістом зі штучного інтелекту та ML Amazon Web Services. Він захоплений штучним інтелектом/ML і всім, що стосується AWS. Він допомагає клієнтам по всій Америці масштабувати, впроваджувати інновації та ефективно керувати робочими навантаженнями ML на AWS. У вільний час Правін любить читати і любить дивитися науково-фантастичні фільми.

Часова мітка:

Більше від AWS Машинне навчання

Запустіть кілька генеративних моделей штучного інтелекту на графічному процесорі за допомогою багатомодельних кінцевих точок Amazon SageMaker із TorchServe та заощаджуйте до 75% витрат на висновки | Веб-сервіси Amazon

Вихідний вузол: 1887176
Часова мітка: Вересень 6, 2023