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 DebuggerHookConfig
TensorBoardConfig
, 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.
-
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)
-
Empacote o otimizador pelo método
hook.wrap_optimizer()
.optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
-
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 )
-
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 classemodel.fit()
do Keras. Isso fará com que o hook desagemaker-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] )
-
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étodohook.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 ohook.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 degradient()
(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çãosagemaker-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.