【问题标题】:How to deploy a Pre-Trained model using AWS SageMaker Notebook Instance?如何使用 AWS SageMaker Notebook Instance 部署预训练模型?
【发布时间】:2020-12-24 05:24:48
【问题描述】:

我有一个预训练模型,我从 S3 存储桶加载到 AWS SageMaker Notebook 实例中,并在提供测试图像以从 S3 存储桶进行预测后,它会根据需要为我提供准确的结果。我想部署它,以便拥有一个可以进一步与 AWS Lambda 函数和 AWS API GateWay 集成的端点,以便我可以将模型与实时应用程序一起使用。 知道如何从 AWS Sagemaker Notebook Instance 部署模型并获取其端点吗? .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))

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda amazon-sagemaker


    【解决方案1】:

    这是对我有用的解决方案。只需按照以下步骤操作即可。

    1 - 在 SageMaker 的 jupyter 环境中加载您的模型

    from keras.models import load_model
    
    model = load_model (<Your Model name goes here>) #In my case it's model.h5
    

    2 - 现在模型已加载,在

    的帮助下将其转换为AWS 所需的protobuf format
    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 notebook 以及 Web 和移动应用程序进行预测。 Liam 的 Youtube tutorial 和 Priya 的 AWS blog 对我帮助很大。

    【讨论】:

    • 我有一个我在本地训练的 resnet pytorch 模型。我想使用 sagemaker 端点部署模型。我已按照sagemaker.readthedocs.io/en/stable/frameworks/pytorch/… 的步骤进行操作。但是,我收到一个错误,即我的 inference.py 文件丢失。我已经按照指定创建了一个模型文件夹,在本地将其转换为 .tar.gz 并将其上传到 s3 存储桶。我将 s3 位置传递给 Pytorch 构造函数。我不知道我错过了什么。请协助。
    • 可能您还没有创建任何inference.py 文件。如果您查看我回答中的第三点,我正在使用!touch train.py 创建一个train.py 文件。这个train.py 用于推理。在您的情况下,我通过您提供的链接查看了文档。他们在那里使用了inference.py 文件作为入口点,但他们没有提到他们创建它的位置。我的建议是在导入执行角色之前自己创建该文件。
    猜你喜欢
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    • 2020-02-08
    • 2021-11-11
    • 2021-11-19
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多