ddd*_*ddd 5 lambda inference pandas amazon-sagemaker
我正在使用 Sagemaker 来训练和部署我的机器学习模型。至于预测,它将由 lambda 函数作为预定作业(每小时)执行。过程如下:
根据我的发现,通常输入将来自 lambda 有效载荷
data = json.loads(json.dumps(event))
payload = data['data']
print(payload)
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
ContentType='text/csv',
Body=payload)
Run Code Online (Sandbox Code Playgroud)
或从 s3 文件中读取: my_bucket = resource.Bucket('pred_data') #将其替换为您的 s3 存储桶名称。
obj = client.get_object(Bucket=my_bucket, Key='foo.csv')
lines= obj['Body'].read().decode('utf-8').splitlines()
reader = csv.reader(lines)
file = io.StringIO(lines)
response = runtime.invoke_endpoint(EndpointName=ENDPOINT,
ContentType='*/*',
Body = file.getvalue(),
Body=payload)
output = response['Body'].read().decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
由于我将从 s3 中提取原始数据并进行预处理,pandas因此将生成一个数据帧。是否可以直接将其作为 的输入invoke_endpoint?我可以上传的数据集中汇总到另一个S3存储,但它必须要经过decoding,csv.reader,StringIO和一切就像我发现还是有一个简单的方法来做到这一点的例子吗?这decode一步真的需要得到输出吗?
您可以在调用时InvokeEndpoint以任何格式发送任何您想要的有效负载。您可以控制任何一方的合约(假设您的模型支持它)。如果您使用的模型不是您创建的,请查看它是否支持预处理/后处理,这将允许您自己定义合同。
除此之外,我们经常看到客户做的一件事是在模型内进行处理,而不是在调用 SageMaker 的InvokeEndpoint. 一个常见的用例是在调用时接受需要进行预测的对象的 S3 路径InvokeEndpoint。然后模型将负责下载 S3 项目并对其进行转换,然后对该数据运行推理。
根据InvokeEndpoint响应,它可以执行相同的操作,模型可以将其上传到 S3,然后将 S3 密钥作为响应发回。这可能不是您想要做的,但这只是您使用 SageMaker 时所拥有的灵活性的另一个示例。