首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sagemaker管道部署最佳调优模型?

如何使用sagemaker管道部署最佳调优模型?
EN

Stack Overflow用户
提问于 2022-07-01 12:39:53
回答 1查看 168关注 0票数 1

我训练了一个XGBoost模型,对它进行了细化,对它进行了评估,并使用aws管道注册了它。现在我要部署模型。但是,模型伪影的位置被保存为Join对象,因为best_model.deploy(...)无法进行部署。任何关于如何部署最训练有素的模型的建议。

代码语言:javascript
复制
tuning_step = TuningStep(name="HPTuning",
                        tuner=tuner_log,
                        inputs={
                            "train":...,
                            "validation":...
                        },
                        cache_config=cache_config)


best_model = Model(image_uri=image_uri, 
                  model_data=tuning_step.get_top_model_s3_uri(top_k=0,s3_bucket=model_bucket_key),
                  sagemaker_session=sm_session,
                  role=role,
                  predictor_cls=XGBoostPredictor)


register_step = RegisterModel(name="RegisterBestChurnModel",
                             estimator=xgb_estimator,
                             model_data=tuning_step.get_top_model_s3_uri(top_k=0, s3_bucket=model_bucket_key),
                             content_types=["text/csv"],
                             response_types=["test/csv"],
                             inference_instances=["ml.t2.medium", "ml.m5.large"],
                             transform_instances=["ml.m5.large"],
                             approval_status="Approved",
                             model_metrics=model_metrics)

best_model.deploy(...)的问题是tuning_step.get_top_model_s3_uri(top_k=0,s3_bucket=model_bucket_key)是一个连接对象。部署需要将s3桶位置作为字符串。这样就不管用了。

我还试图使用以下方法部署注册模型

代码语言:javascript
复制
model_package_arn = register_step.properties.ModelPackageArn,
model = ModelPackage(role=role, 
                     model_package_arn=create_top_step.properties.ModelArn, 
                     sagemaker_session=session)
model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')

这给了我一个错误

代码语言:javascript
复制
...

/opt/conda/lib/python3.7/site-packages/sagemaker/model.py in _create_sagemaker_model(self, *args, **kwargs)
   1532             container_def["Environment"] = self.env
   1533 
-> 1534         self._ensure_base_name_if_needed(model_package_name.split("/")[-1])
   1535         self._set_model_name_if_needed()
   1536 

AttributeError: 'tuple' object has no attribute 'split'

我也怀疑这也是出于同样的原因。

我基本上遵循了这个教程

https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/tuning-step/sagemaker-pipelines-tuning-step.ipynb

EN

回答 1

Stack Overflow用户

发布于 2022-07-05 20:38:49

有两种方法-

1/在model中注册了调优作业中的最佳模型后,通过Lambda步骤运行您的模型部署代码。这里就是如何做到这一点的一个例子。将寄存器步骤的输出作为Lambda步骤的输入,并在Lambda函数中调用您的模型部署代码。

2在执行了sagemaker管道并注册了模型之后,使用model中已注册的模型ARN并调用部署代码。不能在管道执行上下文之外使用register_step.properties.ModelPackageArn

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72829407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档