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 Batch Transform
Esta seção explica como a Amazon SageMaker interage com um contêiner do Docker que executa seu próprio código de inferência para transformação em lote. 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
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 transformações em lote, SageMaker invoca o modelo em seu nome. SageMaker executa o contêiner como:
docker run
image
serveA entrada para as transformações em lote deve ter um formato que possa ser dividido em arquivos menores para serem processados em paralelo. Esses formatos incluem CSV JSON
, JSONLinhas TFRecord e Recordio . SageMaker 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. -
Recomendamos que você use a forma
exec
da instruçãoENTRYPOINT
:ENTRYPOINT ["executable", "param1", "param2"]
Por exemplo:
ENTRYPOINT ["python", "k_means_inference.py"]
-
SageMaker define variáveis de ambiente especificadas em
CreateModel
eCreateTransformJob
em seu contêiner. Além disso, as seguintes variáveis de ambiente serão preenchidas:-
SAGEMAKER_BATCH
sempre é definida comotrue
quando o contêiner é executado em transformação em lote. -
SAGEMAKER_MAX_PAYLOAD_IN_MB
é definido para o maior tamanho de carga útil que é enviada para o contêiner viaHTTP. -
SAGEMAKER_BATCH_STRATEGY
será definida comoSINGLE_RECORD
quando o contêiner receber um único registro por chamada para invocações e comoMULTI_RECORD
quando o contêiner tiver o número máximo possível de registros na carga útil. -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMS
é definida como o número máximo de solicitações/invocations
que podem ser abertas simultaneamente.
nota
As últimas três variáveis de ambiente vêm da API chamada feita pelo usuário. Se o usuário não definir valores para elas, elas não serão transmitidas. Nesse caso, os valores padrão ou os valores solicitados pelo algoritmo (em resposta a
/execution-parameters
) serão usados. -
-
Se você planeja usar GPU dispositivos para inferências de modelos (especificando instâncias de computação de ML GPU baseadas em sua
CreateTransformJob
solicitação), certifique-se de que seus contêineres sejam compatíveis com nvidia-docker. Não agrupe NVIDIA drivers com a imagem. Para obter mais informações sobre nvidia-docker, consulte /nvidia-docker. NVIDIA -
Você não pode usar o
init
inicializador como ponto de entrada em SageMaker contêineres porque ele fica confuso com os argumentos train e serve.
Como SageMaker carrega seus artefatos de modelo
Em uma solicitação CreateModel
, as definições de contêiner incluem o parâmetro ModelDataUrl
, que identifica o local no Amazon S3 em que os artefatos do modelo são armazenados. Quando você usa SageMaker para executar inferências, ele usa essas informações para determinar de onde copiar os artefatos do modelo. Ele copia os artefatos para o diretório /opt/ml/model
no contêiner do Docker para uso pelo seu código de inferência.
O parâmetro ModelDataUrl
deve apontar para um arquivo tar.gz. Caso contrário, o SageMaker não poderá fazer download do arquivo. Se você treinar um modelo SageMaker, ele salva os artefatos como um único arquivo tar compactado no Amazon S3. Se você treinar um modelo em outra estrutura, precisará armazenar os artefatos do modelo no Amazon S3 como um arquivo tar compactado. SageMaker descompacta esse arquivo tar e o salva no /opt/ml/model
diretório do contêiner antes do início do trabalho de transformação em lote.
Como contêineres atendem solicitações
Os contêineres devem implementar um servidor web que responda a invocações e solicitações de ping na porta 8080. Para transformações em lote, você tem a opção de definir algoritmos para implementar solicitações de parâmetros de execução para fornecer uma configuração dinâmica de tempo de execução. SageMaker SageMakerusa os seguintes endpoints:
-
ping
—Usado para verificar periodicamente a integridade do contêiner. SageMaker espera por um código de HTTP200
status e um corpo vazio para uma solicitação de ping bem-sucedida antes de enviar uma solicitação de invocações. Você pode usar uma solicitação de ping para carregar um modelo na memória a fim de gerar inferência quando forem enviadas solicitações de invocação. -
(Opcional)
execution-parameters
—Permite que o algoritmo forneça os parâmetros ideais de ajuste para um trabalho durante o tempo de execução. Com base na memória e na CPUs disponibilidade de um contêiner, o algoritmo escolhe osMaxPayloadInMB
valores e apropriadosMaxConcurrentTransforms
para o trabalho.BatchStrategy
Antes de chamar a solicitação de invocações, SageMaker tente invocar a solicitação de parâmetros de execução. Ao criar um trabalho de transformação em lote, você pode fornecer valores para os MaxPayloadInMB
parâmetros MaxConcurrentTransforms
BatchStrategy
, e. SageMaker determina os valores desses parâmetros usando esta ordem de precedência:
-
Os valores de parâmetro que você fornece ao criar a solicitação
CreateTransformJob
. -
Os valores que o contêiner do modelo retorna quando SageMaker invoca o endpoint dos parâmetros de execução>
-
Os valores de parâmetros padrão, listados na tabela a seguir:
Parâmetro Valores padrão MaxConcurrentTransforms
1
BatchStrategy
MULTI_RECORD
MaxPayloadInMB
6
A resposta para uma solicitação de GET
parâmetros de execução é um JSON objeto com chaves para MaxConcurrentTransforms
BatchStrategy
, e parâmetros. MaxPayloadInMB
Aqui está um exemplo de resposta válida:
{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }
Como o contêiner deve responder a solicitações de inferência
Para obter inferências, a Amazon SageMaker envia uma POST solicitação para o contêiner de inferência. O corpo da POST solicitação contém dados do Amazon S3. A Amazon SageMaker passa a solicitação para o contêiner e retorna o resultado da inferência do contêiner, salvando os dados da resposta no Amazon S3.
Para receber solicitações de inferência, o contêiner deve ter um servidor web escutando na porta 8080 e deve aceitar POST solicitações para o /invocations
endpoint. O tempo limite da solicitação de inferência e o máximo de novas tentativas podem ser configurados por meio de ModelClientConfig
.
Como o contêiner deve responder a solicitações de verificação de integridade (ping)
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.
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.