python - 调用 aws sagemaker 端点

标签 python amazon-s3 amazon-sagemaker

我在 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')

我的数据是一个 csv 文件,包含 2 列 float ,没有标题,问题是行返回一个字符串列表(每行都是该列表的一个元素:['11.55,65.23', '55.68,69.56' ...])调用工作正常,但响应也是一个字符串:output = '65.23\n,65.23\n,22.56\n,...'

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

谢谢

最佳答案

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

当您调用调用端点时,实际上您正在调用 SageMaker 端点,这与 API 网关端点不同。

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

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

问候。

关于python - 调用 aws sagemaker 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54629890/

相关文章:

python - 如何在 pygame 中检测可调整大小的窗口状态并在 Linux 中将其取消最大化?

python - 使用正则表达式提取域

javascript - 获取 s3 中存储的文件的正确创建日期和修改日期

ruby-on-rails - 获取不会过期的永久 amazon s3 对象 url

machine-learning - Sagemaker XG-Boost(目标=reg :logistic) not working on highly imbalanced data set

python - 如何操作 pandas 数据框列,其中列名是带有后缀的日期时间字符串?

python - Django Haystack 过滤

ruby-on-rails - 载波图像上传到s3 "hostname does not match certificate error"

amazon-web-services - 当前的AWS身份不是Sagemaker的角色吗?

object-detection - 为不同的任务重用创建的数据集(对象检测 - 图像分类)