我正在尝试从超参数调整作业到流水线对象中实施最佳估计器,以部署端点。
我已经尽力阅读了文档,以将调整工作的结果包括在管道中,但是我在创建Model()类对象时遇到了麻烦。
# This is the hyperparameter tuning job
tuner.fit({'train': s3_train, 'validation': s3_val},
include_cls_metadata=False)
#With a standard Model (Not from the tuner) the process was as follows:
scikit_learn_inferencee_model_name = sklearn_preprocessor.create_model()
xgb_model_name = Model(model_data=xgb_model.model_data, image=xgb_image)
model_name = 'xgb-inference-pipeline-' + timestamp_prefix
endpoint_name = 'xgb-inference-pipeline-ep-' + timestamp_prefix
sm_model = PipelineModel(
name=model_name,
role=role,
models=[
scikit_learn_inferencee_model_name,
xgb_model_name])
sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge',
endpoint_name=endpoint_name)
我希望能够使用调整工作中的结果干净地实例化一个模型对象,并将其传递给PipelineModel对象。任何指导表示赞赏。
答案 0 :(得分:0)
我认为您的做法正确。你有什么错误吗?请参阅此notebook,以从调谐器实例化模型并在推理管道中使用。
根据评论编辑先前的回复。要从超参数调整工作的最佳培训工作中创建模型,可以使用以下代码段
from sagemaker.tuner import HyperparameterTuner
from sagemaker.estimator import Estimator
from sagemaker.model import Model
# Attach to an existing hyperparameter tuning job.
xgb_tuning_job_name = 'my_xgb_hpo_tuning_job_name'
xgb_tuner = HyperparameterTuner.attach(xgb_tuning_job_name)
# Get the best XGBoost training job name from the HPO job
xgb_best_training_job = xgb_tuner.best_training_job()
print(xgb_best_training_job)
# Attach estimator to the best training job name
xgb_best_estimator = Estimator.attach(xgb_best_training_job)
# Create model to be passed to the inference pipeline
xgb_model = Model(model_data=xgb_best_estimator.model_data,
role=sagemaker.get_execution_role(),
image=xgb_best_estimator.image_name)