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.functionaltorch.nn
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 hooksagemaker-debugger. Siga as instruções a seguir que detalham as etapas com exemplos de código.
-
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á aNone.(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.Hookusa 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 APIsmd.get_hookretorna aNonenesse 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_hookretorna aNonee cria um hook manual usando a classesmd.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 ) -
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. -
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 perdasave_intervalque 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) -
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) -
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) -
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.
-
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 argumentocollections_to_writepara 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.