这里没有偏见,但我发现很难在 AWS 文档中找到任何内容。Microsoft Azure对我来说要容易得多。
这是我现在拥有的:
- 一个完全用Python构建的二进制分类应用程序,xgboost是ML模型。在这里,xgboost有一组从SageMaker获得的优化超参数。
- 一个 SageMaker 笔记本,用于启动 xgboost 的超参数优化作业。然后我手动复制并粘贴超参数和超参数到Python应用程序中的xgboost模型中进行预测。
如您所见,我的做法远非理想。我现在想做的是在 Python 应用程序中添加一段代码,以自动启动 SageMaker 中的超参数作业并返回最佳模型。这样,超参数作业是自动化的,我不需要再次执行复制和粘贴。
但是,我还不能做到这一点。我按照此文档安装了Python SageMaker API。我还有以下代码在 SageMaker 笔记本中执行 XGBoost 超参数优化:
def train_xgb_sagemaker(df_train, df_test):
pd.concat([df_train['show_status'], df_train.drop(['show_status'], axis=1)], axis=1).to_csv('train.csv',
index=False,
header=False)
pd.concat([df_test['show_status'], df_test.drop(['show_status'], axis=1)], axis=1).to_csv('validation.csv',
index=False, header=False)
boto3.Session().resource('s3').Bucket(bucket, prefix).upload_file(
'train.csv')
boto3.Session().resource('s3').Bucket(bucket, prefix).upload_file(
'validation.csv')
s3_input_train = sagemaker.s3_input(s3_data='s3://{}/{}/train'.format(bucket, prefix), content_type='csv')
s3_input_validation = sagemaker.s3_input(s3_data='s3://{}/{}/validation/'.format(bucket, prefix), content_type='csv')
print('train_path: ', s3_input_train)
print('validation_path: ', s3_input_validation)
# hyperparameter tuning of XGBoost - SageMaker
sess = sagemaker.Session()
container = get_image_uri(region, 'xgboost', 0.90 - 1)
xgb = sagemaker.estimator.Estimator(container,
role,
train_instance_count=1,
train_instance_type='ml.m4.xlarge',
output_path='s3://{}/{}/output'.format(params['BUCKET'], prefix),
sagemaker_session=sess)
xgb.set_hyperparameters(eval_metric='auc',
objective='binary:logistic',
num_round=100,
rate_drop=0.3,
tweedie_variance_power=1.4)
hyperparameter_ranges = {'eta': ContinuousParameter(0, 1),
'min_child_weight': ContinuousParameter(1, 10),
'alpha': ContinuousParameter(0, 2),
'max_depth': IntegerParameter(1, 10),
'num_round': IntegerParameter(1, 300)}
objective_metric_name = 'validation:auc'
tuner = HyperparameterTuner(xgb,
objective_metric_name,
hyperparameter_ranges,
max_jobs=20,
max_parallel_jobs=3)
tuner.fit({'train': s3_input_train, 'validation': s3_input_validation}, include_cls_metadata=False)
smclient.describe_hyper_parameter_tuning_job(
HyperParameterTuningJobName=tuner.latest_tuning_job.job_name)['HyperParameterTuningJobStatus']
print('Please check hyperparameter tuning for best models!')
time.sleep(4000)
# best_model_path = 's3://{}/{}/output/{}/output/model.tar.gz'.format(bucket, prefix, tuner.best_training_job())
return tuner.best_training_job()
所以问题是如何将这段代码嵌入到我的 Python 应用程序中,以便我可以在一个地方做所有事情?非常感谢您的任何提示,因为我已经在这个问题上挂了好几天了!
实际上有一个python SDK调用来部署超参数调优作业的最佳性能模型:
tuner.deploy()
在此处查找相关文档