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 Inicie trabalhos de treinamento com o Debugger usando o Python SageMaker SDK com qualquer um dos DebuggerHookConfigTensorBoardConfig, ou Rules em seu estimador, SageMaker adiciona um arquivo de JSON configuração à sua instância de treinamento que é captado pelo smd.get_hook método. 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) 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 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. 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 Inicie trabalhos de treinamento com o Debugger usando o Python SageMaker 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 obter uma lista completa das ações que o sagemaker-debugger gancho APIs oferece para construir ganchos e salvar tensores, consulte Hook Methods na documentação do Pythonsagemaker-debugger. SDK

Depois de concluir a adaptação do seu script de treinamento, prossiga para Inicie trabalhos de treinamento com o Debugger usando o Python SageMaker SDK.