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á.
Código de inferência personalizado com serviços de host
Esta seção explica como a Amazon SageMaker AI interage com um contêiner Docker que executa seu próprio código de inferência para serviços de hospedagem. Use essas informações para gravar um código de inferência e criar uma imagem do Docker.
Tópicos
Como o contêiner deve responder a solicitações de inferência
Como o contêiner deve responder a solicitações de verificação de integridade (ping)
Contrato de contêiner para oferecer suporte a recursos de streaming bidirecional
Use um registro privado do Docker para contêineres de inferência em tempo real
Como a SageMaker IA executa sua imagem de inferência
Para que um contêiner funcione como um executável, é preciso configurá-lo com uma instrução ENTRYPOINT em um Dockerfile. Observe o seguinte:
-
Para inferência do modelo, a SageMaker IA executa o contêiner como:
docker runimageserveSageMaker A IA substitui
CMDas declarações padrão em um contêiner especificando oserveargumento após o nome da imagem. O argumentoservesubstitui os argumentos que você fornece com o comandoCMDno Dockerfile. -
SageMaker A IA espera que todos os contêineres sejam executados com usuários root. Crie seu contêiner para que ele use somente usuários-raiz. Quando a SageMaker IA executa seu contêiner, os usuários que não têm acesso no nível raiz podem causar problemas de permissões.
-
Recomendamos que você use a forma
execda instruçãoENTRYPOINT:ENTRYPOINT ["executable", "param1", "param2"]Por exemplo:
ENTRYPOINT ["python", "k_means_inference.py"]A forma
execda instruçãoENTRYPOINTinicia o executável diretamente, não como elemento filho de/bin/sh. Isso permite que ele receba sinais comoSIGTERMeSIGKILLdas operações da SageMaker API, o que é um requisito.Por exemplo, quando você usa a
CreateEndpointAPI para criar um endpoint, a SageMaker IA provisiona o número de instâncias de computação de ML exigidas pela configuração do endpoint, que você especifica na solicitação. SageMaker A IA executa o contêiner Docker nessas instâncias.Se você reduzir o número de instâncias que apoiam o endpoint (chamando a
UpdateEndpointWeightsAndCapacitiesAPI), a SageMaker IA executa um comando para interromper o contêiner do Docker nas instâncias que estão sendo encerradas. Primeiramente, o comando envia o sinalSIGTERMe, então, envia o sinalSIGKILL30 segundos depois.Se você atualizar o endpoint (chamando a
UpdateEndpointAPI), a SageMaker AI lançará outro conjunto de instâncias de computação de ML e executará os contêineres do Docker que contêm seu código de inferência neles. Em seguida, ele executará um comando para interromper os contêineres anteriores do Docker. Para interromper um contêiner do Docker, primeiramente, o comando envia o sinalSIGTERMe, 30 segundos depois, envia o sinalSIGKILL. -
SageMaker A IA usa a definição de contêiner que você forneceu em sua
CreateModelsolicitação para definir variáveis de ambiente e o nome do host DNS para o contêiner da seguinte forma:-
Ele define variáveis de ambiente usando o
ContainerDefinition.Environmentstring-to-string mapa. -
Ele define o nome de host DNS usando
ContainerDefinition.ContainerHostname.
-
-
Se você planeja usar dispositivos de GPU para inferências de modelo (especificando instâncias de cálculo de ML baseadas em GPU na sua solicitação
CreateEndpointConfig), verifique se os seus contêineres são compatíveis comnvidia-docker. Não empacote drivers NVIDIA com a imagem. Para obter mais informações sobre onvidia-docker, consulte NVIDIA/nvidia-docker. -
Você não pode usar o
tiniinicializador como seu ponto de entrada em contêineres de SageMaker IA porque ele fica confuso com os argumentostraine.serve
Como a SageMaker IA carrega seus artefatos de modelo
Em sua solicitação de CreateModelAPI, você pode usar o S3DataSource parâmetro ModelDataUrl or para identificar o local do S3 onde os artefatos do modelo são armazenados. SageMaker A IA copia os artefatos do seu modelo da localização do S3 para o /opt/ml/model diretório para serem usados pelo seu código de inferência. Seu contêiner tem acesso somente leitura ao /opt/ml/model. Não grave nesse diretório.
O ModelDataUrl deve apontar para um arquivo tar.gz. Caso contrário, a SageMaker IA não baixará o arquivo.
Se você treinou seu modelo em SageMaker IA, os artefatos do modelo são salvos como um único arquivo tar compactado no Amazon S3. Se você treinou seu modelo fora da SageMaker IA, precisará criar esse único arquivo tar compactado e salvá-lo em um local do S3. SageMaker O AI descompacta esse arquivo tar no opt/ml/model diretório/antes do início do contêiner.
Para implantar grandes modelos, recomendamos que você siga Implantação de modelos não compactados.
Como o contêiner deve responder a solicitações de inferência
Para obter inferências, o aplicativo cliente envia uma solicitação POST para o endpoint de SageMaker IA. SageMaker A IA passa a solicitação para o contêiner e retorna o resultado da inferência do contêiner para o cliente.
Para obter mais informações sobre as solicitações de inferência que seu contêiner receberá, consulte as seguintes ações na Amazon SageMaker AI API Reference:
Requisitos para contêineres de inferência
Para responder às solicitações de inferência, seu contêiner deve atender aos seguintes requisitos:
-
SageMaker A IA remove todos os
POSTcabeçalhos, exceto aqueles suportados peloInvokeEndpoint. SageMaker A IA pode adicionar cabeçalhos adicionais. É necessário que os contêineres de inferência consigam ignorar esses cabeçalhos adicionais com segurança. -
Para receber solicitações de inferência, o contêiner deve ter um servidor web ouvindo na porta 8080 e deve aceitar solicitações
POSTpara os endpoints/invocationse/ping. -
Os contêineres de modelo do cliente devem aceitar solicitações de conexão de soquete dentro de 250 ms.
-
Os contêineres de modelo de um cliente devem responder a solicitações dentro de 60 segundos. O modelo em si pode ter um tempo máximo de processamento de 60 segundos antes de responder às
/invocations. Se o seu modelo precisar de 50 a 60 segundos de tempo de processamento, o tempo limite de soquete do SDK deverá ser definido como 70 segundos. -
O modelo de contêiner de um cliente que ofereça suporte a streaming bidirecional deve:
-
suporta WebSockets conexões na porta 8080 a/invocations-bidirectional-stream por padrão.
-
tem um servidor web escutando na porta 8080 e deve aceitar solicitações POST nos endpoints /ping.
-
Além das verificações de integridade do contêiner via HTTP, o contêiner deve responder com Pong Frame per (RFC6455
), para enviar o WebSocket Ping Frame.
-
exemplo funções de invocação
Os exemplos a seguir demonstram como o código em seu contêiner pode processar solicitações de inferência. Esses exemplos tratam das solicitações que os aplicativos clientes enviam usando a InvokeEndpoint ação.
exemplo funções de invocação para solicitações de streaming
Os exemplos a seguir demonstram como o código em seu contêiner pode processar solicitações de inferência de streaming. Esses exemplos tratam das solicitações que os aplicativos clientes enviam usando a InvokeEndpointWithResponseStream ação.
Quando um contêiner processa uma solicitação de inferência de streaming, ele retorna a inferência do modelo como uma série de partes incrementalmente à medida que o modelo as gera. As aplicações cliente começam a receber respostas imediatamente conforme elas ficam disponíveis. Eles não precisam esperar que o modelo gere a resposta completa. Você pode implementar o streaming para oferecer apoio a experiências interativas rápidas, como chatbots, assistentes virtuais e geradores de música.
exemplo Exemplo de funções de invocação para streaming bidirecional
Os exemplos a seguir demonstram como o código em seu contêiner pode processar solicitações e respostas de inferência de streaming. Esses exemplos lidam com solicitações de streaming que os aplicativos clientes enviam usando a InvokeEndpointWithBidirectionalStream ação.
Um contêiner com capacidade de streaming bidirecional lida com solicitações de inferência de streaming em que as partes são geradas incrementalmente no cliente e transmitidas para o contêiner. Ele retorna a inferência do modelo ao cliente como uma série de partes à medida que o modelo as gera. As aplicações cliente começam a receber respostas imediatamente conforme elas ficam disponíveis. Eles não precisam esperar que a solicitação seja totalmente gerada no cliente ou que o modelo gere a resposta inteira. Você pode implementar o streaming bidirecional para oferecer suporte a experiências interativas rápidas, como chatbots, assistentes de IA de voz interativos e traduções em tempo real para uma experiência mais em tempo real.
Como o contêiner deve responder a solicitações de verificação de integridade (ping)
SageMaker A IA lança novos contêineres de inferência nas seguintes situações:
-
Respondendo a chamadas de API
CreateEndpoint,UpdateEndpoint,UpdateEndpointWeightsAndCapacities -
Patches de segurança
-
Substituição de instâncias não íntegras
Logo após a inicialização do contêiner, a SageMaker IA começa a enviar solicitações GET periódicas para o /ping endpoint.
O requisito mais simples é que o contêiner deve responder com um código de status HTTP 200 e um corpo vazio. Isso indica à SageMaker IA que o contêiner está pronto para aceitar solicitações de inferência no /invocations endpoint.
Se o contêiner não começar a passar pelas verificações de integridade, respondendo consistentemente com 200s durante os 8 minutos após a inicialização, a execução da nova instância falhará. Isso fará o CreateEndpoint falhar, deixando o endpoint em um estado de falha. A atualização solicitada por UpdateEndpoint não será concluída, os patches de segurança não serão aplicados e as instâncias não íntegras não serão substituídas.
Embora a exigência mínima seja para o contêiner retornar um 200 estático, um desenvolvedor de contêiner pode usar essa funcionalidade para executar verificações mais profundas. O tempo limite da solicitação em tentativas /ping é de 2 segundos.
Além disso, um contêiner capaz de lidar com solicitações de streaming bidirecional deve responder com um Pong Frame (por WebSocket protocolo RFC6455
Contrato de contêiner para oferecer suporte a recursos de streaming bidirecional
Se você quiser hospedar seu contêiner de modelo como um endpoint de SageMaker IA que ofereça suporte a recursos de streaming bidirecional, o contêiner de modelo deve oferecer suporte ao contrato abaixo:
1. Etiqueta Docker bidirecional
O contêiner do modelo deve ter um rótulo Docker indicando à plataforma de SageMaker IA que a capacidade de streaming bidirecional é compatível com esse contêiner.
com.amazonaws.sagemaker.capabilities.bidirectional-streaming=true
2. Support WebSocket Connection para invocações
O modelo de contêiner do cliente que suporta streaming bidirecional deve suportar WebSockets conexões na porta 8080 ou, por padrão. /invocations-bidirectional-stream
Esse caminho pode ser substituído passando o cabeçalho X-Amzn-SageMaker-Model -Invocation-Path ao invocar a API. InvokeEndpointWithBidirectionalStream Além disso, os usuários podem especificar uma string de consulta a ser anexada a esse caminho passando o cabeçalho X-Amzn-SageMaker-Model -Query-String ao invocar a API. InvokeEndpointWithBidirectionalStream
3. Tratamento de fluxo de solicitações
<Blob>As cargas de entrada da InvokeEndpointWithBidirectionalStream API são transmitidas como uma série de PayloadParts, que é apenas um invólucro de um fragmento binário (“Bytes”:):
{ "PayloadPart": { "Bytes": <Blob>, "DataType": <String: UTF8 | BINARY>, "CompletionState": <String: PARTIAL | COMPLETE> "P": <String> } }
3.1. Quadros de dados
SageMaker A IA passa a entrada PayloadParts para o contêiner do modelo como quadros de WebSocket dados (RFC6455-Seção-5.6
-
SageMaker A IA não inspeciona o fragmento binário.
-
Ao receber uma entrada PayloadPart
-
SageMaker A IA cria exatamente um quadro de WebSocket dados
PayloadPart.Bytese o passa para o contêiner do modelo. -
Se
PayloadPart.DataType = UTF8, a SageMaker IA criar um quadro de dados de texto -
Se
PayloadPart.DataTypenão estiver presente ouPayloadPart.DataType = BINARY, a SageMaker IA cria um quadro de dados binário
-
-
Para uma sequência de PayloadParts com e terminada por uma PayloadPart com
PayloadPart.CompletionState = PARTIALPayloadPart.CompletionState = COMPLETE, a SageMaker IA as traduz em mensagem WebSocket fragmentada RFC6455-Seção-5.4: Fragmentação: -
A largura inicial PayloadPart
PayloadPart.CompletionState = PARTIALserá traduzida em um quadro de WebSocket dados, com o FIN um pouco claro. -
O texto subsequente PayloadParts
PayloadPart.CompletionState = PARTIALserá traduzido em Quadros de WebSocket Continuação com FIN um pouco claro. -
A largura final PayloadPart
PayloadPart.CompletionState = COMPLETEserá traduzida em WebSocket Continuation Frame com o bit FIN definido.
-
-
SageMaker A IA não codifica nem decodifica o fragmento binário da entrada PayloadPart, os bytes são passados para o contêiner do modelo no estado em que se encontram.
-
SageMaker A IA não combina várias entradas PayloadParts em uma BinaryDataFrame.
-
SageMaker A IA não divide uma entrada PayloadPart em várias BinaryDataFrames.
Exemplo: fluxo de mensagens fragmentado
Client sends: PayloadPart 1: {Bytes: "Hello ", DataType: "UTF8", CompletionState: "PARTIAL"} PayloadPart 2: {Bytes: "World", DataType: "UTF8", CompletionState: "COMPLETE"} Container receives: Frame 1: Text Data Frame with "Hello " (FIN=0) Frame 2: Continuation Frame with "World" (FIN=1)
3.2. Quadros de controle
Além dos quadros de dados, a SageMaker IA também envia quadros de controle para o contêiner do modelo (RFC6455-Seção-5.5
-
Fechar quadro: a SageMaker AI pode enviar o Close Frame (RFC6455-Seção-5.5.1
) para o contêiner do modelo caso a conexão seja fechada por qualquer motivo. -
Ping Frame: a SageMaker IA envia o Ping Frame (RFC6455-Seção-5.5.2
) uma vez a cada 60 segundos, o contêiner do modelo deve responder com o Pong Frame. Se nenhum Pong Frame (RFC6455-Seção-5.5.3 ) for recebido por 5 pings consecutivos, a conexão será fechada pela IA. SageMaker -
Pong Frame: A SageMaker IA responderá aos Ping Frames do contêiner do modelo com Pong Frames.
4. Tratamento do fluxo de resposta
A saída é transmitida como uma série de PayloadParts, ModelStreamErrors ou InternalStreamFailures.
{ "PayloadPart": { "Bytes": <Blob>, "DataType": <String: UTF8 | BINARY>, "CompletionState": <String: PARTIAL | COMPLETE>, }, "ModelStreamError": { "ErrorCode": <String>, "Message": <String> }, "InternalStreamFailure": { "Message": <String> } }
4.1. Quadros de dados
SageMaker A IA converte os quadros de dados recebidos do contêiner do modelo em saída PayloadParts:
-
Ao receber um quadro de dados de WebSocket texto do contêiner do modelo, a SageMaker IA obtém os bytes brutos do quadro de dados de texto e os agrupa em uma resposta PayloadPart, enquanto isso é definido
PayloadPart.DataType = UTF8. -
Ao receber um quadro de dados WebSocket binário do contêiner do modelo, a SageMaker IA agrupa diretamente os bytes do quadro de dados em uma resposta PayloadPart, enquanto isso é definido
PayloadPart.DataType = BINARY. -
Para mensagens fragmentadas, conforme definido em RFC6455-Seção-5.4:
Fragmentação: -
O quadro de dados inicial com FIN bit clear será traduzido em um PayloadPart with
PayloadPart.CompletionState = PARTIAL. -
Os quadros de continuação subsequentes com FIN bit clear serão traduzidos para PayloadParts com
PayloadPart.CompletionState = PARTIAL. -
O quadro de continuação final com o conjunto de bits FIN será traduzido para PayloadPart com
PayloadPart.CompletionState = COMPLETE.
-
-
SageMaker A IA não codifica nem decodifica os bytes recebidos dos contêineres do modelo; os bytes são passados para o contêiner do modelo no estado em que se encontram.
-
SageMaker A IA não combina vários quadros de dados recebidos do contêiner do modelo em uma resposta PayloadPart.
-
SageMaker A IA não divide um quadro de dados recebido do contêiner do modelo em várias respostas PayloadParts.
Exemplo: fluxo de resposta de streaming
Container sends: Frame 1: Text Data Frame with "Generating" (FIN=0) Frame 2: Continuation Frame with " response..." (FIN=1) Client receives: PayloadPart 1: {Bytes: "Generating", DataType: "UTF8", CompletionState: "PARTIAL"} PayloadPart 2: {Bytes: " response...", DataType: "UTF8", CompletionState: "COMPLETE"}
4.2. Quadros de controle
SageMaker A IA responde aos seguintes quadros de controle do contêiner do modelo:
-
Ao receber um Close Frame (RFC6455-Section-5.5.1
) do contêiner do modelo, a SageMaker IA empacotará o código de status (RFC6455-Seção-7.4 ) e as mensagens de falha e os transmitirá de volta ao ModelStreamError usuário final. -
Ao receber um Ping Frame (RFC6455-Seção-5.5.2
) do contêiner do modelo, a SageMaker IA responderá com o Pong Frame. -
Pong Frame (RFC6455-Seção-5.5.3
): Se nenhum Pong Frame for recebido por 5 pings consecutivos, a conexão será fechada pela IA. SageMaker