Adapte seu roteiro TensorFlow 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 TensorFlow 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 TensorFlow treinamento.

Crie um gancho para trabalhos de treinamento em SageMaker

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)

Isso cria um problema quando você inicia um trabalho SageMaker de treinamento. Quando você inicia um trabalho de treinamento Etapa 2: Iniciar e depurar trabalhos de treinamento usando o SageMaker Python SDK com qualquer um dos DebuggerHookConfigTensorBoardConfig, ou Rules em seu estimador, SageMaker adiciona um arquivo de configuração JSON à sua instância de treinamento que é captado pelo método. smd.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) Crie um gancho para treinar trabalhos externos 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. Neste caso, o método smd.get_hook também retorna a None.

Se você quiser criar um hook manual, use o seguinte trecho de código com a lógica para verificar se o hook retorna a None e cria um hook manual usando a classe smd.Hook.

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True) if hook is None: hook=smd.KerasHook( out_dir='/path/to/your/local/output/', export_tensorboard=True )

Depois de adicionar o código de criação do gancho, vá para o tópico a seguir para TensorFlow Keras.

nota

SageMaker Atualmente, o Debugger suporta TensorFlow apenas Keras.

Registre o gancho em seu TensorFlow script de treinamento Keras

O procedimento a seguir mostra como usar o hook e seus métodos para coletar escalares e tensores de saída do seu modelo e otimizador.

  1. Empacote seu modelo e otimizador Keras com os métodos de classe do hook.

    O método hook.register_model() 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 e ativações.

    model=tf.keras.Model(...) hook.register_model(model)
  2. Empacote o otimizador pelo método hook.wrap_optimizer().

    optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
  3. Compile o modelo no modo ávido em. TensorFlow

    Para coletar tensores do modelo, como os tensores de entrada e saída de cada camada, você deve executar o treinamento no modo eager. Caso contrário, o SageMaker Debugger não conseguirá coletar os tensores. No entanto, outros tensores, como pesos, tendências e perdas do modelo, podem ser coletados sem serem executados explicitamente no modo eager.

    model.compile( loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"], # Required for collecting tensors of each layer run_eagerly=True )
  4. Registre o hook no método tf.keras.Model.fit().

    Para coletar os tensores dos hooks que você registrou, adicione callbacks=[hook] ao método da classe model.fit() do Keras. Isso fará com que o hook de sagemaker-debugger passe como um retorno de chamada do Keras.

    model.fit( X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, callbacks=[hook] )
  5. TensorFlow 2.x fornece somente variáveis de gradiente simbólico que não fornecem acesso aos seus valores. Para coletar gradientes, empacote tf.GradientTape pelo método hook.wrap_tape(), que exige que você escreva sua própria etapa de treinamento da seguinte maneira.

    def training_step(model, dataset): with hook.wrap_tape(tf.GradientTape()) as tape: pred=model(data) loss_value=loss_fn(labels, pred) grads=tape.gradient(loss_value, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables))

    Ao empacotar a fita, o hook de sagemaker-debugger pode identificar tensores de saída, como gradientes, parâmetros e perdas. Empacotar a fita garante que o hook.wrap_tape() método em torno das funções do objeto de fita, comopush_tape(),, pop_tape()gradient(), configure os gravadores do SageMaker Debugger e salve os tensores que são fornecidos como entrada (variáveis treináveis e perda) e saída de gradient() (gradientes). gradient()

    nota

    Para coletar com um loop de treinamento personalizado, certifique-se de usar o modo eager. Caso contrário, o SageMaker Debugger não poderá coletar nenhum tensor.

Para ver uma lista completa das ações que as APIs do hook de sagemaker-debugger oferecem para construir hooks e salvar tensores, consulte métodos de hook na documentação do sagemaker-debugger Python SDK.

Depois de concluir a adaptação do seu script de treinamento, prossiga para Etapa 2: Iniciar e depurar trabalhos de treinamento usando o SageMaker Python SDK.