AWS SageMaker:使用托管在 S3 中的经过训练的模型创建终端节点

Posted

技术标签:

【中文标题】AWS SageMaker:使用托管在 S3 中的经过训练的模型创建终端节点【英文标题】:AWS SageMaker: Create an endpoint using a trained model hosted in S3 【发布时间】:2020-10-18 04:48:57 【问题描述】:

我关注了这个tutorial,主要是针对jupyter notebook的,对外部处理做了一些小改动。我创建了一个项目,可以在本地准备我的数据集,将其上传到 S3,训练,最后将模型预测器部署到同一个存储桶。完美!

所以,经过训练并将其保存在 S3 存储桶中:

 ss_model.fit(inputs=data_channels, logs=True)

部署为端点时失败。因此,我发现了以多种方式托管端点的技巧,但不是来自已保存在 S3 中的模型。因为为了托管,您可能需要获取估算器,通常情况下是这样的:

 self.estimator = sagemaker.estimator.Estimator(self.training_image,
                                                role,
                                                train_instance_count=1,
                                                train_instance_type='ml.p3.2xlarge',
                                                train_volume_size=50,
                                                train_max_run=360000,
                                                output_path=output,
                                                base_job_name='ss-training',
                                                sagemaker_session=sess)

我的问题是:有没有办法从保存在 S3 (.tar) 中的模型加载估计器?或者,无论如何,无需再次训练即可创建端点?

【问题讨论】:

你能回答这个问题吗***.com/questions/62765780/… 【参考方案1】:

所以,在跑了很多页之后,才发现了一条线索here。我终于找到了如何加载模型并创建端点:

def create_endpoint(self):
    sess = sagemaker.Session()
    training_image = get_image_uri(sess.boto_region_name, 'semantic-segmentation', repo_version="latest")        
    role = "YOUR_ROLE_ARN_WITH_SAGEMAKER_EXECUTION"
    model = "s3://BUCKET/PREFIX/.../output/model.tar.gz"

    sm_model = sagemaker.Model(model_data=model, image=training_image, role=role, sagemaker_session=sess)
    sm_model.deploy(initial_instance_count=1, instance_type='ml.p3.2xlarge')

请不要忘记在使用后禁用您的端点。这真的很重要!端点通过“运行”而不仅仅是使用来收费

希望对你也有帮助!

【讨论】:

【参考方案2】:

    使用以下代码部署模型

    model = sagemaker.Model(role=role,
                            model_data=### s3 location of tar.gz file,
                            image_uri=### the inference image uri,
                            sagemaker_session=sagemaker_session,
                            name=## model name)
    
    model_predictor = model.deploy(initial_instance_count=1,
                                   instance_type=instance_type)
    

    初始化预测器

    model_predictor = sagemaker.Predictor(endpoint_name= model.endpoint_name)
    

    最终预测使用

    model_predictor.predict(##your payload)
    

【讨论】:

以上是关于AWS SageMaker:使用托管在 S3 中的经过训练的模型创建终端节点的主要内容,如果未能解决你的问题,请参考以下文章

创建 SageMaker 模型时出现 ValidationError

如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?

使用 CloudFront 和目录重定向的 AWS S3 静态网站托管

亚马逊 AWS 和 S3 实例的语义分割

AWS攻略——使用S3托管静态网页

AWS攻略——使用S3托管静态网页