Como solucionar problemas quando levo meu contêiner personalizado ao Amazon SageMaker para treinamento ou inferência?

Data da última atualização: 21/10/2022

Quero solucionar problemas ao levar meu contêiner personalizado ao Amazon SageMaker para treinamento ou inferência.

Breve descrição

Você pode personalizar suas imagens de contêiner no SageMaker usando uma das seguintes abordagens:

Estender um contêiner do SageMaker pré-construído: use essa abordagem se precisar personalizar seu ambiente ou estrutura adicionando mais funcionalidades. Com essa abordagem, você não precisa criar a imagem do contêiner do zero porque as bibliotecas de aprendizado profundo já estão predefinidas.

Traga seu próprio contêiner: use essa abordagem quando você já tem uma imagem existente para processar dados, treinar modelos ou inferência em tempo real com recursos adicionais e requisitos de segurança que atualmente não têm suporte por imagens pré-criadas do SageMaker.

Crie uma imagem de contêiner do zero: se você tem um algoritmo personalizado e ainda não tem uma imagem de contêiner personalizada, é uma boa prática usar essa abordagem.

Com qualquer uma dessas abordagens, os erros que você obtém podem estar principalmente relacionados à criação incorreta da imagem do contêiner. Portanto, certifique-se de que o contêiner esteja configurado corretamente.

Resolução

Estender um contêiner do SageMaker pré-construído

  • Certifique-se de que as variáveis de ambiente SAGEMAKER_SUBMIT_DIRECTORY e SAGEMAKER_PROGRAM estejam definidas no Dockerfile.
  • Certifique-se de ter instalado as bibliotecas adicionais necessárias no seu Dockerfile. Você pode fazer isso executando os seguintes comandos:
# SageMaker PyTorch image
FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04
ENV PATH="/opt/ml/code:${PATH}"

# this environment variable is used by the SageMaker PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

# install the libraries using pip
COPY requirements.txt./requirements.txt
RUN pip install requirements.txt

# /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code.
COPY cifar10.py /opt/ml/code/cifar10.py
# Defines cifar10.py as script
entrypoint 
ENV SAGEMAKER_PROGRAM cifar10.py
  • Depois que a criação da imagem for bem-sucedida, execute o contêiner no modo local. Certifique-se de que a imagem funcione conforme o esperado.

Para obter mais informações, consulte Estender um contêiner pré-construído.

Trazer seus próprios contêineres

Certifique-se de ter instalado as respectivas bibliotecas do SageMaker Toolkit para treinamento ou inferência. Esses kits de ferramentas definem a localização do código e de outros recursos junto com o ponto de entrada que contém o código que deve ser executado quando o contêiner é iniciado. Quando você cria um trabalho de treinamento do SageMaker ou um endpoint de inferência, os seguintes diretórios são criados pelo SageMaker:

/opt/ml
    ├── input
    │
    ├── model
    │
    ├── code
    │
    ├── output
    │
    └── failure

Quando você executa um trabalho de treinamento, o diretório /opt/ml/input contém informações sobre o canal de dados usado para acessar os dados armazenados no Amazon Simple Storage Service (Amazon S3). O script de treinamento (train.py) junto com suas dependências é armazenado em opt/ml/code. Certifique-se de que o script grave o modelo final no diretório /opt/ml/model após a conclusão do trabalho de treinamento.

Quando você hospeda um modelo treinado no SageMaker para fazer inferências, esse modelo é armazenado em /opt/ml/model, e o código de inferência (inference.py) é armazenado em /opt/ml/code.

Para obter mais informações, consulte Adaptar seu próprio contêiner Docker para trabalhar com o SageMaker.

Criar um contêiner do zero

  • Para garantir que o contêiner seja executado como um executável, use a forma exec da instrução ENTRYPOINT no seu Dockerfile:
ENTRYPOINT ["python", "cifar10.py"]
  • Para um trabalho de treinamento, o script de treinamento deve sair com 0 se o treinamento for bem-sucedido e com um código de saída diferente de zero se o treinamento não for bem-sucedido.
  • Certifique-se de que o modelo final seja gravado em /opt/ml/model e que todas as dependências e artefatos estejam armazenados em /opt/ml/output. Se um trabalho de treinamento falhar, o script deverá gravar as informações da falha em /opt/ml/output/failure.
  • Ao criar um endpoint de inferência, certifique-se de que o modelo esteja salvo no formato FILENAME.tar.gz. O contêiner deve implementar a solicitação HTTP POST em /invocations para inferência e a solicitação HTTP GET em /ping para verificação de integridade do endpoint.

Para obter mais informações, consulte Criar um contêiner com seus próprios algoritmos e modelos.


Este artigo foi útil?


Precisa de ajuda com faturamento ou suporte técnico?