我使用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
这里'数据'是一个pandas数据帧。
现在我想在调用端点时使用这些le1,le2。我想在sagemaker本身进行预处理而不是在我的java代码中。
答案 0 :(得分:2)
一种选择是将预处理代码作为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
答案 1 :(得分:2)
SageMaker中现在有一个新功能,称为推理管道。这使您可以构建一个线性序列,包含两个到五个容器,用于预处理/后期处理请求。然后将整个管道部署在单个端点上。
https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html
答案 2 :(得分:1)
您需要编写脚本并在创建模型时提供该脚本。该脚本将有一个input_fn,您可以在其中进行预处理。 有关更多详细信息,请参阅aws文档。
https://docs.aws.amazon.com/sagemaker/latest/dg/mxnet-training-inference-code-template.html
答案 3 :(得分:0)
SageMaker MXNet容器为open source。
你在这里添加pandas do 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