在 sagemaker 中进行预测之前,如何预处理输入数据?
Posted
技术标签:
【中文标题】在 sagemaker 中进行预测之前,如何预处理输入数据?【英文标题】:how can I preprocess input data before making predictions in sagemaker? 【发布时间】:2018-09-09 21:25:03 【问题描述】:我正在使用 java Sagemaker SDK 调用 Sagemaker 端点。我发送的数据几乎不需要清理,模型就可以将其用于预测。如何在 Sagemaker 中做到这一点。
我在 Jupyter 笔记本实例中有一个预处理功能,它在传递数据以训练模型之前清理训练数据。现在我想知道我是否可以在调用端点时使用该函数,或者该函数是否已被使用? 如果有人愿意,我可以显示我的代码吗?
编辑 1 基本上,在预处理中,我正在做标签编码。这是我的预处理功能
def preprocess_data(data):
print("entering preprocess fn")
# convert document id & type to labels
le1 = preprocessing.LabelEncoder()
le1.fit(data["documentId"])
data["documentId"]=le1.transform(data["documentId"])
le2 = preprocessing.LabelEncoder()
le2.fit(data["documentType"])
data["documentType"]=le2.transform(data["documentType"])
print("exiting preprocess fn")
return data,le1,le2
这里的“数据”是一个熊猫数据框。
现在我想在调用端点时使用这些 le1,le2。我想在 sagemaker 本身而不是在我的 java 代码中进行此预处理。
【问题讨论】:
【参考方案1】:现在 SageMaker 中有一项新功能,称为推理管道。这使您可以构建由两到五个容器组成的线性序列,用于预处理/后处理请求。然后将整个管道部署在单个端点上。
https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html
【讨论】:
我读过,但有几个问题..它是否满足除了实时请求处理之外还需要批处理的需求? 您可以将推理管道用于实时端点和批量转换,但不能同时使用 :) 管道要么部署到端点,要么部署到转换器,您不能混合使用。跨度> 如果我喜欢实时但有时又想做批处理怎么办?我以为我们可以使用推理管道实现切换功能?! (也许我错了) 您可以使用相同的管道(即相同的容器序列),但您必须专门部署到端点或批量转换。因此,如果您已经运行了一个端点,则必须运行一个额外的批量转换作业。 是的,现在更有意义了。还考虑到批量转换成本会因作业运行所花费的时间而异......较小的批次不会成为问题。【参考方案2】:SageMaker MXNet 容器是open source。
你在这里添加 pandas 做 docker 容器:https://github.com/aws/sagemaker-mxnet-containers/blob/master/docker/1.1.0/Dockerfile.gpu#L4
repo 还包含有关如何构建容器的说明:https://github.com/aws/sagemaker-mxnet-containers#building-your-image
sagemakercontaineramazon-sagemaker
【讨论】:
【参考方案3】:一种选择是将您的预处理代码作为 AWS Lambda 函数的一部分,并在预处理完成后使用该 Lambda 调用 SageMaker 的调用端点。 AWS Lambda 支持 Python,应该很容易拥有与 Jupyter 笔记本中相同的代码,也在该 Lambda 函数中。您还可以使用该 Lambda 调用外部服务(例如 DynamoDB)来查找数据以丰富数据。
您可以在 SageMaker 文档中找到更多信息:https://docs.aws.amazon.com/sagemaker/latest/dg/getting-started-client-app.html
【讨论】:
抱歉回复晚了,我已经更新了我的问题。基本上,我必须在调用端点时使用与必须使用标签编码器相同的预处理函数。【参考方案4】:您需要编写一个脚本并在创建模型时提供该脚本。该脚本将有一个 input_fn ,您可以在其中进行预处理。 有关更多详细信息,请参阅 aws 文档。
https://docs.aws.amazon.com/sagemaker/latest/dg/mxnet-training-inference-code-template.html
【讨论】:
谢谢@Raman。我正在尝试实现这一点。现在我无法在脚本中使用 pandas 库。该脚本正在 mxnet 环境中执行,所以我收到此错误 - ImportError: No module named 'pandas'。你知道我们如何在脚本中使用外部库吗? 签出这个响应的响应。 How do I load python modules which are not available in Sagemaker? 这是否只有在 Sagemaker 中使用 Apache MXNet 时才有可能?以上是关于在 sagemaker 中进行预测之前,如何预处理输入数据?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 AWS Sagemaker 推理中添加复杂的预处理
AWS Sagemaker boto3 - 通过端点预测与在本地运行模型获得不同的预测
如何在 AWS Sagemaker 中检索分段掩码中使用的标签