5

我正在为时间序列数据构建一个机器学习管道,其目标是频繁地重新训练和更新模型以进行预测。

  • 我编写了一个预处理代码来处理时间序列变量并对其进行转换。

我对如何使用相同的预处理代码进行训练和推理感到困惑?我应该编写一个 lambda 函数来预处理我的数据还是有其他方法

消息来源调查:

aws sagemaker 团队给出的两个示例使用 AWS Glue 进行 ETL 转换。

inference_pipeline_sparkml_xgboost_abalone

inference_pipeline_sparkml_blazingtext_dbpedia

我是试图学习、理解和构建流程的 aws sagemaker 的新手。任何帮助表示赞赏!

4

2 回答 2

0

我在用作入口点的 python 脚本中使用管道。在此管道中,作为第一步,我正在执行预处理。管道保存为模型。因此,模型端点最终也包括预处理。详细信息(我使用的是 scikit,但对于 tensorflow 应该类似):

例如,如果您想像这样打电话给您的火车:

from sagemaker.sklearn.estimator import SKLearn

sklearn_estimator = SKLearn(
  entry_point='script.py',
  role = 'xxx',
  train_instance_count=1,
  train_instance_type='ml.c5.xlarge',
  framework_version='0.20.0',
  hyperparameters = {'cross-validation': 5,
                   'scoring': 'accuracy'})

然后你有一个入口点脚本。在这个脚本('script.py')中,您可以有几个步骤成为最终保存的模型的一部分。例如:

tfidf = TfidfVectorizer(strip_accents=None,
                    lowercase=False,
                    preprocessor=None)

....

lr_tfidf = Pipeline([('vect', tfidf),
                 ('clf', LogisticRegression(random_state=0))])

您需要在训练结束后通过 joblib.dump 保存您的模型。此存储模型用于创建 sagemaker 模型和模型端点。当我最终调用 predictor.predict(X_test) 时,管道的第一步(我的 proeprocessing)也被执行并应用于 X_test。

Sagemakers 支持不同的预处理方式。我只是想分享一个相当简单的,适合我的场景。我正在使用 GridSearch 作为 script.py 中管道步骤的参数。

于 2019-11-29T11:59:12.307 回答
0

以倒退的方式回答问题。

从您的示例中,下面的代码段是将 2 个模型放在一起的推理管道。在这里,我们需要删除 sparkml_model 并获取我们的 sklearn 模型。

sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])

在放置 sklearn 模型之前,我们需要 SageMaker 版本的 SKLearn 模型。

首先使用 SageMaker Python 库创建 SKLearn Estimator。

sklearn_preprocessor = SKLearn(
    entry_point=script_path,
    role=role,
    train_instance_type="ml.c4.xlarge",
    sagemaker_session=sagemaker_session)

script_path - 这是包含所有预处理逻辑或转换逻辑的 python 代码。下面给出的链接中的“sklearn_abalone_featurizer.py”。

训练 SKLearn 估计器

sklearn_preprocessor.fit({'train': train_input})

从可以放入推理管道的 SKLearn Estimator 创建 SageMaker 模型。

sklearn_inference_model = sklearn_preprocessor.create_model()

Inference PipeLineModel 创建将按如下所示进行修改。

sm_model = PipelineModel(name=model_name, role=role, models=[sklearn_inference_model, xgb_model])

有关更多详细信息,请参阅以下链接。

https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.ipynb

于 2019-11-25T22:31:17.573 回答