Konfigurieren für Framework-Profiling - 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.

Konfigurieren für Framework-Profiling

Warnung

Der SageMaker Debugger lehnt die SageMaker Framework-Profilerstellungsfunktion ab Version 2.11 und 2.0 zugunsten von Amazon Profiler ab. TensorFlow PyTorch Sie können die Funktion in den vorherigen Versionen der Frameworks und SDKs weiterhin wie folgt verwenden.

  • SageMaker Python-SDK <= v2.130.0

  • PyTorch >= v1.6.0, < v2.0

  • TensorFlow >= v2.3.1, < v2.11

Siehe auch 16. März 2023.

Um die Debugger-Framework-Profilerstellung zu aktivieren, konfigurieren Sie den framework_profile_params Parameter, wenn Sie einen Schätzer erstellen. Das Debugger-Framework-Profiling sammelt Framework-Metriken, wie z. B. Daten aus der Initialisierungsphase, Datenladeprozesse, Python-Operatoren von Deep-Learning-Frameworks und Trainingsskripten, detailliertes Profiling innerhalb und zwischen den Schritten, mit den Optionen cProfile oder Pyinstrument. Mithilfe der FrameworkProfile Klasse können Sie benutzerdefinierte Framework-Profiling-Optionen konfigurieren.

Anmerkung

Bevor Sie mit der Debugger-Framework-Profilerstellung beginnen, stellen Sie sicher, dass das Framework, das zur Erstellung Ihres Modells verwendet wurde, von Debugger für die Framework-Profilerstellung unterstützt wird. Weitere Informationen finden Sie unter Unterstützte Frameworks und Algorithmen.

Der Debugger speichert die Framework-Metriken in einem Standard-S3-Bucket. Das Format der standardmäßigen S3-Bucket-URI ist s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/.

Starten Sie einen Trainingsauftrag mit der Standard-Framework-Profilerstellung

Der folgende Beispielcode ist die einfachste profiler_config Parametereinstellung, um die Standardsystemüberwachung und die Standard-Framework-Profilerstellung zu starten. Die FrameworkProfile Klasse im folgenden Beispielcode initiiert die standardmäßige Framework-Profilerstellung, wenn ein Trainingsauftrag gestartet wird. Die Profilerstellung des Debugger-Frameworks umfasst die folgenden Optionen: detaillierte Profilerstellung, Profilerstellung für den Datenlader und Python-Profilierung.

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile() )

Mit dieser profiler_config Parameterkonfiguration ruft Debugger die Standardeinstellungen für Überwachung und Profilerstellung auf. Der Debugger überwacht Systemmetriken alle 500 Millisekunden, erstellt Profile für den fünften Schritt mit der Option für die detaillierte Profilerstellung, für den siebten Schritt mit der Option für die Profilerstellung des Dataloaders und für den neunten, zehnten und elften Schritt mit der Python-Profilerstellungsoption.

Verfügbare Konfigurationsoptionen für die Profilerstellung, die Standardparametereinstellungen und Beispiele für deren Konfiguration finden Sie unter Starten Sie einen Trainingsauftrag mit der Standardsystemüberwachung und der benutzerdefinierten Framework-Profilerstellung mit verschiedenen Profilerstellungsoptionen und SageMaker Debugger-APIs — FrameworkProfile im Amazon SageMaker Python SDK.

Wenn Sie das Systemüberwachungsintervall ändern und die standardmäßige Framework-Profilerstellung aktivieren möchten, können Sie den system_monitor_interval_millis Parameter explizit mit dem framework_profile_params Parameter angeben. Um beispielsweise alle 1000 Millisekunden zu überwachen und das Standard-Framework-Profiling zu aktivieren, verwenden Sie den folgenden Beispielcode.

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile() )

Weitere Informationen zur FrameworkProfile Klasse finden Sie unter SageMaker Debugger-APIs — FrameworkProfile im Amazon SageMaker Python SDK.

Starten Sie einen Trainingsauftrag mit der Standardsystemüberwachung und der benutzerdefinierten Framework-Profilerstellung für Zielschritte oder einen Zielzeitraum

