Adaptar seu script de treinamento do TensorFlow - 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á.

Adaptar seu script de treinamento do TensorFlow

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 TensorFlow:

Criar um hook para tarefas de treinamento no SageMaker AI

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

Isso cria um hook quando você inicia uma tarefa de treinamento do SageMaker. 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 Rules no estimador, o SageMaker AI adiciona um arquivo de configuração JSON à sua instância de treinamento que é escolhida 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) Criar um hook 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.Hook usa 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 incorporadas do SageMaker 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 hook, prossiga para o tópico a seguir para TensorFlow Keras.

nota

No momento, o SageMaker Debugger é compatível somente com o TensorFlow Keras.

Registre o hook em seu script de treinamento TensorFlow 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 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 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 eager no 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 AI 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. O TensorFlow 2.x fornece apenas 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. O empacotamento da fita garante que o método hook.wrap_tape() em torno das funções do objeto de fita, como push_tape(), pop_tape() e gradient(), configure os gravadores do SageMaker Debugger e salve os tensores fornecidos como entrada para gradient() (variáveis treináveis e perda) e saída de gradient() (gradientes).

    nota

    Para coletar com um loop de treinamento personalizado, certifique-se de usar o modo eager. Caso contrário, o SageMaker Debugger não conseguirá 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 Iniciar os trabalhos de treinamento com o Depurador usando o SageMaker Python SDK.