У меня есть предварительно обученная модель, которую я загружаю в экземпляр ноутбука AWS SageMaker из корзины S3, и после предоставления тестового изображения для прогнозирования из корзины S3 она дает мне точные результаты по мере необходимости. Я хочу развернуть его, чтобы иметь конечную точку, которую я могу дополнительно интегрировать с AWS Lambda Function и AWS API GateWay, чтобы я мог использовать модель с приложением в реальном времени.
Есть идеи, как развернуть модель из экземпляра ноутбука AWS Sagemaker и получить ее конечную точку?
Код внутри файла .ipynb
приведен ниже для справки.
import boto3
import pandas as pd
import sagemaker
#from sagemaker import get_execution_role
from skimage.io import imread
from skimage.transform import resize
import numpy as np
from keras.models import load_model
import os
import time
import json
#role = get_execution_role()
role = sagemaker.get_execution_role()
bucketname = 'bucket' # bucket where the model is hosted
filename = 'test_model.h5' # name of the model
s3 = boto3.resource('s3')
image= s3.Bucket(bucketname).download_file(filename, 'test_model_new.h5')
model= 'test_model_new.h5'
model = load_model(model)
bucketname = 'bucket' # name of the bucket where the test image is hosted
filename = 'folder/image.png' # prefix
s3 = boto3.resource('s3')
file= s3.Bucket(bucketname).download_file(filename, 'image.png')
file_name='image.png'
test=np.array([resize(imread(file_name), (137, 310, 3))])
test_predict = model.predict(test)
print ((test_predict > 0.5).astype(np.int))
Вот решение, которое сработало для меня. Просто выполните следующие шаги.
1 - Загрузите свою модель в среду jupyter SageMaker с помощью
from keras.models import load_model
model = load_model (<Your Model name goes here>) #In my case it's model.h5
2 - Теперь, когда модель загружена, преобразуйте ее в protobuf format
, требуемую AWS
, с помощью
def convert_h5_to_aws(loaded_model):
from tensorflow.python.saved_model import builder
from tensorflow.python.saved_model.signature_def_utils import predict_signature_def
from tensorflow.python.saved_model import tag_constants
model_version = '1'
export_dir = 'export/Servo/' + model_version
# Build the Protocol Buffer SavedModel at 'export_dir'
builder = builder.SavedModelBuilder(export_dir)
# Create prediction signature to be used by TensorFlow Serving Predict API
signature = predict_signature_def(
inputs = {"inputs": loaded_model.input}, outputs = {"score": loaded_model.output})
from keras import backend as K
with K.get_session() as sess:
# Save the meta graph and variables
builder.add_meta_graph_and_variables(
sess=sess, tags=[tag_constants.SERVING], signature_def_map = {"serving_default": signature})
builder.save()
import tarfile
with tarfile.open('model.tar.gz', mode='w:gz') as archive:
archive.add('export', recursive=True)
import sagemaker
sagemaker_session = sagemaker.Session()
inputs = sagemaker_session.upload_data(path='model.tar.gz', key_prefix='model')
convert_h5_to_aws(model):
3 - И теперь вы можете развернуть свою модель с помощью
!touch train.py
from sagemaker.tensorflow.model import TensorFlowModel
sagemaker_model = TensorFlowModel(model_data = 's3://' + sagemaker_session.default_bucket() + '/model/model.tar.gz',
role = role,
framework_version = '1.15.2',
entry_point = 'train.py')
%%timelog
predictor = sagemaker_model.deploy(initial_instance_count=1,
instance_type='ml.m4.xlarge')
Это создаст конечную точку, которую можно увидеть в разделе «Вывод» Amazon SageMaker, и с помощью этой конечной точки теперь вы можете делать прогнозы из блокнота jupyter, а также из веб-приложений и мобильных приложений. Этот туториал на Youtube Лиама и блог AWS Прии мне очень помогли.
Вероятно, вы не создали ни одного файла inference.py
. Если вы посмотрите на 3-й пункт моего ответа, я создаю файл train.py
, используя !touch train.py
. Этот train.py
используется для вывода. В вашем случае я просмотрел документы по предоставленной вами ссылке. Там они использовали файл inference.py
в качестве точки входа, но не упомянули, где они его создали. Мое предложение состояло бы в том, чтобы создать этот файл самостоятельно непосредственно перед импортом роли исполнения.
У меня есть модель resnet pytorch, которую я обучил локально. Я хочу развернуть модель с помощью конечной точки sagemaker. Я выполнил шаги на sagemaker.readthedocs.io/en/stable/frameworks/pytorch/…. Однако я получаю сообщение об ошибке, что мой файл inference.py отсутствует. Я создал папку с моделью, как указано, преобразовал ее в .tar.gz локально и загрузил в корзину s3. Я передаю местоположение s3 конструктору Pytorch. Я не знаю, что мне не хватает. Любезно помочь.