

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

# Adapte seu roteiro PyTorch de treinamento
<a name="debugger-modify-script-pytorch"></a>

Para começar a coletar tensores de saída do modelo e depurar problemas de treinamento, faça as seguintes modificações em seu script de PyTorch treinamento.

**nota**  
SageMaker O depurador não pode coletar tensores de saída do modelo das operações da API. [https://pytorch.org/docs/stable/nn.functional.html](https://pytorch.org/docs/stable/nn.functional.html) Ao escrever um script PyTorch de treinamento, é recomendável usar os [https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html](https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html)módulos em vez disso.

## Para PyTorch 1.12.0
<a name="debugger-modify-script-pytorch-1-12-0"></a>

Se você trouxer um script de PyTorch treinamento, poderá executar o trabalho de treinamento e extrair os tensores de saída do modelo com algumas linhas de código adicionais em seu script de treinamento. Você precisa usar o [gancho APIs](https://sagemaker-debugger.readthedocs.io/en/website/hook-api.html) na biblioteca do `sagemaker-debugger` cliente. Siga as instruções a seguir que detalham as etapas com exemplos de código.

1. Crie um hook.

   **(Recomendado) Para trabalhos de treinamento em SageMaker IA**

   ```
   import smdebug.pytorch as smd
   hook=smd.get_hook(create_if_not_exists=True)
   ```

   Quando você inicia um trabalho de treinamento [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md) com qualquer uma das regras DebuggerHookConfig, TensorBoardConfig, ou em seu estimador, a SageMaker IA adiciona um arquivo de configuração JSON à sua instância de treinamento que é captado pela função. `get_hook` Observe que, se você não incluir nenhuma configuração APIs em seu estimador, não haverá nenhum arquivo de configuração para o gancho encontrar e a função retornará. `None`

   **(Opcional) Para trabalhos de treinamento fora da SageMaker IA**

   Se você executa trabalhos de treinamento no modo local, diretamente nas instâncias do SageMaker Notebook, nas instâncias do Amazon EC2 ou em seus próprios dispositivos locais, use a `smd.Hook` classe para criar um gancho. No entanto, essa abordagem só pode armazenar as coleções de tensores e pode ser usada para TensorBoard visualização. SageMaker As regras integradas do Debugger não funcionam com o modo local porque exigem que as instâncias de treinamento de SageMaker AI ML e o S3 armazenem as saídas das instâncias remotas em tempo real. A API `smd.get_hook` retorna a `None` nesse caso. 

   Se você quiser criar um hook manual para salvar tensores no modo local, use o seguinte trecho de código com a lógica para verificar se a API `smd.get_hook` retorna a `None` e cria um hook manual usando a classe `smd.Hook`: Observe que você pode especificar qualquer diretório de saída em sua máquina local.

   ```
   import smdebug.pytorch as smd
   hook=smd.get_hook(create_if_not_exists=True)
   
   if hook is None:
       hook=smd.Hook(
           out_dir='/path/to/your/local/output/',
           export_tensorboard=True
       )
   ```

1. Empacote seu modelo com os métodos de classe do hook.

   O método `hook.register_module()` pega seu modelo e percorre cada camada, procurando por tensores que correspondam às expressões regulares que você fornecerá por meio da configuração em [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md). Os tensores coletáveis por meio desse método de hook são pesos, tendências, ativações, gradientes, entradas e saídas.

   ```
   hook.register_module(model)
   ```
**dica**  
Se você coletar todos os tensores de saída de um grande modelo de aprendizado profundo, o tamanho total dessas coleções pode crescer exponencialmente e causar gargalos. Se quiser salvar tensores específicos, você também pode usar o método `hook.save_tensor()`. Esse método ajuda você a escolher a variável para o tensor específico e salvar em uma coleção personalizada com o nome desejado. Para obter mais informações, consulte a [etapa 7](#debugger-modify-script-pytorch-save-custom-tensor) desta instrução.

1. Distorça a função de perda com os métodos de classe de hook.

   O método `hook.register_loss` é empacotar a função de perda. Ele extrai todos os valores de perda `save_interval` que você definirá durante a configuração em [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md) e os salva na coleção de `"losses"`.

   ```
   hook.register_loss(loss_function)
   ```

1. Adicione `hook.set_mode(ModeKeys.TRAIN)` no bloco de treinamento. Isso indica que a coleção de tensores é extraída durante a fase de treinamento.

   ```
   def train():
       ...
       hook.set_mode(ModeKeys.TRAIN)
   ```

1. Adicione `hook.set_mode(ModeKeys.EVAL)` no bloco de validação. Isso indica que a coleção de tensores é extraída durante a fase de validação.

   ```
   def validation():
       ...
       hook.set_mode(ModeKeys.EVAL)
   ```

1. Use [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar) para salvar escalares personalizados. Você pode salvar valores escalares que não estão no modelo. Por exemplo, se você quiser registrar os valores de precisão calculados durante a avaliação, adicione a seguinte linha de código abaixo da linha em que você calcula a precisão:

   ```
   hook.save_scalar("accuracy", accuracy)
   ```

   Observe que você precisa fornecer uma string como primeiro argumento para nomear a coleção escalar personalizada. Esse é o nome que será usado para visualizar os valores escalares e pode ser qualquer string que você quiser. TensorBoard

1. <a name="debugger-modify-script-pytorch-save-custom-tensor"></a>Use [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor) para salvar tensores personalizados. Da mesma forma que em [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar), você pode salvar tensores adicionais, definindo sua própria coleção de tensores. Por exemplo, você pode extrair dados de imagem de entrada que são passados para o modelo e salvar como um tensor personalizado adicionando a seguinte linha de código, onde `"images"` é um nome de exemplo do tensor personalizado, `image_inputs` é uma variável de exemplo para os dados da imagem de entrada:

   ```
   hook.save_tensor("images", image_inputs)
   ```

   Observe que você deve fornecer uma string para o primeiro argumento para nomear o tensor personalizado. O `hook.save_tensor()` tem o terceiro argumento `collections_to_write` para especificar a coleção de tensores para salvar o tensor personalizado. O padrão é `collections_to_write="default"`. Se você não especificar explicitamente o terceiro argumento, o tensor personalizado será salvo na coleção de tensores `"default"`.

Depois de concluir a adaptação do seu script de treinamento, prossiga para [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md).