Adapte seu roteiro PyTorch de treinamento - 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á.

Adapte seu roteiro PyTorch de treinamento

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.

Para PyTorch 1.12.0

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 as APIs de hook na biblioteca de cliente do sagemaker-debugger. 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

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

    Quando você inicia um trabalho de treinamento Etapa 2: Iniciar e depurar trabalhos de treinamento usando o SageMaker Python SDK com qualquer uma das regras DebuggerHookConfig TensorBoardConfig,, ou em seu estimador, SageMaker 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 das APIs de configuração em seu estimador, não haverá nenhum arquivo de configuração para o hook encontrar e a função retornará a None.

    (Opcional) Para trabalhos de treinamento fora SageMaker

    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 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 )
  2. 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 Etapa 2: Iniciar e depurar trabalhos de treinamento usando o SageMaker Python SDK. 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 desta instrução.

  3. 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 Etapa 2: Iniciar e depurar trabalhos de treinamento usando o SageMaker Python SDK e os salva na coleção de "losses".

    hook.register_loss(loss_function)
  4. 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)
  5. 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)
  6. Use hook.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

  7. Use hook.save_tensor() para salvar tensores personalizados. Da mesma forma que em hook.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 roteiro de treinamento, prossiga para Etapa 2: Iniciar e depurar trabalhos de treinamento usando o SageMaker Python SDK.