Как я могу вызвать конечную точку AWS SageMaker, чтобы получить выводы?
Я хочу получать прогнозы в реальном времени, используя мою модель машинного обучения с помощью SageMaker. Я хочу напрямую получать выводы на моем сайте. Как я могу использовать развернутую модель для прогнозов?
4 ответа
Конечные точки Sagemaker публично не доступны в Интернете. Итак, вам понадобится какой-то способ создания общедоступной конечной точки HTTP, которая может направлять запросы к вашей конечной точке Sagemaker. Один из способов сделать это - использовать функцию AWS Lambda, предоставляемую шлюзом API.
Я создал пример веб-приложения, которое берет изображения с веб-камеры и передает их в конечную точку Sagemaker для классификации. При этом используется стратегия конечной точки API Gateway -> Lambda -> Sagemaker, которую я описал выше. Вы можете увидеть весь пример, включая инструкции о том, как настроить лямбду (и код для вставки лямбды) в этом хранилище GitHub: https://github.com/gabehollombe-aws/webcam-sagemaker-inference/
Используйте CLI следующим образом:
aws sagemaker-runtime invoke-endpoint \
--endpoint-name <endpoint-name> \
--body '{"instances": [{"in0":[863],"in1":[882]}]}' \
--content-type application/json \
--accept application/json \
results
Я нашел его здесь, в руководстве по доступу к Sagemaker через API Gateway.
Вы можете вызвать конечную точку SageMaker с помощью API Gateway или Lambda.
Lambda:
Используйте sagemaker aws sdk и вызывайте конечную точку с помощью лямбды.
API-шлюз:
Используйте API-шлюз и передавайте параметры конечной точке с помощью прокси-сервера службы AWS.
Документация с примером:
Надеюсь, поможет.
Как упоминалось в других ответах, ваш лучший вариант — это конечная точка SageMaker с REST API в API Gateway. Затем API позволяет вам контролировать авторизацию и «скрывает» серверную конечную точку SageMaker от клиентов API, уменьшая связь между клиентами API (вашим веб-сайтом) и вашим сервером. (Кстати, вам не нужна там функция Lambda, вы можете напрямую интегрировать REST API с SageMaker в качестве бэкенда).
Однако, если вы просто тестируете конечную точку после ее развертывания и хотите быстро получить некоторые выводы с помощью Python, есть два варианта:
После развертывания вашей конечной точки с помощью
predictor = model.deploy(...)
, если у вас все еще есть объект, доступный в вашей области Python, вы можете просто запуститьpredictor.predict()
, как описано здесь . Однако весьма вероятно, что вы развернули конечную точку некоторое время назад и больше не можете получить доступ к объекту, и, естественно, никто не хочет повторно развертывать всю конечную точку только для того, чтобы получитьpredictor
.Если ваша конечная точка уже существует, вы можете вызвать ее, используя
boto3
следующим образом, как описано здесь :import boto3 payload = "string payload" endpoint_name = "your-endpoint-name" sm_runtime = boto3.client("runtime.sagemaker") response = sm_runtime.invoke_endpoint( EndpointName=endpoint_name, ContentType="text/csv", Body=payload ) response_str = response["Body"].read().decode()
Естественно, вы можете настроить вышеуказанный вызов в соответствии с вашим типом контента, например, для отправки данных JSON. Тогда просто помните о (де)сериализаторе, который использует конечная точка, а также о ContentType в аргументе дляinvoke_endpoint
.