我在用作入口点的 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 中管道步骤的参数。