Adatta il tuo script di allenamento TensorFlow - Amazon SageMaker

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 di 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 Fase 2: Avviare ed eseguire il debug dei lavori di formazione utilizzando Python SageMaker SDK con uno qualsiasi di questi DebuggerHookConfigTensorBoardConfig, o Rules nel tuo estimatore, SageMaker aggiunge un file di configurazione JSON all'istanza di formazione che viene raccolto dal smd.get_hook metodo. Nota che se non includi nessuna delle API di configurazione nel tuo estimatore, non ci sarà alcun file di configurazione che l'hook possa trovare e la funzione restituirà None.

(Facoltativo) Crea un gancio per i lavori di formazione all'esterno SageMaker

Se esegui lavori di formazione in modalità locale, direttamente su istanze SageMaker Notebook, istanze Amazon EC2 o sui tuoi dispositivi locali, smd.Hook usa la classe 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 Fase 2: Avviare ed eseguire il debug dei lavori di formazione utilizzando 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'allenamento in modalità eager. Altrimenti, SageMaker 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 offerte dalle API dell’hook sagemaker-debugger per costruire hook e salvare tensori, consulta Metodi di hook nella documentazione di sagemaker-debugger Python SDK.

Dopo aver completato l'adattamento dello script di addestramento, procedi con Fase 2: Avviare ed eseguire il debug dei lavori di formazione utilizzando Python SageMaker SDK.