Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Passen Sie Ihr Trainingsskript TensorFlow an
Um mit dem Sammeln von Modellausgabetensoren und dem Debuggen von Trainingsproblemen zu beginnen, nehmen Sie die folgenden Änderungen an Ihrem TensorFlow Trainingsskript vor.
Erstellen Sie darin einen Hook für Trainingsaufgaben SageMaker
import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)
Dadurch entsteht ein Hook, wenn Sie einen SageMaker Trainingsjob starten. Wenn Sie einen Trainingsjob Starten Sie Trainingsjobs mit dem Debugger mithilfe von Python SageMaker SDK mit einem der DebuggerHookConfig
TensorBoardConfig
, oder Rules
in Ihrem Estimator starten, wird Ihrer Trainingsinstanz eine JSON Konfigurationsdatei SageMaker hinzugefügt, die von der smd.get_hook
Methode übernommen wird. Beachten Sie, dass der Hook keine Konfigurationsdatei finden kann, wenn Sie keine Konfiguration APIs in Ihren Schätzer aufnehmen, und die Funktion zurückkehrt. None
(Optional) Erstellen Sie einen Hook für Trainingsjobs im Freien SageMaker
Wenn Sie Trainingsjobs im lokalen Modus, direkt auf SageMaker Notebook-Instances, EC2 Amazon-Instances oder Ihren eigenen lokalen Geräten ausführen, verwenden Sie smd.Hook
class, um einen Hook zu erstellen. Bei diesem Ansatz können jedoch nur die Tensorsammlungen gespeichert und zur TensorBoard Visualisierung verwendet werden. SageMaker Die integrierten Regeln des Debuggers funktionieren nicht im lokalen Modus. Die smd.get_hook
Methode kehrt auch in diesem Fall zurück None
.
Wenn Sie einen manuellen Hook erstellen möchten, verwenden Sie den folgenden Codeausschnitt mit der Logik, um zu überprüfen, ob der Hook zurückkehrt None
und erstellen Sie mithilfe der smd.Hook
Klasse einen manuellen 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 )
Nachdem Sie den Code zur Hook-Erstellung hinzugefügt haben, fahren Sie mit dem folgenden Thema für TensorFlow Keras fort.
Anmerkung
SageMaker Der Debugger unterstützt derzeit nur TensorFlow Keras.
Registrieren Sie den Hook in Ihrem TensorFlow Keras-Trainingsskript
Im folgenden Verfahren erfahren Sie, wie Sie den Hook und seine Methoden verwenden, um Ausgabeskalare und Tensoren aus Ihrem Modell und Optimierer zu sammeln.
-
Verpacken Sie Ihr Keras-Modell und Ihren Optimierer mit den Klassenmethoden des Hooks.
Die
hook.register_model()
Methode verwendet Ihr Modell und durchläuft jede Ebene. Dabei wird nach Tensoren gesucht, die mit den regulären Ausdrücken übereinstimmen, die Sie in der Konfiguration in Starten Sie Trainingsjobs mit dem Debugger mithilfe von Python SageMaker SDK angeben. Die Tensoren, die mit dieser Hook-Methode gesammelt werden können, sind Gewichtungen, Verzerrungen und Aktivierungen.model=tf.keras.Model(...) hook.register_model(model)
-
Umschließen Sie den Optimizer nach der
hook.wrap_optimizer()
Methode.optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
-
Kompilieren Sie das Modell im Eager-Modus in TensorFlow.
Um Tensoren aus dem Modell zu sammeln, z. B. die Eingabe- und Ausgabetensoren jeder Schicht, müssen Sie das Training im Eager-Modus ausführen. Andernfalls kann der SageMaker Debugger die Tensoren nicht sammeln. Andere Tensoren, wie Modellgewichte, Verzerrungen und Verluste, können jedoch erfasst werden, ohne dass sie explizit im Eager-Modus ausgeführt werden.
model.compile( loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"], # Required for collecting tensors of each layer run_eagerly=True )
-
Registrieren Sie den Hook für die
tf.keras.Model.fit()
Methode. Um die Tensoren aus den Hooks zu sammeln, die Sie registriert haben, fügen Sie
callbacks=[hook]
der Kerasmodel.fit()
Klassenmethode hinzu. Dadurch wird dersagemaker-debugger
Hook als Keras-Callback übergeben.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 stellt nur symbolische Gradientenvariablen bereit, die keinen Zugriff auf ihre Werte bieten. Um Farbverläufe zu sammeln, wenden
tf.GradientTape
Sie sich an diehook.wrap_tape()
Methode, bei der Sie Ihren eigenen Trainingsschritt wie folgt schreiben müssen. 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))
Durch das Umwickeln des Bandes kann der
sagemaker-debugger
Hook Ausgangstensoren wie Gradienten, Parameter und Verluste identifizieren. Durch das Umwickeln des Bandes wird sichergestellt, dass diehook.wrap_tape()
Methode um Funktionen des Bandobjekts herum, wiepush_tape()
,,pop_tape()
,gradient()
,,,, die Writer des SageMaker Debuggers einrichtet und Tensoren speichert, die als Eingabe fürgradient()
(trainierbare Variablen und Verlust) und Ausgabe vongradient()
(Gradienten) bereitgestellt werden.Anmerkung
Um Daten mit einer benutzerdefinierten Trainingsschleife zu sammeln, stellen Sie sicher, dass Sie den Eager-Modus verwenden. Andernfalls ist der SageMaker Debugger nicht in der Lage, Tensoren zu sammeln.
Eine vollständige Liste der Aktionen, die der sagemaker-debugger
Hook zum Erstellen von Hooks und Speichern von Tensoren APIs bietet, finden Sie unter Hook-Methodensagemaker-debugger
SDKPython-Dokumentation.
Nachdem Sie die Anpassung Ihres Trainingsskripts abgeschlossen haben, fahren Sie mit Starten Sie Trainingsjobs mit dem Debugger mithilfe von Python SageMaker SDK fort.