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 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 run
image
serveSageMaker A IA substitui
CMD
as declaraçõ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 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
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 sinais comoSIGTERM
eSIGKILL
das operações da SageMaker API, o que é um requisito.Por exemplo, quando você usa a
CreateEndpoint
API 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
UpdateEndpointWeightsAndCapacities
API), 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 sinalSIGTERM
e, então, envia o sinalSIGKILL
30 segundos depois.Se você atualizar o endpoint (chamando a
UpdateEndpoint
API), 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 sinalSIGTERM
e, 30 segundos depois, envia o sinalSIGKILL
. -
SageMaker A IA usa a definição de contêiner que você forneceu em sua
CreateModel
solicitaçã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.Environment
string-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
tini
inicializador como seu ponto de entrada em contêineres de SageMaker IA porque ele fica confuso com os argumentostrain
e.serve
Como a SageMaker IA carrega seus artefatos de modelo
Em sua solicitação de CreateModel
API, 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 into /opt/ml/model diretório de arquivos tar 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 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
POST
cabeç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
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 precisar de 50 a 60 segundos de tempo de processamento, o tempo limite de soquete do SDK deverá ser definido como 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. 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.
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.