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
torch.nn
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 APIssagemaker-debugger
cliente. Siga as instruções a seguir que detalham as etapas com exemplos de código.
-
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 APIsmd.get_hook
retorna aNone
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 aNone
e 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 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. -
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_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)
-
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. Esse é o nome que será usado para visualizar os valores escalares e pode ser qualquer string que você quiser. TensorBoard
-
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_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 .