Usar seu próprio código de inferência com uma transformação em lote - 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á.

Usar seu próprio código de inferência com uma transformação em lote

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.

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 serve

    A 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, Linhas JSON , TFRecord e RecordIO.

    SageMaker substitui CMD as instruções padrão em um contêiner especificando o serve argumento após o nome da imagem. O argumento serve substitui os argumentos que você fornece com o comando CMD no Dockerfile.

     

  • Recomendamos que você use a forma exec da instrução ENTRYPOINT:

    ENTRYPOINT ["executable", "param1", "param2"]

    Por exemplo: .

    ENTRYPOINT ["python", "k_means_inference.py"]

     

  • SageMaker define variáveis de ambiente especificadas em CreateModele CreateTransformJobem seu contêiner. Além disso, as seguintes variáveis de ambiente serão preenchidas:

    • SAGEMAKER_BATCH sempre é definida como true quando o contêiner é executado em transformação em lote.

    • SAGEMAKER_MAX_PAYLOAD_IN_MB é definida como a carga útil de maior tamanho que será enviada ao contêiner via HTTP.

    • SAGEMAKER_BATCH_STRATEGY será definida como SINGLE_RECORD quando o contêiner receber um único registro por chamada para invocações e como MULTI_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 são provenientes da chamada de API 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 dispositivos de GPU para inferências de modelo (especificando instâncias de cálculo de ML baseadas em GPU na sua solicitação CreateTransformJob), verifique se os seus contêineres são compatíveis com nvidia-docker. Não empacote drivers NVIDIA com a imagem. Para obter mais informações sobre o nvidia-docker, consulte NVIDIA/nvidia-docker.

     

  • Não é possível utilizar o inicializador init como ponto de entrada nos contêineres do SageMaker porque ele confunde argumentos de treinamento e de atendimento.

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 200 status HTTP 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 CPUs disponíveis para um contêiner, o algoritmo escolhe os valores MaxConcurrentTransforms, BatchStrategy e MaxPayloadInMB adequados para o trabalho.

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 MaxConcurrentTransformsBatchStrategy, e. SageMaker determina os valores desses parâmetros usando esta ordem de precedência:

  1. Os valores de parâmetro que você fornece ao criar a solicitação CreateTransformJob.

  2. Os valores que o contêiner do modelo retorna quando SageMaker invoca o endpoint dos parâmetros de execução>

  3. 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 parâmetros de execução GET é um objeto JSON com chaves para os parâmetros MaxConcurrentTransforms, BatchStrategy, e 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 solicitação POST para o contêiner de inferência. O corpo da solicitação POST 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 que escute na porta 8080 e deve aceitar solicitações POST para o endpoint /invocations. 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 é que o contêiner deve 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.