调用aws sagemaker端点

问题描述 投票:0回答:1

我在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,...'

那么如何将此输出保存为S3作为csv文件

谢谢

python amazon-s3 amazon-sagemaker
1个回答
2
投票

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

当您调用invoke端点时,实际上您正在调用SageMaker端点,该端点与API Gateway端点不同。

SageMaker的常见架构是:

  1. API Gateway接收请求然后调用授权者,然后调用您的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

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

问候。

© www.soinside.com 2019 - 2024. All rights reserved.