【问题标题】:Invoke aws sagemaker endpoint调用 aws sagemaker 端点
【发布时间】:2019-07-04 21:47:27
【问题描述】:

我在 S3 中有一些数据,我想创建一个 lambda 函数来使用我部署的 aws sagemaker 端点预测输出,然后我再次将输出放入 S3。在这种情况下是否有必要创建一个像 link 中描述的 API 网关?在 lambda 函数中我必须输入什么。我期望放置(在哪里找到数据,如何调用端点,将数据放在哪里)

import boto3
import io
import json
import csv
import os


client = boto3.client('s3') #low-level functional API

resource = boto3.resource('s3') #high-level object-oriented API
my_bucket = resource.Bucket('demo-scikit-byo-iris') #subsitute this for your s3 bucket name. 

obj = client.get_object(Bucket='demo-scikit-byo-iris', Key='foo.csv')
lines= obj['Body'].read().decode('utf-8').splitlines()
reader = csv.reader(lines)

import io
file = io.StringIO(lines)

# grab environment variables
runtime= boto3.client('runtime.sagemaker')

response = runtime.invoke_endpoint(
    EndpointName= 'nilm2',
    Body = file.getvalue(),
    ContentType='*/*',
    Accept = 'Accept')

output = response['Body'].read().decode('utf-8')

我的数据是 2 列浮点数的 csv 文件,没有标题,问题是行返回一个字符串列表(每一行都是这个列表的一个元素:['11.55,65.23', '55.68,69.56' ...]) 调用运行良好,但响应也是一个字符串: output = '65.23\n,65.23\n,22.56\n,...'

那么如何将这个输出保存为 csv 文件到 S3

谢谢

【问题讨论】:

  • 如下所示,使用 SageMaker 批量转换。它更简单,成本更低。

标签: python amazon-s3 amazon-sagemaker


【解决方案1】:

如果您的 Lambda 函数已安排,那么您将不需要 API 网关。但是,如果预测操作将由用户触发,例如由应用程序触发,您将需要。

当您调用调用端点时,实际上您调用的是 SageMaker 端点,它与 API 网关端点不同。

SageMaker 的常见架构是:

  1. API 网关接收请求然后调用授权方,然后 调用您的 Lambda;
  2. Lambda 对您的输入数据进行一些解析,然后调用您的 SageMaker 预测端点,然后处理结果并返回到您的应用程序。

根据你描述的情况,我不能说你的任务是学术还是生产。

那么,如何将 Lambda 中的数据保存为 CSV 文件?

我相信您可以只解析输出,然后将文件上传到 S3。在这里您将手动或使用 lib 进行解析,使用 boto3 您可以上传文件。模型的输出取决于您在 SageMaker 图像上的实施。因此,如果您需要其他格式的响应数据,也许您需要使用custom image。我通常使用自定义图像,我可以定义如何处理请求/响应中的数据。

就生产任务而言,我当然建议您查看 SageMaker 的批量转换作业。您可以提供输入文件(S3 路径)和目标文件(另一个 S3 路径)。 SageMaker 将运行批量预测并将结果保存在一个文件中。此外,您无需将模型部署到端点,当此作业运行时,将创建端点实例、下载数据以进行预测、进行预测、上传输出并关闭实例。你只需要一个训练有素的模型。

这里有一些关于批量转换作业的信息:

https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-batch.html

https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-batch-transform.html

希望对您有所帮助,如果需要更多信息,请告诉我。

问候。

【讨论】:

  • 您好,我目前正在生产中的 SageMaker 上部署模型,我正在比较“批处理作业”方法和“端点”方法。从您的回答中,我有几个问题:1)。这是否意味着使用端点时无法指定输出路径,我们只能使用 lambda?如果使用 StepFunction 与端点一起工作怎么办? 2.)我的理解是“批处理作业”就像一个临时端点,如果工作完成,临时端点将被关闭,并且它的成本低于使用端点,但是安全方面呢?谢谢,
  • 嗨 Cecilia,我已经回答了你的问题,但是我的评论太长了,所以我写了一个 gist 文件。对不起。 Full comment
  • 嗨布鲁诺,非常感谢,我会读一读,非常感谢:)
猜你喜欢
  • 2018-11-07
  • 2019-04-23
  • 2021-09-28
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多