【问题标题】:How to use a pretrained model from s3 to predict some data?如何使用来自 s3 的预训练模型来预测一些数据?
【发布时间】:2019-10-08 20:14:53
【问题描述】:

我已经使用 sagemaker 训练了一个语义分割模型,并且输出已保存到 s3 存储桶中。我想从 s3 加载这个模型来预测 sagemaker 中的一些图像。

我知道如何预测我在训练后是否让笔记本实例继续运行,因为它只是一个简单的部署,但如果我想使用旧模型并没有真正的帮助。

我查看了这些资源并能够自己提出一些建议,但它不起作用,因此我在这里:

https://course.fast.ai/deployment_amzn_sagemaker.html#deploy-to-sagemaker https://aws.amazon.com/getting-started/tutorials/build-train-deploy-machine-learning-model-sagemaker/

https://sagemaker.readthedocs.io/en/stable/pipeline.html

https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/inference_pipeline_sparkml_xgboost_abalone/inference_pipeline_sparkml_xgboost_abalone.ipynb

我的代码是这样的:

from sagemaker.pipeline import PipelineModel
from sagemaker.model import Model

s3_model_bucket = 'bucket'
s3_model_key_prefix = 'prefix'
data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
models = ss_model.create_model() # ss_model is my sagemaker.estimator

model = PipelineModel(name=data, role=role, models= [models])
ss_predictor = model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge')

【问题讨论】:

    标签: python amazon-web-services amazon-s3 boto3 amazon-sagemaker


    【解决方案1】:

    您实际上可以从现有工件实例化 Python SDK model 对象,并将其部署到端点。这允许您从经过训练的工件部署模型,而无需在笔记本中重新训练。例如,对于语义分割模型:

    trainedmodel = sagemaker.model.Model(
        model_data='s3://...model path here../model.tar.gz',
        image='685385470294.dkr.ecr.eu-west-1.amazonaws.com/semantic-segmentation:latest',  # example path for the semantic segmentation in eu-west-1
        role=role)  # your role here; could be different name
    
    trainedmodel.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge')
    

    同样,您可以使用以下命令从任何支持 SDK 的经过身份验证的客户端实例化已部署端点上的预测器对象:

    predictor = sagemaker.predictor.RealTimePredictor(
        endpoint='endpoint name here',
        content_type='image/jpeg',
        accept='image/png')
    

    更多关于这些抽象:

    【讨论】:

    • 非常感谢。这正是我想要做的。
    • 不错!如果它解决了问题,您可以接受答案,以便其他人可以重复使用它吗?非常感谢您使用 SageMaker 和 StackOverflow
    【解决方案2】:

    input_features_data 是一个数据框

    import sagemaker
    from sagemaker.predictor import csv_serializer, json_deserializer
    
    predictor = sagemaker.predictor.RealTimePredictor(
        endpoint= PREDICTOR_ENDPOINT_NAME,
        sagemaker_session=sagemaker.Session(),
        serializer=csv_serializer,
        deserializer=json_deserializer,
        content_type='text/csv',
    )
    
    test_batch_size = 5
    num_batches = -(-len(input_features_data) // test_batch_size)
    count=0
    predicted_values = []
    for i in range(num_batches):
        predicted_values += [predictor.predict(x) for x in
                             input_features_data[i * test_batch_size:(i + 1) * test_batch_size]]
    
    return np.asarray(predicted_values)
    

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多