Configurar o SageMaker depurador para salvar tensores - 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á.

Configurar o SageMaker depurador para salvar tensores

Os tensores são coleções de dados de parâmetros atualizados da passagem para trás e para frente de cada iteração de treinamento. SageMaker O Debugger coleta os tensores de saída para analisar o estado de um trabalho de treinamento. SageMaker As operações do depurador CollectionConfige da DebuggerHookConfigAPI fornecem métodos para agrupar tensores em coleções e salvá-los em um bucket S3 de destino.

nota

Depois de configurado e ativado adequadamente, o SageMaker Debugger salva os tensores de saída em um bucket S3 padrão, a menos que especificado de outra forma. O formato do URI padrão do bucket do S3 é s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

Ao construir um SageMaker estimador, ative o SageMaker Debugger especificando o parâmetro. debugger_hook_config As etapas a seguir incluem exemplos de como configurar as operações debugger_hook_config usando as operações da API CollectionConfig e DebuggerHookConfig para retirar tensores de seus trabalhos de treinamento e salvá-los.

Configurar coleções de tensores usando a API CollectionConfig

Use a operação CollectionConfig da API para configurar coleções de tensores. O Debugger fornece coleções de tensores pré-criadas que abrangem uma variedade de expressões regulares (regex) de parâmetros se estiver usando estruturas de aprendizado profundo e algoritmos de aprendizado de máquina compatíveis com o Debugger. Conforme mostrado no código de exemplo a seguir, adicione as coleções de tensores integradas que você deseja depurar.

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients") ]

As coleções anteriores configuraram o gancho Debugger para salvar os tensores a cada 500 etapas com base no valor padrão "save_interval".

Para obter uma lista completa das coleções integradas do Debugger disponíveis, consulte Coleções integradas do Debugger.

Se quiser personalizar as coleções integradas, como alterar os intervalos de salvamento e o regex do tensor, use o modelo CollectionConfig a seguir para ajustar os parâmetros.

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="tensor_collection", parameters={ "key_1": "value_1", "key_2": "value_2", ... "key_n": "value_n" } ) ]

Para obter mais informações sobre as chaves de parâmetros disponíveis, consulte o CollectionConfigSDK do Amazon SageMaker Python. Por exemplo, o exemplo de código a seguir mostra como você pode ajustar os intervalos de salvamento da coleção de tensores de “perdas” em diferentes fases do treinamento: perda de salvamento a cada 100 etapas na fase de treinamento e perda de validação a cada 10 etapas na fase de validação.

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="losses", parameters={ "train.save_interval": "100", "eval.save_interval": "10" } ) ]
dica

Esse objeto de configuração da coleção de tensores pode ser usado para operações da DebuggerHookAPI Config e Rule.

Configurar a API DebuggerHookConfig para salvar tensores

Use a API DebuggerHookConfig para criar um debugger_hook_config objeto usando o collection_configs objeto que você criou na etapa anterior.

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( collection_configs=collection_configs )

O Debugger salva os tensores de saída de treinamento do modelo no bucket S3 padrão. O formato do URI padrão do bucket do S3 é s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

Se você quiser especificar um URI exato do bucket do S3, use o exemplo de código a seguir:

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( s3_output_path="specify-your-s3-bucket-uri" collection_configs=collection_configs )

Para obter mais informações, consulte DebuggerHookConfig no SDK do Amazon Python SageMaker .

Exemplos de Cadernos e exemplos de código para configurar o Debugger Hook

As seções a seguir fornecem cadernos e exemplos de código de como usar o hook do Debugger para salvar, acessar e visualizar tensores de saída.

Blocos de anotações de exemplo da visualização de tensores

