Откройте возможности развертывания и масштабирования моделей машинного обучения с помощью Amazon SageMaker Serverless Inference!

Amazon SageMaker Serverless Inference — это полностью управляемый сервис от Amazon Web Services, который позволяет разработчикам быстро и эффективно создавать и развертывать модели ИИ.

Amazon SageMaker Serverless Inference упрощает развертывание моделей ИИ и управление ими в бессерверной среде, поэтому вы можете сосредоточиться на построении и обучении моделей, а не на сложностях управления сервером и инфраструктурой. Сервис позволяет быстро и с минимальными затратами развертывать модели искусственного интеллекта в производстве, получать прогнозы в реальном времени и увеличивать или уменьшать масштаб в зависимости от ваших потребностей.

В этом руководстве мы рассмотрим, как использовать Amazon SageMaker Serverless Inference с моделью Pytorch resnet50. Мы подробно рассмотрим следующие темы:

  • Подготовка и загрузка модели в Amazon SageMaker
    - Настройка сервиса бессерверных выводов Amazon SageMaker
    - Вызов модели и запрос результатов
    - Мониторинг и масштабирование модели
  • Предварительные требования
    Прежде чем приступить к работе, у вас должно быть следующее:
  • Учетная запись AWS и учетная запись Amazon SageMaker
    — базовое понимание моделей машинного обучения и искусственного интеллекта
    — базовое понимание PyTorch

Прежде чем мы сможем начать, нам нужно настроить нашу среду. Мы начнем с импорта необходимых библиотек, настройки учетных данных AWS и создания корзины S3 для хранения наших данных.

Начнем с импорта необходимых библиотек. Мы будем использовать следующее:
- boto3
- AWS SDK для Python
- Pytorch

import boto3
import botocore
import sagemaker
import pytorch

Далее мы настроим наши учетные данные AWS. Нам нужно убедиться, что пользователь IAM, связанный с нашей учетной записью, имеет необходимые разрешения для создания и развертывания моделей Sagemaker.

# Initialize the client
sagemaker_client = boto3.client('sagemaker')

# Enter your IAM credentials
aws_access_key_id = 'your-access-key'
aws_secret_access_key = 'your-secret-key'

# Set up the S3 bucket
s3 = boto3.client('s3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
bucket_name = 'your-bucket-name'

Нам также нужно создать корзину S3 для хранения наших данных. Мы можем сделать это с помощью библиотеки boto3.

# Create the S3 bucket
s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={'LocationConstraint': 'us-east-1'})

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

from torchvision import models
from torchvision.models.resnet import ResNet, BasicBlock

Далее мы определим параметры нашей модели. В этом примере мы будем использовать набор данных регрессии Abalone.

# Model parameters
num_classes = 1
num_epochs = 10
batch_size = 16
learning_rate = 0.001

Затем мы определим наши наборы данных для обучения и проверки.

# Training and validation datasets
train_dataset = torch.utils.data.DataLoader(
    torch.utils.data.TensorDataset(train_X, train_y), batch_size=batch_size)
val_dataset = torch.utils.data.DataLoader(
    torch.utils.data.TensorDataset(val_X, val_y), batch_size=batch_size)

Затем мы можем определить нашу модель. В этом примере мы будем использовать архитектуру resnet50.

# Model definition
model = ResNet(BasicBlock, [2, 2, 2, 2], num_classes=num_classes)

Затем мы можем определить наш оптимизатор и функцию потерь.

# Optimizer and loss
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
criterion = torch.nn.MSELoss(reduction='mean')

Затем мы можем обучить нашу модель.

# Train the model
model.train()
for epoch in range(num_epochs):
    for X_batch, y_batch in train_dataset:
        outputs = model(X_batch)
        loss = criterion(outputs, y_batch)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

# Evaluate the model
model.eval()
val_loss = 0
for X_batch, y_batch in val_dataset:
    outputs = model(X_batch)
    loss = criterion(outputs, y_batch)
    val_loss += loss.item()
val_loss /= len(val_dataset)
print("Validation loss: %.3f" % val_loss)

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

# Create the model in the SageMaker Model Registry
model_name = 'sagemaker-resnet50'

model_path = 's3://{}/model/{}'.format(bucket_name, model_name)
model_registry = sagemaker.Model(
    model_data=model_path,
    image=pytorch.image,
    role='your-role',
    framework_version='1.1.0',
    name=model_name
)

# Deploy the model
endpoint_name = 'sagemaker-endpoint'
predictor = model_registry.deploy(
    endpoint_name=endpoint_name,
    initial_instance_count=1,
    instance_type='ml.m5.large'
)

Затем нам нужно настроить нашу конечную точку, чтобы сделать ее бессерверной. Мы можем сделать это, изменив тип экземпляра на «ml.m5.xlarge» и установив количество экземпляров на «0».

# Update the endpoint configuration
endpoint_config_name = 'sagemaker-endpoint-config'
predictor.update_endpoint(
    endpoint_name=endpoint_name,
    instance_type='ml.m5.xlarge',
    initial_instance_count=0
)

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

# Create a serverless endpoint
endpoint_name = 'sagemaker-serverless-endpoint'

endpoint_config_name = 'sagemaker-serverless-endpoint-config'
predictor.deploy(
    endpoint_name=endpoint_name,
    endpoint_config_name=endpoint_config_name,
    instance_type='ml.m5.xlarge',
    initial_instance_count=0
)

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

# Invoke the endpoint
client = boto3.client('sagemaker-runtime')
response = client.invoke_endpoint(
    EndpointName=endpoint_name,
    Body=input_data
)
predictions = response['Body'].read(

Как только мы закончим с нашей конечной точкой, нам нужно будет убрать за собой. Мы можем сделать это, удалив нашу конечную точку и корзину S3.

# Delete the endpoint
predictor.delete_endpoint(endpoint_name=endpoint_name)

# Delete the S3 bucket
bucket = s3.Bucket(bucket_name)
bucket.objects.all().delete()
bucket. Delete()

Теперь мы успешно создали и развернули бессерверную конечную точку с помощью SageMaker Serverless Inference и Pytorch resnet50. Мы также видели, как вызывать конечную точку и убирать за собой.