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
nota
O Amazon SageMaker Debugger não está mais aberto a novos clientes. Os clientes existentes podem continuar usando o serviço normalmente. AWS continua investindo em melhorias de segurança e disponibilidade para o Debugger, mas não planejamos introduzir novos recursos. Para obter mais informações, consulte Alteração na disponibilidade do depurador.
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 dentro da SageMaker IA
import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)
Isso cria um gancho quando você inicia um trabalho SageMaker de treinamento. Quando você inicia um trabalho de treinamento Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker com qualquer um dos DebuggerHookConfigTensorBoardConfig, ou Rules em seu ModelTrainer, a SageMaker IA adiciona um arquivo de configuração JSON à sua instância de treinamento que é captado pelo smd.get_hook método. Observe que, se você não incluir nenhuma das APIs de configuração em sua ModelTrainer, não haverá nenhum arquivo de configuração para o gancho encontrar e a função retornaráNone.
(Opcional) Crie um gancho para trabalhos de treinamento fora da SageMaker IA
Se você executar 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 roteiro 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 SDK do Python SageMaker. 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 ansioso 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 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 ) -
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-debuggerpasse 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ólicas que não fornecem acesso aos seus valores. Para coletar gradientes, empacote
tf.GradientTapepelo 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-debuggerpode identificar tensores de saída, como gradientes, parâmetros e perdas. Envolver 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 perdas) 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 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 hooksagemaker-debugger Python SDK.
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.