Wenn Sie Zielschritte oder Zielzeitintervalle angeben möchten, um ein Profil für Ihren Trainingsauftrag zu erstellen, müssen Sie Parameter für die FrameworkProfile Klasse angeben. In den folgenden Codebeispielen wird gezeigt, wie Sie die Zielbereiche für die Profilerstellung zusammen mit der Systemüberwachung angeben.

  • Für einen Zielschrittbereich

    Bei der folgenden Beispielkonfiguration überwacht der Debugger den gesamten Trainingsauftrag alle 500 Millisekunden (Standardüberwachung) und erstellt Profile für einen Zielschrittbereich von Schritt 5 bis Schritt 15 (für 10 Schritte).

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )

    Mit der folgenden Beispielkonfiguration überwacht Debugger den gesamten Trainingsauftrag alle 1000 Millisekunden und erstellt Profile für einen Zielschrittbereich von Schritt 5 bis Schritt 15 (für 10 Schritte).

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )
  • Für einen Zielzeitraum

    Bei der folgenden Beispielkonfiguration überwacht Debugger den gesamten Trainingsauftrag alle 500 Millisekunden (Standardüberwachung) und erstellt ein Profil für einen Zielzeitraum von der aktuellen Unix-Zeit für 600 Sekunden.

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    Mit der folgenden Beispielkonfiguration überwacht Debugger den gesamten Trainingsauftrag alle 1000 Millisekunden und erstellt ein Profil für einen Zielzeitraum von der aktuellen Unix-Zeit für 600 Sekunden.

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    Die Framework-Profilerstellung wird für alle Profilerstellungsoptionen im Zielschritt oder Zeitraum durchgeführt.

    Weitere Informationen zu verfügbaren Profiling-Optionen finden Sie unter SageMaker Debugger-APIs — FrameworkProfile im Amazon SageMaker Python SDK.

    Im nächsten Abschnitt erfahren Sie, wie Sie die verfügbaren Profiling-Optionen per Skript erstellen.

Starten Sie einen Trainingsauftrag mit der Standardsystemüberwachung und der benutzerdefinierten Framework-Profilerstellung mit verschiedenen Profilerstellungsoptionen

