Sessões dinâmicas com modelos da Amazon SageMaker - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Sessões dinâmicas com modelos da Amazon SageMaker

Ao enviar solicitações para um endpoint de SageMaker inferência da Amazon, você pode optar por rotear as solicitações para uma sessão com estado. Durante uma sessão com estado, você envia várias solicitações de inferência para a mesma instância de ML, e a instância facilita a sessão.

Normalmente, quando você invoca um endpoint de inferência, a Amazon SageMaker encaminha sua solicitação para qualquer instância de ML entre as várias instâncias que o endpoint hospeda. Esse comportamento de roteamento ajuda a minimizar a latência distribuindo uniformemente o tráfego de inferência. No entanto, um resultado do comportamento de roteamento é que você não pode prever qual instância atenderá à sua solicitação.

Essa imprevisibilidade é uma limitação se você pretende enviar sua solicitação para um modelo com estado. Um modelo com estado tem um contêiner que armazena em cache os dados de contexto que ele recebe das solicitações de inferência. Como os dados são armazenados em cache, você pode interagir com o contêiner enviando várias solicitações e, com cada solicitação, não é necessário incluir o contexto completo da interação. Em vez disso, o modelo usa os dados de contexto em cache para informar sua previsão.

Os modelos com estado são ideais quando os dados de contexto da interação são muito grandes, como quando incluem o seguinte:

  • Arquivos de texto grandes

  • Histórias de bate-papo longas

  • Dados multimídia (imagens, vídeo e áudio) para modelos multimodais

Nesses casos, se você transmitir o contexto completo a cada solicitação, a latência da rede de suas solicitações diminuirá e a capacidade de resposta do seu aplicativo diminuirá.

Antes que seu endpoint de inferência possa suportar uma sessão com estado, ele deve hospedar um modelo com estado. A implementação do modelo com estado é de sua propriedade. A Amazon SageMaker possibilita que você encaminhe suas solicitações para uma sessão com estado, mas não fornece modelos com estado que você possa implantar e usar.

Para ver um exemplo de notebook e modelo de contêiner que demonstra como as interações com estado são implementadas, consulte. Exemplos de implementação

Para obter informações sobre como implementar modelos com estado TorchServe, consulte Inferência de estado no repositório. TorchServe GitHub

Como funcionam as sessões com estado

Durante uma sessão com estado, seu aplicativo interage com o contêiner do modelo das seguintes maneiras.

Para iniciar uma sessão com estado
  1. Para iniciar uma sessão com um modelo com estado hospedado pela Amazon SageMaker, seu cliente envia uma InvokeEndpointsolicitação com o. SageMaker API Para o parâmetro de SessionID solicitação, o cliente pede SageMaker para iniciar uma nova sessão especificando o valorNEW_SESSION. Na carga útil da solicitação, o cliente também instrui o contêiner a iniciar uma nova sessão. A sintaxe dessa declaração varia de acordo com a implementação do seu contêiner. Depende de como seu código de contêiner lida com a carga útil da solicitação.

    O exemplo a seguir inicia uma nova sessão usando o SDK for Python (Boto3):

    import boto3 import sagemaker import json payload = { "requestType":"NEW_SESSION" } payload = json.dumps(payload) smr = boto3.client( 'sagemaker-runtime', region_name="region_name", endpoint_url="endoint_url") create_session_response = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId="NEW_SESSION")
  2. Seu modelo de contêiner processa a solicitação do seu cliente iniciando uma nova sessão. Para a sessão, ele armazena em cache os dados que o cliente envia na carga útil da solicitação. Ele também cria um ID de sessão e define um timestamp de time to live (TTL). Esse timestamp indica quando a sessão expira. O contêiner deve fornecer o ID da sessão e o timestamp para a Amazon SageMaker definindo o seguinte HTTP cabeçalho na resposta:

    X-Amzn-SageMaker-Session-Id: session_id; Expires=yyyy-mm-ddThh:mm:ssZ
  3. Na resposta à InvokeEndpoint solicitação, a Amazon SageMaker fornece o ID da sessão e o TTL timestamp para o parâmetro de NewSessionID resposta.

    O exemplo a seguir extrai o ID da sessão da invoke_endpoint resposta:

    session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
Para continuar uma sessão com estado
  • Para usar a mesma sessão para uma solicitação de inferência subsequente, seu cliente envia outra InvokeEndpoint solicitação. Para o parâmetro de SessionID solicitação, ele especifica o ID da sessão. Com esse ID, SageMaker encaminha a solicitação para a mesma instância de ML em que a sessão foi iniciada. Como seu contêiner já armazenou em cache a carga útil da solicitação original, seu cliente não precisa passar os mesmos dados de contexto que estavam na solicitação original.

    O exemplo a seguir continua uma sessão passando o ID da sessão com o parâmetro de SessionId solicitação:

    smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
Para fechar uma sessão com estado
  1. Para fechar uma sessão, seu cliente envia uma InvokeEndpoint solicitação final. Para o parâmetro de SessionID solicitação, o cliente fornece o ID da sessão. Na carga útil no corpo da solicitação, seu cliente afirma que o contêiner deve fechar a sessão. A sintaxe dessa declaração varia de acordo com a implementação do seu contêiner.

    O exemplo a seguir fecha uma sessão:

    payload = { "requestType":"CLOSE" } payload = json.dumps(payload) closeSessionResponse = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
  2. Ao fechar a sessão, o contêiner retorna o ID da sessão SageMaker definindo o seguinte HTTP cabeçalho na resposta:

    X-Amzn-SageMaker-Closed-Session-Id: session_id
  3. Na resposta à InvokeEndpoint solicitação do cliente, SageMaker fornece o ID da sessão para o parâmetro de ClosedSessionId resposta.

    O exemplo a seguir extrai o ID da sessão fechada da invoke_endpoint resposta:

    closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]

Exemplos de implementação

O exemplo de notebook a seguir demonstra como implementar o contêiner para um modelo com estado. Também demonstra como um aplicativo cliente inicia, continua e fecha uma sessão com estado.

LLaVAinferência estadual com SageMaker

O notebook usa o modelo LLaVA: Large Language and Vision Assistant, que aceita imagens e solicitações de texto. O notebook carrega uma imagem para o modelo e, em seguida, faz perguntas sobre a imagem sem precisar reenviá-la a cada solicitação. O contêiner do modelo usa a TorchServe estrutura. Ele armazena em cache os dados da imagem na GPU memória.