Código de inferência personalizado com uma transformação em lote - Amazon SageMaker AI

Código de inferência personalizado com uma transformação em lote

Esta seção explica como o Amazon SageMaker AI interage com um contêiner do Docker que executa seu código de inferência para uma transformação em lote. Use essas informações para gravar um código de inferência e criar uma imagem do Docker.

Como o SageMaker AI executa uma 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, o SageMaker AI invoca o modelo em seu nome. O SageMaker AI 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.

    O SageMaker AI substitui as instruções CMD padrão em um contêiner especificando o argumento serve 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"]

     

  • O SageMaker AI define as variáveis de ambiente especificadas em CreateModel e CreateTransformJob em 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 AI porque ele se confunde com argumentos de treinamento e de atendimento.

Como o SageMaker AI carrega artefatos do 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 o SageMaker AI para executar inferências, ele utiliza 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 AI não poderá baixar o arquivo. Se você treinar um modelo no SageMaker AI, ele salvará os artefatos como um único arquivo TAR compactado no Amazon S3. Se você treinar um modelo em outro framework, precisará armazenar os artefatos do modelo no Amazon S3 como um arquivo tar compactado. O SageMaker AI descompacta esse arquivo TAR e o salva no diretório /opt/ml/model do contêiner antes do início dos trabalhos de transformação em lote.

Como os contêineres atendem a solicitações

Os contêineres devem implementar um servidor web que responda a invocações e solicitações de ping na porta 8080. Nas transformações em lote, você tem a opção de definir algoritmos para implementar solicitações de parâmetro de execução e oferecer uma configuração de runtime dinâmica ao SageMaker AI. O SageMaker AI usa os seguintes endpoints:

  • ping: usado para verificar periodicamente a integridade do contêiner. O SageMaker AI aguarda o recebimento de um código de status HTTP 200 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 runtime. 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, o SageMaker AI tenta invocar a solicitação de parâmetros de execução. Ao criar um trabalho de transformação de lotes, você pode fornecer valores para os parâmetros MaxConcurrentTransforms, BatchStrategy e MaxPayloadInMB. O SageMaker AI 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 exibe quando o SageMaker AI invoca o endpoint dos parâmetros de execução.

  3. Os valores de parâmetros padrão, listados na seguinte tabela:

    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, o Amazon SageMaker AI envia uma solicitação POST ao contêiner de inferência. O corpo da solicitação POST contém dados do Amazon S3. O Amazon SageMaker AI transmite a solicitação ao contêiner e exibe o resultado da inferência do contêiner, salvando os dados de 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 ao SageMaker AI que o contêiner está pronto para aceitar solicitações de inferência no endpoint /invocations.

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.