Invocar um endpoint multimodelo - Amazon SageMaker

Invocar um endpoint multimodelo

Para invocar um endpoint multimodelo, use o invoke_endpoint do runtime do SageMaker da mesma forma como faria para invocar um endpoint de modelo único, com uma alteração. Passe um novo parâmetro TargetModel especificando qual dos modelos do endpoint será o destino. A solicitação do runtime do SageMaker InvokeEndpoint oferece apoio a X-Amzn-SageMaker-Target-Model como um novo cabeçalho que segue o caminho relativo do modelo especificado para invocação. O sistema SageMaker constrói o caminho absoluto do modelo combinando o prefixo fornecido como parte da chamada da API CreateModel com o caminho relativo do modelo.

Os procedimentos a seguir são os mesmos para endpoints multimodelo compatíveis com CPU e GPU.

AWS SDK for Python (Boto 3)

A solicitação de predição de exemplo a seguir usa o AWSSDK para Python (Boto 3) no caderno de exemplo.

response = runtime_sagemaker_client.invoke_endpoint( EndpointName = "<ENDPOINT_NAME>", ContentType = "text/csv", TargetModel = "<MODEL_FILENAME>.tar.gz", Body = body)
AWS CLI

O seguinte exemplo mostra como fazer uma solicitação CSV com duas linhas usando a AWS Command Line Interface (AWS CLI):

aws sagemaker-runtime invoke-endpoint \ --endpoint-name "<ENDPOINT_NAME>" \ --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \ --content-type "text/csv" \ --target-model "<MODEL_NAME>.tar.gz" output_file.txt

Um output_file.txt com informações sobre suas solicitações de inferência é feito se a inferência for bem-sucedida. Para obter mais exemplos de como fazer predições com oAWS CLI, consulte Como fazer predições com o AWS CLI na documentação do SageMaker Python SDK.

O endpoint multimodelo carrega dinamicamente os modelos de destino conforme necessário. Você observará isso quando executar o MME Sample Notebook à medida que ele itera as invocações aleatórias em relação a vários modelos de destino hospedados por trás de um único endpoint. O primeiro pedido para um determinado modelo leva mais tempo porque o modelo precisa ser baixado do Amazon Simple Storage Service (Amazon S3) e carregado na memória. Isso é chamado de inicialização a frio e espera-se que, em terminais de vários modelos, seja otimizado para melhor relação preço/desempenho para os clientes. As chamadas subsequentes terminam mais rapidamente porque não há sobrecarga adicional após o modelo ter sido carregado.

nota

Para instâncias com compatibilidade com GPU, o código de resposta HTTP 507 do contêiner GPU indica falta de memória ou outros recursos. Isso faz com que modelos não utilizados sejam descarregados do contêiner para carregar modelos mais frequentemente usados.

Repetir solicitações em erros ModelNotReadyException

Na primeira vez que você chama invoke_endpoint para um modelo, o modelo é baixado do Amazon Simple Storage Service e carregado no contêiner de inferência. Isso faz com que a primeira chamada demore mais para retornar. As chamadas subsequentes para o mesmo modelo terminam mais rapidamente, porque o modelo já está carregado.

O SageMaker retorna uma resposta para uma chamada para invoke_endpoint em até 60 segundos. Alguns modelos são grandes demais para serem baixados em 60 segundos. Se o modelo não terminar de carregar antes do limite de tempo limite de 60 segundos, a solicitação invoke_endpoint retornará com o código de erro ModelNotReadyException e o modelo continuará sendo baixado e carregado no contêiner de inferência por até 360 segundos. Se você receber um código de erro ModelNotReadyException para uma solicitação invoke_endpoint, tente fazer a solicitação novamente. Por padrão, os AWS SDKs para Python (Boto 3) (usando o modo de repetição Legacy) e as solicitações de repetição de Java resultam em invoke_endpoint erros ModelNotReadyException. Você pode configurar a estratégia de repetição para continuar repetindo a solicitação por até 360 segundos. Se você espera que seu modelo leve mais de 60 segundos para ser baixado e carregado no contêiner, defina o tempo limite do soquete do SDK para 70 segundos. Para obter mais informações sobre como configurar a estratégia de repetição para o AWS SDK for Python (Boto3), consulte Configurando um modo de repetição. O código a seguir mostra um exemplo que configura a estratégia de repetição para repetir as chamadas invoke_endpoint por até 180 segundos.

import boto3 from botocore.config import Config # This example retry strategy sets the retry attempts to 2. # With this setting, the request can attempt to download and/or load the model # for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds) config = Config( read_timeout=70, retries={ 'max_attempts': 2 # This value can be adjusted to 5 to go up to the 360s max timeout } ) runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)