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 hospedagem
Esta seção explica como a Amazon SageMaker 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 SageMaker executa sua imagem de inferência
- Como SageMaker carrega seus artefatos de modelo
- 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)
- Use um registro privado do Docker para contêineres de inferência em tempo real
Como SageMaker 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, SageMaker executa o contêiner como:
docker run
image
serveSageMaker substitui
CMD
as instruções padrão em um contêiner especificando oserve
argumento após o nome da imagem. O argumentoserve
substitui os argumentos que você fornece com o comandoCMD
no Dockerfile. -
SageMaker espera que todos os contêineres sejam executados com usuários root. Crie seu contêiner para que ele use somente usuários raiz. Ao SageMaker executar 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
exec
da instruçãoENTRYPOINT
:ENTRYPOINT ["executable", "param1", "param2"]
Por exemplo:
ENTRYPOINT ["python", "k_means_inference.py"]
A forma
exec
da instruçãoENTRYPOINT
inicia o executável diretamente, não como elemento filho de/bin/sh
. Isso permite que ele receba sinaisSIGKILL
deSIGTERM
e para as SageMaker API operações, o que é um requisito.Por exemplo, quando você usa o
CreateEndpoint
APIpara criar um endpoint, SageMaker 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 executa o contêiner Docker nessas instâncias.Se você reduzir o número de instâncias que apoiam o endpoint (chamando o
UpdateEndpointWeightsAndCapacities
API), SageMaker executa um comando para interromper o contêiner do Docker nas instâncias que estão sendo encerradas. Primeiramente, o comando envia o sinalSIGTERM
e, então, envia o sinalSIGKILL
30 segundos depois.Se você atualizar o endpoint (chamando o
UpdateEndpoint
API), SageMaker iniciará 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 sinalSIGTERM
e, 30 segundos depois, envia o sinalSIGKILL
. -
SageMaker usa a definição de contêiner que você forneceu em sua
CreateModel
solicitação para definir variáveis de ambiente e o DNS nome do host do contêiner da seguinte forma:-
Ele define variáveis de ambiente usando o
ContainerDefinition.Environment
string-to-string mapa. -
Ele define o DNS nome do host usando o.
ContainerDefinition.ContainerHostname
-
-
Se você planeja usar GPU dispositivos para inferências de modelos (especificando instâncias de computação de ML GPU baseadas em sua
CreateEndpointConfig
solicitação), certifique-se de que seus contêineres sejam compatíveis.nvidia-docker
Não agrupe NVIDIA drivers com a imagem. Para obter mais informações sobrenvidia-docker
, consulte NVIDIA/nvidia-docker. -
Você não pode usar o
tini
inicializador como seu ponto de entrada em SageMaker contêineres porque ele fica confuso com os argumentostrain
e.serve
Como SageMaker carrega seus artefatos de modelo
Em sua CreateModel
APIsolicitação, você pode usar o S3DataSource
parâmetro ModelDataUrl
or para identificar o local do S3 onde os artefatos do modelo são armazenados. SageMaker copia os artefatos do modelo do local do S3 para o /opt/ml/model
diretório para uso 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, SageMaker não baixará o arquivo.
Se você treinou seu modelo SageMaker, os artefatos do modelo são salvos como um único arquivo tar compactado no Amazon S3. Se você treinou seu modelo externamente SageMaker, precisará criar esse único arquivo tar compactado e salvá-lo em um local do S3. SageMaker descompacta esse arquivo tar no diretório /opt/ml/model antes do início do contêiner.
Para implantar modelos grandes, 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 POST solicitação ao SageMaker endpoint. SageMaker 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 no Amazon SageMaker 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 remove todos os
POST
cabeçalhos, exceto aqueles suportados peloInvokeEndpoint
. SageMaker 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
POST
para os endpoints/invocations
e/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 levar de 50 a 60 segundos de tempo de processamento, o tempo limite do SDK soquete deve ser definido para 70 segundos.
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. Os aplicativos 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 suporte a experiências interativas rápidas, como chatbots, assistentes virtuais e geradores de música.
Como o contêiner deve responder a solicitações de verificação de integridade (ping)
SageMaker lança novos contêineres de inferência nas seguintes situações:
-
Respondendo a
CreateEndpoint
UpdateEndpoint
, e chamadasUpdateEndpointWeightsAndCapacities
API -
Patches de segurança
-
Substituição de instâncias não íntegras
Logo após a inicialização do contêiner, SageMaker começa a enviar GET solicitações periódicas para o /ping
endpoint.
O requisito mais simples do contêiner é responder com um código de status HTTP 200 e um corpo vazio. Isso indica SageMaker 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 saúde respondendo consistentemente com 200 segundos durante os 8 minutos após a inicialização, a execução da nova instância falhará. Isso causa CreateEndpoint
a falha, deixando o endpoint em um estado de falha. A atualização solicitada por UpdateEndpoint
não foi concluída, os patches de segurança não foram aplicados e as instâncias não íntegras não foram 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.