Passen Sie Ihr TensorFlow Trainingsskript an - Amazon SageMaker

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 TensorFlow Trainingsskript an

Um mit der Erfassung von Modellausgabetensoren und dem Debuggen von Trainingsproblemen zu beginnen, nehmen Sie die folgenden Änderungen an Ihrem TensorFlow Trainingsskript vor.

Erstellen eines Hooks für Trainingsaufträge in SageMaker

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)

Dadurch wird ein Hook erstellt, wenn Sie einen SageMaker Trainingsauftrag starten. Wenn Sie einen Trainingsauftrag in Schritt 2: Trainingsjobs mit Python SageMaker starten und debuggen SDK mit einem der DebuggerHookConfigTensorBoardConfig, oder Rules in Ihrem Schätzer starten, SageMaker fügt Ihrer Trainings-Instance eine JSON-Konfigurationsdatei hinzu, die von der smd.get_hook Methode übernommen wird. Beachten Sie, dass der Hook keine Konfigurationsdatei finden kann, wenn Sie keine der Konfigurations-APIs in Ihren Estimator aufnehmen, und die Funktion zurückkehrt None.

(Optional) Erstellen eines Hooks für Schulungsaufträge außerhalb von SageMaker

Wenn Sie Schulungsaufträge im lokalen Modus direkt auf SageMaker Notebook-Instances, Amazon EC2-Instances oder Ihren eigenen lokalen Geräten ausführen, verwenden Sie smd.Hook die Klasse , um einen Hook zu erstellen. Dieser Ansatz kann jedoch nur die Tensorsammlungen speichern und zur TensorBoard Visualisierung verwendet werden können. Die integrierten -Regeln des SageMaker 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 Hook-Erstellungscode 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 des Hooks 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.

  1. 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 Schritt 2: Trainingsjobs mit Python SageMaker starten und debuggen 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)
  2. Umschließen Sie den Optimizer nach der hook.wrap_optimizer() Methode.

    optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
  3. 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 SageMaker kann der Debugger die Tensoren nicht erfassen. 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 )
  4. 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 Keras model.fit() Klassenmethode hinzu. Dadurch wird der sagemaker-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] )
  5. TensorFlow 2.x bietet nur symbolische Gradientenvariablen, die keinen Zugriff auf ihre Werte bieten. Um Farbverläufe zu sammeln, wenden tf.GradientTape Sie sich an die hook.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. Das Umschließen des Bands stellt sicher, dass die hook.wrap_tape() Methode um Funktionen des Bandobjekts wie push_tape(), gradient(), pop_tape()richtet die Writer von SageMaker Debugger ein und speichert Tensoren, die als Eingabe für gradient() (trainierbare Variablen und Verlust) und Ausgabe von gradient() (Gradienten) bereitgestellt werden.

    Anmerkung

    Um Daten mit einer benutzerdefinierten Trainingsschleife zu sammeln, stellen Sie sicher, dass Sie den Eager-Modus verwenden. Andernfalls kann der SageMaker Debugger keine Tensoren erfassen.

Eine vollständige Liste der Aktionen, die die sagemaker-debugger Hook-APIs zum Erstellen von Hooks und Speichern von Tensoren anbieten, finden Sie unter Hook-Methoden in der sagemaker-debuggerPython SDK-Dokumentation.

Nachdem Sie die Anpassung Ihres Trainingsskripts abgeschlossen haben, fahren Sie mit Schritt 2: Trainingsjobs mit Python SageMaker starten und debuggen SDK fort.