Os dois exemplos de notebooks a seguir mostram o uso avançado do Amazon SageMaker Debugger para visualizar tensores. O Debugger fornece uma visão transparente do treinamento de modelos de aprendizado profundo.

  • Análise interativa de tensores no SageMaker Studio Notebook com MXNet

    Este exemplo de notebook mostra como visualizar tensores salvos usando o Amazon SageMaker Debugger. Com a visualização dos tensores, você pode ver como os valores dos tensores mudam ao treinar algoritmos de aprendizado profundo. Esse notebook inclui um trabalho de treinamento com uma rede neural mal configurada e usa o Amazon SageMaker Debugger para agregar e analisar tensores, incluindo gradientes, saídas de ativação e pesos. Por exemplo, o gráfico a seguir mostra a distribuição de gradientes de uma camada convolucional que está sofrendo de um problema de desaparecimento de gradiente.

    Um gráfico exibindo a distribuição de gradientes de uma camada convolucional que sofre de um problema de gradientes desaparecendo

    Esse bloco de anotações também ilustra como uma boa configuração inicial de hiperparâmetros aprimora o processo de treinamento gerando os mesmos gráficos de distribuição de tensores.

  • Visualizar e depurar tensores no treinamento de modelos do MXNet

    Este exemplo de notebook mostra como salvar e visualizar tensores de um trabalho de treinamento do modelo MXNet Gluon usando o Amazon Debugger. SageMaker Isso ilustra que o Debugger está configurado para salvar todos os tensores em um bucket do Amazon S3 e recuperar as saídas de ativação para a visualização. ReLu A figura a seguir mostra uma visualização tridimensional das saídas de ReLu ativação. O esquema de cores está definido como azul para indicar valores próximos a 0 e amarelo para indicar valores próximos a 1.

    Uma visualização das saídas de ativação ReLU

    Nesse bloco de anotações, a classe importada TensorPlot de tensor_plot.py é projetada para plotar redes neurais convolucionais (CNNs) que usam imagens bidimensionais como entradas. O script tensor_plot.py fornecido com o bloco de anotações recupera os tensores usando o Debugger e visualiza a CNN. Você pode executar esse notebook no SageMaker Studio para reproduzir a visualização do tensor e implementar seu próprio modelo de rede neural convolucional.

  • Análise de tensores em tempo real em um SageMaker notebook com o MXNet

    Este exemplo orienta você na instalação dos componentes necessários para a emissão de tensores em um trabalho de SageMaker treinamento da Amazon e no uso das operações da API Debugger para acessar esses tensores durante a execução do treinamento. Um modelo CNN de glúon é treinado no conjunto de dados Fashion MNIST. Enquanto a tarefa estiver em execução, você verá como o Debugger recupera as saídas de ativação da primeira camada convolucional de cada um dos 100 lotes e as visualiza. Além disso, isso mostrará como visualizar os pesos após a conclusão do trabalho.

Salvar tensores usando coleções integradas do Debugger

Você pode usar coleções integradas de tensores usando a API CollectionConfig e salvá-las usando a API DebuggerHookConfig. O exemplo a seguir mostra como usar as configurações padrão das configurações do gancho do Debugger para construir um estimador. SageMaker TensorFlow Você também pode utilizar isso para estimadores MXNet e XGBoost. PyTorch

nota

No código de exemplo a seguir, o parâmetro s3_output_path para DebuggerHookConfig é opcional. Se você não especificar, o Debugger salvará os tensoress3://<output_path>/debug-output/, onde <output_path> é o caminho de saída padrão dos trabalhos de treinamento. SageMaker Por exemplo: .

"s3://sagemaker-us-east-1-111122223333/sagemaker-debugger-training-YYYY-MM-DD-HH-MM-SS-123/debug-output"
import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call built-in collections collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients"), CollectionConfig(name="losses"), CollectionConfig(name="biases") ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-built-in-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Para ver uma lista de coleções integradas do Debugger, consulte Coleções internas do Debugger.

Salvar tensores usando coleções integradas modificadas do Debugger

Você pode modificar as coleções integradas do Debugger usando a operação da API CollectionConfig. O exemplo a seguir mostra como ajustar a losses coleção integrada e construir um SageMaker TensorFlow estimador. Você também pode usar isso para estimadores MXNet e XGBoost. PyTorch

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call and modify built-in collections collection_configs=[ CollectionConfig( name="losses", parameters={"save_interval": "50"})] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-modified-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Para ver uma lista completa dos CollectionConfig parâmetros, consulte Debugger API CollectionConfig .

Salvar tensores usando as coleções personalizadas do Debugger

Também é possível salvar um número reduzido de tensores em vez do conjunto completo de tensores, (por exemplo, se quiser reduzir a quantidade de dados salvos no bucket do Amazon S3). O exemplo a seguir mostra como personalizar a configuração de hook do Debugger para especificar os tensores de destino que você deseja salvar. Você pode usar isso para estimadores TensorFlow MXNet e PyTorch XGBoost.

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to create a custom collection collection_configs=[ CollectionConfig( name="custom_activations_collection", parameters={ "include_regex": "relu|tanh", # Required "reductions": "mean,variance,max,abs_mean,abs_variance,abs_max" }) ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-custom-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Para obter uma lista completa dos CollectionConfig parâmetros, consulte Debugger CollectionConfig.