View a markdown version of this page

Passen Sie Ihr PyTorch Trainingsskript an - Amazon SageMaker KI

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

Anmerkung

Amazon SageMaker Debugger steht neuen Kunden nicht mehr offen. Bestehende Kunden können den Service weiterhin wie gewohnt nutzen. AWS investiert weiterhin in Sicherheits- und Verfügbarkeitsverbesserungen für Debugger, aber wir planen nicht, neue Funktionen einzuführen. Weitere Informationen finden Sie unter Änderung der Debugger-Verfügbarkeit.

Nehmen Sie die folgenden Änderungen an Ihrem Trainingsskript vor, um mit der Erfassung von Modellausgabetensoren und dem Debuggen von PyTorch Trainingsproblemen zu beginnen.

Anmerkung

SageMaker Der Debugger kann keine Modellausgabetensoren aus den torch.nn.functional API-Operationen sammeln. Wenn Sie ein PyTorch Trainingsskript schreiben, wird empfohlen, stattdessen die torch.nn Module zu verwenden.

Für PyTorch 1.12.0

Wenn Sie ein PyTorch Trainingsskript mitbringen, können Sie den Trainingsjob ausführen und Modellausgabetensoren mit ein paar zusätzlichen Codezeilen in Ihrem Trainingsskript extrahieren. Sie müssen die Hook-APIs in der sagemaker-debugger Client-Bibliothek verwenden. Gehen Sie die folgenden Anweisungen durch, die die Schritte anhand von Codebeispielen aufschlüsseln.

  1. Erstellen Sie einen Hook.

    (Empfohlen) Für Trainingsjobs im Bereich KI SageMaker

    import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)

    Wenn Sie einen Trainingsjob Starten Sie Trainingsjobs mit dem Debugger mithilfe des SageMaker Python-SDK mit einer der DebuggerHookConfig, oder Regeln in Ihrem starten TensorBoardConfig, fügt SageMaker AI Ihrer ModelTrainer Trainingsinstanz eine JSON-Konfigurationsdatei hinzu, die von der get_hook Funktion übernommen wird. Beachten Sie, dass, wenn Sie keine der Konfigurations-APIs in Ihrer angeben ModelTrainer, keine Konfigurationsdatei für den Hook zum Auffinden vorhanden ist und die Funktion zurückkehrtNone.

    (Optional) Für Ausbildungsjobs außerhalb der SageMaker KI

    Wenn Sie Trainingsjobs im lokalen Modus, direkt auf SageMaker Notebook-Instances, Amazon EC2-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 für TensorBoard die Visualisierung verwendet werden. SageMaker Die integrierten Regeln des Debuggers funktionieren nicht im lokalen Modus, da für die Regeln SageMaker AI-ML-Trainingsinstanzen erforderlich sind und S3 die Ausgaben der Remote-Instanzen in Echtzeit speichern muss. In diesem Fall kehrt die smd.get_hook API zurück None.

    Wenn Sie einen manuellen Hook erstellen möchten, um Tensoren im lokalen Modus zu speichern, verwenden Sie den folgenden Codeausschnitt mit der Logik, um zu überprüfen, ob die smd.get_hook API zurückkehrt None und erstellen Sie einen manuellen Hook mithilfe der smd.Hook Klasse. Beachten Sie, dass Sie ein beliebiges Ausgabeverzeichnis auf Ihrem lokalen Computer angeben können.

    import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True) if hook is None: hook=smd.Hook( out_dir='/path/to/your/local/output/', export_tensorboard=True )
  2. Verpacken Sie Ihr Modell mit den Klassenmethoden des Hooks.

    Die hook.register_module() 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 des SageMaker Python-SDK angeben. Die Tensoren, die mit dieser Hook-Methode gesammelt werden können, sind Gewichtungen, Verzerrungen, Aktivierungen, Gradienten, Eingaben und Ausgaben.

    hook.register_module(model)
    Tipp

    Wenn Sie die gesamten Ausgabetensoren aus einem großen Deep-Learning-Modell sammeln, kann die Gesamtgröße dieser Sammlungen exponentiell zunehmen und zu Engpässen führen. Wenn Sie bestimmte Tensoren speichern möchten, können Sie die hook.save_tensor() Methode auch verwenden. Diese Methode hilft Ihnen, die Variable für den spezifischen Tensor auszuwählen und in einer benutzerdefinierten Sammlung mit dem gewünschten Namen zu speichern. Weitere Informationen finden Sie unter Schritt 7.

  3. Verzerren Sie die Verlustfunktion mit den Klassenmethoden des Hooks.

    Die hook.register_loss Methode besteht darin, die Verlustfunktion zu umschließen. Sie extrahiert alle Verlustwertesave_interval, die Sie bei der Konfiguration in Starten Sie Trainingsjobs mit dem Debugger mithilfe des SageMaker Python-SDK festlegen, und speichert sie in der "losses" Sammlung.

    hook.register_loss(loss_function)
  4. Fügen Sie hook.set_mode(ModeKeys.TRAIN) den Zugblock hinzu. Dies bedeutet, dass die Tensorsammlung während der Trainingsphase extrahiert wurde.

    def train(): ... hook.set_mode(ModeKeys.TRAIN)
  5. Fügen Sie hook.set_mode(ModeKeys.EVAL) den Validierungsblock hinzu. Dies bedeutet, dass die Tensorsammlung während der Validierungsphase extrahiert wurde.

    def validation(): ... hook.set_mode(ModeKeys.EVAL)
  6. Verwenden Sie hook.save_scalar(), um benutzerdefinierte Skalare zu speichern. Sie können Skalarwerte speichern, die nicht in Ihrem Modell enthalten sind. Wenn Sie beispielsweise die bei der Auswertung berechneten Genauigkeitswerte aufzeichnen möchten, fügen Sie unter der Zeile, in der Sie die Genauigkeit berechnen, die folgende Codezeile hinzu.

    hook.save_scalar("accuracy", accuracy)

    Beachten Sie, dass Sie eine Zeichenfolge als erstes Argument angeben müssen, um die benutzerdefinierte Skalarsammlung zu benennen. Dies ist der Name, der für die Visualisierung der Skalarwerte in verwendet wird. Dabei kann es TensorBoard sich um eine beliebige Zeichenfolge handeln.

  7. Verwenden Sie hook.save_tensor(), um benutzerdefinierte Tensoren zu speichern. Ähnlich wie bei hook.save_scalar() können Sie weitere Tensoren speichern und so Ihre eigene Tensorsammlung definieren. Sie können beispielsweise Eingabe-Image-Daten, die an das Modell übergeben werden, extrahieren und als benutzerdefinierten Tensor speichern, indem Sie die folgende Codezeile hinzufügen, in "images" der ein Beispielname des benutzerdefinierten Tensors steht, image_inputs eine Beispielvariable für die Eingabe-Image-Daten ist.

    hook.save_tensor("images", image_inputs)

    Beachten Sie, dass Sie für das erste Argument eine Zeichenfolge angeben müssen, um den benutzerdefinierten Tensor zu benennen. hook.save_tensor() hat das dritte Argument collections_to_write, um die Tensorsammlung zum Speichern des benutzerdefinierten Tensors anzugeben. Der Standardwert ist collections_to_write="default". Wenn Sie das dritte Argument nicht explizit angeben, wird der benutzerdefinierte Tensor in der "default"-Tensorsammlung gespeichert.

Nachdem Sie die Anpassung Ihres Trainingsskripts abgeschlossen haben, fahren Sie mit Starten Sie Trainingsjobs mit dem Debugger mithilfe des SageMaker Python-SDK fort.