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托管的静态网站上?