View a markdown version of this page

Use o Depurador com contêineres de treinamento personalizados - SageMaker IA da Amazon

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á.

Use o Depurador com contêineres de treinamento personalizados

nota

O Amazon SageMaker Debugger não está mais aberto a novos clientes. Os clientes existentes podem continuar usando o serviço normalmente. AWS continua investindo em melhorias de segurança e disponibilidade para o Debugger, mas não planejamos introduzir novos recursos. Para obter mais informações, consulte Alteração na disponibilidade do depurador.

O Amazon SageMaker Debugger está disponível para qualquer modelo de aprendizado profundo que você trouxer para o Amazon AI. SageMaker As AWS CLIModelTrainer APIs SageMaker AI API e Debugger permitem que você use qualquer imagem base do Docker para criar e personalizar contêineres para treinar seus modelos. Para usar o Depurador com contêineres personalizados, você precisa fazer uma alteração mínima em seu script de treinamento para implementar o retorno de chamada do hook do Depurador e recuperar tensores dos trabalhos de treinamento. As seções a seguir instruem você a usar o Depurador com Contêineres de Treinamento Personalizados.

Você precisa dos seguintes recursos para criar um contêiner personalizado com o Depurador:

Para um exemplo completo do uso do Depurador com um contêiner de treinamento personalizado, consulte o exemplo de caderno a seguir.

dica

Esse contêiner personalizado com guia do Depurador é uma extensão do guia Como adaptar o próprio contêiner de treinamento que explica como criar e enviar seu contêiner de treinamento personalizado para o Amazon ECR.

Prepare-se para criar um contêiner de treinamento personalizado

Para criar um contêiner do docker, a estrutura básica dos arquivos deve ter a seguinte aparência:

├── debugger_custom_container_test_notebook.ipynb # a notebook to run python snippet codes └── debugger_custom_container_test_folder # this is a docker folder ├── your-training-script.py # your training script with Debugger hook └── Dockerfile # a Dockerfile to build your own container

Registre o Hook do Depurador em seu script de treinamento

Para depurar seu treinamento de modelo, você precisa adicionar um hook do Depurador ao seu script de treinamento.

nota

Essa etapa é necessária para coletar os parâmetros do modelo (tensores de saída) para depurar o treinamento de modelos. Se você quiser apenas monitorar e criar um perfil, pode pular essa etapa de inscrição do hook e excluir o parâmetro debugger_hook_config ao construir um estimador.

O código de exemplo a seguir mostra a estrutura de um script de treinamento usando o modelo Keras ResNet 50 e como passar o gancho do Debugger como um retorno de chamada Keras para depuração. Para encontrar um script de treinamento completo, consulte o script de TensorFlow treinamento com o gancho SageMaker Debugger.

# An example of training script (your-training-script.py) import tensorflow.compat.v2 as tf from tensorflow.keras.applications.resnet50 import ResNet50 import smdebug.tensorflow as smd def train(batch_size, epoch, model, hook): ... model.fit(X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, # smdebug modification: Pass the Debugger hook in the main() as a Keras callback callbacks=[hook]) def main(): parser=argparse.ArgumentParser(description="Train resnet50 cifar10") # hyperparameter settings parser.add_argument(...) args = parser.parse_args() model=ResNet50(weights=None, input_shape=(32,32,3), classes=10) # Add the following line to register the Debugger hook for Keras. hook=smd.KerasHook.create_from_json_file() # Start the training. train(args.batch_size, args.epoch, model, hook) if __name__ == "__main__": main()

Para obter mais informações sobre como registrar o hook do Depurador para as estruturas e algoritmos compatíveis, consulte os seguintes links na biblioteca de clientes do SMDebug:

