Откройте возможности развертывания и масштабирования моделей машинного обучения с помощью 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. Мы также видели, как вызывать конечную точку и убирать за собой.