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.
Anpassen Ihres PyTorch-Trainingsskripts
Um mit dem Sammeln von Modellausgabetensoren und dem Debuggen von Trainingsproblemen zu beginnen, nehmen Sie die folgenden Änderungen an Ihrem PyTorch-Trainingsskript vor.
Anmerkung
SageMaker Debugger kann keine Modellausgabetensoren aus dem torch.nn.functionaltorch.nn
Für PyTorch 1.12.0
Wenn Sie ein PyTorch-Trainingsskript mitbringen, können Sie den Trainingsauftrag ausführen und Modellausgabetensoren mit einigen zusätzlichen Codezeilen in Ihrem Trainingsskript extrahieren. Sie müssen die Hook-APIssagemaker-debugger Client-Bibliothek verwenden. Gehen Sie die folgenden Anweisungen durch, die die Schritte anhand von Codebeispielen aufschlüsseln.
-
Erstellen Sie einen Hook.
(Empfohlen) Für Trainingsjobs in SageMaker AI
import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)Wenn Sie einen Trainingsjob in Trainingsjobs mit dem Debugger und SageMaker Python SDK starten mit einer der DebuggerHookConfig-, TensorBoardConfig- oder Rules in Ihrem Schätzer starten, fügt SageMaker AI Ihrer Trainings-Instance eine JSON-Konfigurationsdatei hinzu, die von der
get_hook-Funktion ü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ückkehrtNone.(Optional) Für Trainingsjobs außerhalb von SageMaker AI
Wenn Sie Trainingsaufträge im lokalen Modus, direkt auf SageMaker Notebook-Instances, Amazon-EC2-Instances oder Ihren eigenen lokalen Geräten ausführen, verwenden Sie
smd.Hookclass, um einen Hook zu erstellen. Dieser Ansatz kann jedoch nur die Tensorsammlungen speichern und für die TensorBoard-Visualisierung verwendet werden. Die integrierten Regeln des SageMaker Debugger funktionieren nicht im lokalen Modus, da die Regeln ML-Trainings-Instances von SageMaker AI und S3 erfordern, um die Ausgaben der Remote-Instances in Echtzeit zu speichern. In diesem Fall kehrt diesmd.get_hookAPI zurückNone.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_hookAPI zurückkehrtNoneund erstellen Sie einen manuellen Hook mithilfe dersmd.HookKlasse. 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 ) -
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 Trainingsjobs mit dem Debugger und SageMaker Python SDK starten 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. -
Verzerren Sie die Verlustfunktion mit den Klassenmethoden des Hooks.
Die
hook.register_lossMethode besteht darin, die Verlustfunktion zu umschließen. Sie extrahiert alle Verlustwertesave_interval, die Sie bei der Konfiguration in Trainingsjobs mit dem Debugger und SageMaker Python SDK starten festlegen, und speichert sie in der"losses"Sammlung.hook.register_loss(loss_function) -
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) -
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) -
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 TensorBoard verwendet wird. Er kann eine beliebige Zeichenfolge sein.
-
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_inputseine 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 Argumentcollections_to_write, um die Tensorsammlung zum Speichern des benutzerdefinierten Tensors anzugeben. Der Standardwert istcollections_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 Trainingsjobs mit dem Debugger und SageMaker Python SDK starten fort.