Как я могу вызвать конечную точку 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.

Документация с примером:

https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/

Надеюсь, поможет.

Как упоминалось в других ответах, ваш лучший вариант — это конечная точка SageMaker с REST API в API Gateway. Затем API позволяет вам контролировать авторизацию и «скрывает» серверную конечную точку SageMaker от клиентов API, уменьшая связь между клиентами API (вашим веб-сайтом) и вашим сервером. (Кстати, вам не нужна там функция Lambda, вы можете напрямую интегрировать REST API с SageMaker в качестве бэкенда).

Однако, если вы просто тестируете конечную точку после ее развертывания и хотите быстро получить некоторые выводы с помощью Python, есть два варианта:

  1. После развертывания вашей конечной точки с помощьюpredictor = model.deploy(...), если у вас все еще есть объект, доступный в вашей области Python, вы можете просто запуститьpredictor.predict(), как описано здесь . Однако весьма вероятно, что вы развернули конечную точку некоторое время назад и больше не можете получить доступ к объекту, и, естественно, никто не хочет повторно развертывать всю конечную точку только для того, чтобы получитьpredictor.

  2. Если ваша конечная точка уже существует, вы можете вызвать ее, используя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.

Другие вопросы по тегам