Nos seguintes exemplos de scripts de treinamento dos cadernos, você pode encontrar mais exemplos sobre como adicionar os hooks do Depurador aos scripts de treinamento e coletar os tensores de saída em detalhes:

  • Depurador no modo script com a estrutura 2.1 TensorFlow

    Para ver a diferença entre usar o Debugger em um contêiner de aprendizado profundo e no modo script, abra este notebook e coloque-o lado a lado com o depurador anterior em um exemplo de notebook Deep Learning Container TensorFlow v2.1.

    No modo script, a parte de configuração do gancho é removida do script no qual você define ModelTrainer o. Em vez disso, o recurso de gancho do Debugger é mesclado ao script de treinamento, o script de treinamento TensorFlow Keras ResNet no modo script. O script de treinamento importa a smdebug biblioteca no ambiente TensorFlow Keras necessário para se comunicar com o algoritmo TensorFlow ResNet 50. Ele também implementa manualmente a funcionalidade de smdebug gancho adicionando o callbacks=[hook] argumento dentro da train função (na linha 49) e adicionando a configuração manual do gancho (na linha 89) fornecida pelo SDK do SageMaker Python.

    Esse exemplo de modo de script executa o trabalho de treinamento na estrutura de trabalho TF 2.1 para a comparação direta com a alteração de script zero no exemplo TF 2.1. O benefício de configurar o Debugger no modo script é a flexibilidade de escolher versões de estrutura não cobertas pelo AWS Deep Learning Containers.

  • Usando o Amazon SageMaker Debugger em um PyTorch contêiner no modo script

    Este notebook ativa o Debugger no modo script na estrutura v1.3.1. PyTorch PyTorchA versão v1.3.1 é suportada por contêineres de SageMaker IA, e este exemplo mostra detalhes de como modificar um script de treinamento.

    A SageMaker IA já PyTorch ModelTrainer está no modo script por padrão. No notebook, a linha a ser script_mode ativada não está incluída na ModelTrainer configuração.

    Este caderno mostra etapas detalhadas para alterar o script de PyTorch treinamento original para uma versão modificada para ativar o Debugger. Além disso, este exemplo mostra como você pode usar regras integradas do Depurador para detectar problemas de treinamento, como problema de desaparecimento de gradientes e os atributos de avaliação do Depurador para chamar e analisar os tensores salvos.

Criar e configurar um Dockerfile

Abra sua SageMaker IA JupyterLab e crie uma nova pasta, debugger_custom_container_test_folder neste exemplo, para salvar seu script de treinamento Dockerfile e. O exemplo de código a seguir é um Dockerfile que inclui elogios essenciais da compilação do docker. Cole o conteúdo a seguir no arquivo de texto Dockerfile e salve-o. Carregue seu script de treinamento na mesma pasta.

# Specify a docker base image FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3 RUN /usr/bin/python3 -m pip install --upgrade pip RUN pip install --upgrade protobuf # Install required packages to enable the SageMaker Python SDK and the smdebug library RUN pip install sagemaker-training RUN pip install smdebug CMD ["bin/bash"]

Se você quiser usar uma imagem de contêiner de aprendizado AWS profundo pré-criada, consulte Imagens de contêineres de aprendizado AWS profundo disponíveis.

Crie e envie a imagem personalizada do treinamento para o Amazon ECR

Crie um caderno de teste, debugger_custom_container_test_notebook.ipynb, e execute o código a seguir na célula do caderno. Isso acessará o diretório debugger_byoc_test_docker, criará o docker com o algorithm_nameespecificado e enviará o contêiner do docker para o Amazon ECR.

import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'sagemaker-debugger-mnist-byoc-tf2' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) !docker build -t $ecr_repository docker !$(aws ecr get-login --region $region --registry-ids $account_id --no-include-email) !aws ecr create-repository --repository-name $ecr_repository !docker tag {ecr_repository + tag} $byoc_image_uri !docker push $byoc_image_uri
dica

Se você usar uma das imagens base do AWS Deep Learning Container, execute o código a seguir para fazer login no Amazon ECR e acessar o repositório de imagens do Deep Learning Container.

! aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com

Execute e depure os trabalhos de treinamento usando o contêiner de treinamento personalizado

Depois de criar e enviar seu contêiner docker para o Amazon ECR, configure uma SageMaker IA ModelTrainer com seu script de treinamento e os Debugger-specific parâmetros. Depois de executar o model_trainer.train(), o Depurador coletará os tensores de saída, irá monitorá-los e detectará problemas de treinamento. Usando os tensores salvos, você pode analisar melhor o trabalho de treinamento usando os principais atributos e ferramentas smdebug. Configurando um fluxo de trabalho do processo de monitoramento de regras do Debugger com o Amazon CloudWatch Events AWS Lambda, você pode automatizar um processo de interrupção do trabalho de treinamento sempre que as regras do Debugger detectarem problemas de treinamento.

import sagemaker from sagemaker.train import ModelTrainer from sagemaker.core.debugger import Rule, DebuggerHookConfig, CollectionConfig, rule_configs from sagemaker.core.helper.session_helper import get_execution_role profiler_config=ProfilerConfig(...) debugger_hook_config=DebuggerHookConfig(...) rules=[ Rule.sagemaker(rule_configs.built_in_rule()), ProfilerRule.sagemaker(rule_configs.BuiltInRule()) ] from sagemaker.train.configs import SourceCode, Compute model_trainer=ModelTrainer( training_image=byoc_image_uri, source_code=SourceCode(entry_script="./debugger_custom_container_test_folder/your-training-script.py"), role=get_execution_role(), base_job_name='debugger-custom-container-test', compute=Compute(instance_type='ml.p3.2xlarge', instance_count=1), # Debugger-specific parameters profiler_config=profiler_config, debugger_hook_config=debugger_hook_config, rules=rules ) # start training model_trainer.train()