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

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.

nota

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

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 o gancho APIs 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 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 EC2 instâncias da Amazon 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 )
  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 Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker . 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 Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker 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 script de treinamento, prossiga para Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker .