Adaptar seu script de treinamento do PyTorch - 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á.

Adaptar seu script de treinamento do PyTorch

Para iniciar a coleção de tensores de saída do modelo e depurar problemas de treinamento, faça as seguintes modificações em seu script de treinamento do PyTorch:

nota

O SageMaker Debugger não pode coletar tensores de saída do modelo das operações da API torch.nn.functional. Ao escrever um script de treinamento do PyTorch, é recomendável usar os módulos torch.nn em vez disso.

Para PyTorch 1.12.0

Se você trouxer um script de treinamento do PyTorch, poderá executar a tarefa 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 tarefas de treinamento no SageMaker AI

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

    Quando você executa uma tarefa de treinamento em Iniciar os trabalhos de treinamento com o Depurador usando o SageMaker Python SDK com DebuggerHookConfig, TensorBoardConfig ou regras no estimador, o SageMaker AI adiciona um arquivo de configuração JSON à sua instância de treinamento que é escolhida 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 tarefas de treinamento fora do SageMaker AI

    Se você executa tarefas de treinamento no modo local, diretamente nas instâncias do caderno do SageMaker, nas instâncias do Amazon EC2 ou em seus próprios dispositivos locais, o smd.Hook usa a classe para criar um hook. No entanto, essa abordagem armazena apenas as coleções de tensores e capacidade de uso para visualização do TensorBoard. As regras integradas do SageMaker Debugger não funcionam com o modo local porque as regras exigem que as instâncias de treinamento de ML do SageMaker AI e o S3 armazenem os resultados 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 Iniciar os trabalhos de treinamento com o Depurador 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 Iniciar os trabalhos de treinamento com o Depurador 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. Este é o nome que será usado para visualizar os valores escalares no TensorBoard e pode ser qualquer string que você quiser.

  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 script de treinamento, prossiga para Iniciar os trabalhos de treinamento com o Depurador usando o SageMaker Python SDK.