Adatta il tuo script di allenamento TensorFlow - Amazon SageMaker AI

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.

  1. 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)
  2. Esegui il wrapping dell'ottimizzatore secondo il metodo hook.wrap_optimizer().

    optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
  3. 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 )
  4. Registra l'hook nel metodo tf.keras.Model.fit().

    Per raccogliere i tensori dagli hook che hai registrato, aggiungi callbacks=[hook] al metodo della classe model.fit() Keras. Questo passerà l'hook sagemaker-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] )
  5. 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 metodo hook.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 il hook.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 di gradient() (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-debuggerhook per costruire hook e salvare tensori, vedi Hook Methods nella documentazione di Python. sagemaker-debugger SDK

Dopo aver completato l'adattamento dello script di addestramento, procedi con Avvia lavori di formazione con Debugger usando Python SageMaker SDK.