Вызов конечной точки aws sagemaker

У меня есть некоторые данные в S3, и я хочу создать лямбда-функцию для прогнозирования вывода с моей развернутой конечной точкой aws sagemaker, затем я снова помещаю выходные данные в S3. Необходимо ли в этом случае создавать шлюз api, как описано в этом ссылка? и в лямбда-функции то, что я должен поставить. Я ожидаю поставить (где найти данные, как вызвать конечную точку, куда поместить данные)

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 столбцов с плавающей запятой без заголовков, проблема в том, что строки возвращают список строк (каждая строка является элементом этого списка: ['11.55,65.23', '55 .68,69.56 '... ]) вызов работает хорошо, но ответ также является строкой: output = '65 .23 \ n, 65.23 \ n, 22.56 \ n, ... '

Итак, как сохранить этот вывод на S3 как файл csv

Спасибо


person Walid Sliti    schedule 11.02.2019    source источник
comment
Как предлагается ниже, используйте пакетное преобразование SageMaker. Это намного проще и дешевле.   -  person Guy    schedule 15.02.2019


Ответы (1)


Если ваша функция Lambda запланирована, вам не понадобится API-шлюз. Но если прогнозируемое действие будет инициировано пользователем, например, приложением, вам понадобится.

Когда вы вызываете конечную точку вызова, на самом деле вы вызываете конечную точку SageMaker, которая отличается от конечной точки шлюза API.

Общая архитектура SageMaker:

  1. API Gateway получает запрос, затем вызывает авторизатор, а затем вызывает вашу лямбду;
  2. Lambda с выполняет некоторый синтаксический анализ ваших входных данных, затем вызывает конечную точку прогнозирования SageMaker, затем обрабатывает результат и возвращается в ваше приложение.

По ситуации, которую вы описываете, я не могу сказать, является ли ваша задача академической или производственной.

Итак, как вы можете сохранить данные в виде CSV-файла из Lambda?

Я считаю, что вы можете просто проанализировать вывод, а затем просто загрузить файл в S3. Здесь вы будете разбирать вручную или с помощью библиотеки, с помощью boto3 вы можете загрузить файл. Результат вашей модели зависит от вашей реализации в образе SageMaker. Итак, если вам нужны данные ответа в другом формате, возможно, вам потребуется использовать пользовательское изображение. Обычно я использую собственное изображение, в котором я могу определить, как я хочу обрабатывать свои данные в запросах / ответах.

Что касается производственной задачи, я определенно рекомендую вам проверить задания пакетного преобразования в 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

Надеюсь, это поможет, дайте мне знать, если понадобится дополнительная информация.

С Уважением.

person Bruno Bitencourt Luiz    schedule 13.02.2019
comment
Привет, я сейчас работаю над развертыванием модели на SageMaker в производственной среде, я сравниваю метод «пакетного задания» и метод «конечной точки». Из вашего ответа у меня есть пара вопросов: 1). Означает ли это, что при использовании конечной точки нет способа указать выходной путь, мы можем использовать только лямбда? Что делать, если использовать StepFunction для работы с конечной точкой? 2.) Я понимаю, что «пакетное задание» похоже на временную конечную точку, если задание выполнено, временная конечная точка будет отключена, и это стоит меньше, чем использование конечной точки, но как насчет стороны безопасности? Спасибо, - person Cecilia; 26.11.2020
comment
Привет, Сесилия, я ответила на твои вопросы, но мой комментарий оказался слишком длинным, поэтому я написал файл сути. Извините. Полный комментарий - person Bruno Bitencourt Luiz; 28.11.2020
comment
Привет, Бруно, очень признателен, я прочитаю его, большое спасибо :) - person Cecilia; 28.11.2020