Sie können die folgenden Profilkonfigurationsklassen verwenden, um die Framework-Profilerstellungsoptionen zu verwalten:

  • DetailedProfilingConfig — Geben Sie einen Zielschritt oder einen Zeitraum an, um Framework-Operationen mithilfe der nativen Framework-Profiler (Profiler und TensorFlow Profiler) zu PyTorch profilieren. Bei Verwendung ermöglichen die Debugger-Hooks dem TensorFlow Profiler beispielsweise TensorFlow, spezifische Framework-Metriken zu sammeln. TensorFlow Mit der detaillierten Profilerstellung können Sie alle Framework-Operatoren in einem Vorschritt (vor dem ersten Schritt), innerhalb von Schritten und zwischen den Schritten eines Trainingsauftrages profilieren.

    Anmerkung

    Eine detaillierte Profilerstellung kann den GPU-Speicherverbrauch erheblich erhöhen. Es wird nicht empfohlen, die detaillierte Profilerstellung für mehr als ein paar Schritte zu aktivieren.

  • DataloaderProfilingConfig — Geben Sie einen Zielschritt oder einen Zeitraum für die Profilierung von Deep-Learning-Framework-Dataloader-Prozessen an. Der Debugger erfasst jedes Dataloader-Ereignis der Frameworks.

    Anmerkung

    Die Profilerstellung von Dataloadern kann das Trainingsleistung beim Sammeln von Informationen von Datenladeprogrammen beeinträchtigen. Wir empfehlen, die Profilerstellung für Data Loader nicht länger als ein paar Schritte zu aktivieren.

    Der Debugger ist so vorkonfiguriert, dass er Dataloader-Prozesse nur für die AWS Deep-Learning-Container annotiert. Der Debugger kann keine Profile für Dataloader-Prozesse aus anderen benutzerdefinierten oder externen Trainingscontainern erstellen.

  • PythonProfilingConfig — Geben Sie einen Zielschritt oder einen Zeitbereich für die Profilierung von Python-Funktionen an. Sie können auch zwischen zwei Python-Profilern wählen: CProfile und Pyinstrument.

    • cProfile – Der Standard-Python-Profiler. cProfile sammelt Informationen für jeden Python-Operator, der während des Trainings aufgerufen wird. Mit CProfile spart Debugger kumulative Zeit und Anmerkungen für jeden Funktionsaufruf und liefert vollständige Details zu Python-Funktionen. Beim Deep Learning könnten die am häufigsten aufgerufenen Funktionen beispielsweise die Faltungsfilter und Backward-Pass-Operatoren sein, und CProfile erstellt für jede einzelne Funktion ein Profil. Für die Option CProfile können Sie außerdem eine Timer-Option auswählen: Gesamtzeit, CPU-Zeit und CPU-freie Zeit. Sie können zwar jeden Funktionsaufruf, der auf Prozessoren (sowohl CPU als auch GPU) ausgeführt wird, in der CPU-Zeit profilieren, mit der Option Off-CPU-Zeit können Sie aber auch I/O- oder Netzwerkengpässe identifizieren. Die Standardeinstellung ist die Gesamtzeit, und der Debugger berechnet sowohl die CPU-Zeit als auch die Zeit außerhalb der CPU. Mit CProfile können Sie bei der Analyse der Profildaten auf alle Funktionen zugreifen.

    • Pyinstrument – Pyinstrument ist ein Python-Profiler mit geringem Overhead, der auf Sampling basiert. Mit der Option Pyinstrument tastet der Debugger jede Millisekunde Profiling-Ereignisse ab. Da Pyinstrument die verstrichene Wanduhrzeit anstelle der CPU-Zeit misst, kann die Pyinstrument-Option eine bessere Wahl als die cProfile-Option sein, um das Profiling-Rauschen zu reduzieren (indem irrelevante Funktionsaufrufe herausgefiltert werden, die kumulativ schnell sind) und Operatoren zu erfassen, die tatsächlich rechenintensiv (kumulativ langsam) für das Training Ihres Modells sind. Mit Pyinstrument können Sie sich einen Baum von Funktionsaufrufen anzeigen lassen und so die Struktur und die Ursache der Langsamkeit besser verstehen.

    Anmerkung

    Die Aktivierung der Python-Profilerstellung kann die gesamte Trainingszeit verlangsamen. cProfile erstellt bei jedem Aufruf ein Profil der am häufigsten aufgerufenen Python-Operatoren, sodass die Verarbeitungszeit bei der Profilerstellung mit der Anzahl der Aufrufe zunimmt. Bei Pyinstrument nimmt die kumulative Zeit für die Profilerstellung aufgrund des Sampling-Mechanismus mit der Zeit zu.

Die folgende Beispielkonfiguration zeigt die vollständige Struktur, wenn Sie die verschiedenen Profilerstellungsoptionen mit angegebenen Werten verwenden.

import time from sagemaker.debugger import (ProfilerConfig, FrameworkProfile, DetailedProfilingConfig, DataloaderProfilingConfig, PythonProfilingConfig, PythonProfiler, cProfileTimer) profiler_config=ProfilerConfig( system_monitor_interval_millis=500, framework_profile_params=FrameworkProfile( detailed_profiling_config=DetailedProfilingConfig( start_step=5, num_steps=1 ), dataloader_profiling_config=DataloaderProfilingConfig( start_step=7, num_steps=1 ), python_profiling_config=PythonProfilingConfig( start_step=9, num_steps=1, python_profiler=PythonProfiler.CPROFILE, cprofile_timer=cProfileTimer.TOTAL_TIME ) ) )

Weitere Informationen zu den verfügbaren Profiling-Optionen finden Sie unter DetailedProfilingConfig, DataloaderProfilingConfig und PythonProfilingConfig im Amazon SageMaker Python SDK.