Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Adatta il tuo script di allenamento TensorFlow
Per iniziare a raccogliere i tensori di output del modello ed eseguire il debug dei problemi di addestramento, apporta le seguenti modifiche allo script di addestramento. TensorFlow
Crea un hook per i lavori di formazione all'interno dell'IA SageMaker
import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)
Questo crea un gancio quando inizi un lavoro SageMaker di formazione. Quando avvii un processo di formazione Avvia lavori di formazione con Debugger usando Python SageMaker SDK con uno qualsiasi di questi DebuggerHookConfig
strumenti TensorBoardConfig
o Rules
tramite il tuo estimatore, SageMaker AI aggiunge un file di JSON configurazione all'istanza di formazione che viene rilevato dal smd.get_hook
metodo. Nota che se non includi alcuna configurazione APIs nel tuo estimatore, non ci sarà alcun file di configurazione che l'hook possa trovare e la funzione verrà restituita. None
(Facoltativo) Crea un hook per i lavori di formazione al di fuori dell'IA SageMaker
Se esegui lavori di formazione in modalità locale, direttamente su istanze SageMaker Notebook, EC2 istanze Amazon o sui tuoi dispositivi locali, usa smd.Hook
class per creare un hook. Tuttavia, questo approccio può solo memorizzare le raccolte di tensori e utilizzarlo per la visualizzazione. TensorBoard SageMaker Le regole integrate di Debugger non funzionano con la modalità locale. Il metodo smd.get_hook
restituisce None
anche in questo caso.
Se desideri creare un hook manuale, usa il seguente frammento di codice con la logica per verificare se l'hook restituisce None
restituisce e crea un hook manuale utilizzando la 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 )
Dopo aver aggiunto il codice di creazione dell'hook, passa al seguente argomento per Keras. TensorFlow
Nota
SageMaker Debugger attualmente supporta solo Keras. TensorFlow
Registra l'hook nello script di addestramento Keras TensorFlow
La seguente procedura illustra come utilizzare l'hook e i suoi metodi per raccogliere scalari e tensori di output dal modello e dall'ottimizzatore.
-
Esegui il wrapping del tuo modello e ottimizzatore Keras con i metodi di classe dell'hook.
Il metodo
hook.register_model()
prende il tuo modello e scorre attraverso ogni livello, cercando i tensori che corrispondono alle espressioni regolari che fornirai attraverso la configurazione in Avvia lavori di formazione con Debugger usando Python SageMaker SDK. I tensori raccolti tramite questo metodo hook sono pesi, bias e attivazioni.model=tf.keras.Model(...) hook.register_model(model)
-
Esegui il wrapping dell'ottimizzatore secondo il metodo
hook.wrap_optimizer()
.optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
-
Compila il modello in modalità eager in. TensorFlow
Per raccogliere tensori dal modello, come i tensori di input e output di ogni livello, è necessario eseguire l'addestramento in modalità eager. Altrimenti, SageMaker AI Debugger non sarà in grado di raccogliere i tensori. Tuttavia, altri tensori, come i pesi dei modelli, i bias e la perdita, possono essere raccolti senza che vengano eseguiti esplicitamente in modalità eager.
model.compile( loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"], # Required for collecting tensors of each layer run_eagerly=True )
-
Registra l'hook nel metodo
tf.keras.Model.fit()
. Per raccogliere i tensori dagli hook che hai registrato, aggiungi
callbacks=[hook]
al metodo della classemodel.fit()
Keras. Questo passerà l'hooksagemaker-debugger
come callback 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 fornisce solo variabili gradienti simboliche che non forniscono l'accesso ai loro valori. Per raccogliere i gradienti, esegui il wrapping di
tf.GradientTape
secondo il metodohook.wrap_tape()
, che richiede di scrivere la tua fase di addestramento come segue. 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))
Eseguendo il wrapping del nastro, l’hook
sagemaker-debugger
è in grado di identificare tensori di uscita come gradienti, parametri e perdite. L'avvolgimento del nastro assicura che ilhook.wrap_tape()
metodo basato sulle funzioni dell'oggetto tape, ad esempio,, configuri gli autori di SageMaker Debugger e salvi i tensori forniti come input (variabili addestrabili e perdita) e output digradient()
(gradienti).push_tape()
pop_tape()
gradient()
gradient()
Nota
Per raccogliere con un ciclo di addestramento personalizzato, assicurati di utilizzare la modalità eager. Altrimenti, Debugger non è in grado di raccogliere alcun SageMaker tensore.
Per un elenco completo delle azioni APIs offerte dall'sagemaker-debugger
hook per costruire hook e salvare tensori, vedi Hook Methods nellasagemaker-debugger
SDK
Dopo aver completato l'adattamento dello script di addestramento, procedi con Avvia lavori di formazione con Debugger usando Python SageMaker SDK.