Mit SageMaker Profiler einen Trainingsauftrag vorbereiten und ausführen - Amazon SageMaker AI

Mit SageMaker Profiler einen Trainingsauftrag vorbereiten und ausführen

Die Einrichtung zur Ausführung eines Trainingsauftrags mit dem SageMaker Profiler besteht aus zwei Schritten: der Anpassung des Trainingsskripts und der Konfiguration des SageMaker-Startprogramms für Trainingsaufträge.

Schritt 1: Passen Sie Ihr Trainingsskript mithilfe der Python-Module von SageMaker Profiler an

Um mit der Erfassung von Kernelläufen auf GPUs zu beginnen, während der Trainingsauftrag ausgeführt wird, ändern Sie Ihr Trainingsskript mithilfe der Python-Module von SageMaker Profiler. Importieren Sie die Bibliothek und fügen Sie die Methoden start_profiling() und stop_profiling() hinzu, um den Anfang und das Ende der Profilerstellung zu definieren. Sie können Markierungen im Trainingsskript auch mit Hilfe optionaler benutzerdefinierter Anmerkungen hinzufügen, um die Hardwareaktivitäten während bestimmter Operationen in jedem Schritt zu visualisieren.

Beachten Sie, dass die Kommentatoren aus GPUs Operationen extrahieren. Für Profiling-Operationen in CPUs müssen Sie keine zusätzlichen Anmerkungen hinzufügen. Die CPU-Profilerstellung wird auch aktiviert, wenn Sie die Profilkonfiguration angeben. Dies werden Sie in Schritt 2: Erstellen eines Framework-Schätzers von SageMaker AI und aktivieren von SageMaker AI Profiler üben.

Anmerkung

Die Erstellung eines Profils für einen ganzen Trainingsauftrag ist nicht die effizienteste Form der Ressourcennutzung. Wir empfehlen, Profile mit höchstens 300 Schritten eines Trainingsauftrags zu erstellen.

Wichtig

Die Version von 14. Dezember 2023 beinhaltet eine bahnbrechende Änderung. Der Name des Python-Pakets von SageMaker Profiler wurde von smppy in smprof geändert. Dies ist in den Framework-Containern von SageMaker AI für TensorFlow v2.12 und höher wirksam.

Wenn Sie eine der früheren Versionen der Framework-Containervon SageMaker AI wie TensorFlow v2.11.0 verwenden, ist das Python-Paket von SageMaker Profiler weiterhin als smppy verfügbar. Wenn Sie sich nicht sicher sind, welche Version oder welchen Paketnamen Sie verwenden sollten, ersetzen Sie die Importanweisung des SageMaker-Profiler-Pakets durch den folgenden Codeausschnitt.

try: import smprof except ImportError: # backward-compatability for TF 2.11 and PT 1.13.1 images import smppy as smprof

Ansatz 1. Verwenden Sie den Kontext-Managersmprof.annotate, um vollständige Funktionen zu kommentieren

Mit dem smprof.annotate()-Kontextmanager können Sie ganze Funktionen umschließen. Dieser Wrapper wird empfohlen, wenn Sie ein Profil nach Funktionen statt nach Codezeilen erstellen möchten. Das folgende Beispielskript zeigt, wie der Kontext-Manager so implementiert wird, dass er bei jeder Iteration das Trainingsschleife und ganze Funktionen umschließt.

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): with smprof.annotate("step_"+str(i)): inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() with smprof.annotate("Forward"): outputs = net(inputs) with smprof.annotate("Loss"): loss = criterion(outputs, labels) with smprof.annotate("Backward"): loss.backward() with smprof.annotate("Optimizer"): optimizer.step() SMProf.stop_profiling()

Ansatz 2. Kommentieren Sie mit smprof.annotation_begin() und smprof.annotation_end() bestimmte Codezeilen in Funktionen

Sie können auch Anmerkungen definieren, um bestimmte Codezeilen zu profilieren. Sie können den genauen Anfangs- und Endpunkt der Profilerstellung auf der Ebene einzelner Codezeilen festlegen, nicht nach Funktionen. Im folgenden Skript wird z. B. der step_annotator zu Beginn jeder Iteration definiert und endet am Ende der Iteration. In der Zwischenzeit werden für jede Operation weitere detaillierte Kommentatoren definiert, die die Zieloperationen während jeder Iteration umschließen.

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): step_annotator = smprof.annotation_begin("step_" + str(i)) inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() forward_annotator = smprof.annotation_begin("Forward") outputs = net(inputs) smprof.annotation_end(forward_annotator) loss_annotator = smprof.annotation_begin("Loss") loss = criterion(outputs, labels) smprof.annotation_end(loss_annotator) backward_annotator = smprof.annotation_begin("Backward") loss.backward() smprof.annotation_end(backward_annotator) optimizer_annotator = smprof.annotation_begin("Optimizer") optimizer.step() smprof.annotation_end(optimizer_annotator) smprof.annotation_end(step_annotator) SMProf.stop_profiling()

Wenn Sie die Profiler-Initiierungsmodule kommentiert und eingerichtet haben, speichern Sie das Skript, um es im folgenden Schritt 2 mit einem Startprogramm für SageMaker-Trainingsaufträge abzusenden. Der Beispiel-Launcher geht davon aus, dass das Trainingsskript train_with_profiler_demo.py heißt.

Schritt 2: Erstellen eines Framework-Schätzers von SageMaker AI und aktivieren von SageMaker AI Profiler

Die folgenden Schritte zeigen, wie Sie einen Framework-Schätzer von SageMaker AI für das Training mit dem SageMaker Python SDK vorbereiten.

  1. Richten Sie mithilfe der Module ProfilerConfig und Profiler wie folgt ein profiler_config Objekt ein.

    from sagemaker import ProfilerConfig, Profiler profiler_config = ProfilerConfig( profile_params = Profiler(cpu_profiling_duration=3600) )

    Im Folgenden finden Sie die Beschreibung des Profiler Moduls und seines Arguments.

    • Profiler: Das Modul zur Aktivierung von SageMaker Profiler mit dem Trainingsauftrag.

      • cpu_profiling_duration (int): Geben Sie die Dauer für die Profilerstellung auf CPUs in Sekunden an. Der Standardwert beträgt 3600 Sekunden.

  2. Erstellen Sie mit dem obigen Schritt erstellten profiler_config-Objekt einen Framework-Schätzer von SageMaker AI. Der folgende Code zeigt ein Beispiel für die Erstellung eines PyTorch-Schätzers. Wenn Sie einen TensorFlow-Schätzer erstellen möchten, importieren Sie stattdessen sagemaker.tensorflow.TensorFlow und geben Sie eine der von SageMaker Profiler unterstützten TensorFlow-Versionen an. Weitere Informationen zu den unterstützten Frameworks und Instance-Typen finden Sie unter In SageMaker Profiler vorinstallierte Framework-Images von SageMaker AI.

    import sagemaker from sagemaker.pytorch import PyTorch estimator = PyTorch( framework_version="2.0.0", role=sagemaker.get_execution_role(), entry_point="train_with_profiler_demo.py", # your training job entry point source_dir=source_dir, # source directory for your training script output_path=output_path, base_job_name="sagemaker-profiler-demo", hyperparameters=hyperparameters, # if any instance_count=1, # Recommended to test with < 8 instance_type=ml.p4d.24xlarge, profiler_config=profiler_config )
  3. Starten Sie den Trainingsauftrag, indem Sie die Methode fit ausführen. Mit wait=False können Sie die Protokolle der Trainingsaufträge stummschalten, so dass sie im Hintergrund laufen.

    estimator.fit(wait=False)

Während der Ausführung des Trainingsauftrags oder nach dessen Abschluss können Sie unter Öffnen Sie die SageMaker Profiler UI-Anwendung mit dem nächsten Thema fortfahren und damit beginnen, die gespeicherten Profile zu erkunden und zu visualisieren.

Wenn Sie direkt auf die im Amazon-S3-Bucket gespeicherten Profildaten zugreifen möchten, verwenden Sie das folgende Skript, um die S3-URI abzurufen.

import os # This is an ad-hoc function to get the S3 URI # to where the profile output data is saved def get_detailed_profiler_output_uri(estimator): config_name = None for processing in estimator.profiler_rule_configs: params = processing.get("RuleParameters", dict()) rule = config_name = params.get("rule_to_invoke", "") if rule == "DetailedProfilerProcessing": config_name = processing.get("RuleConfigurationName") break return os.path.join( estimator.output_path, estimator.latest_training_job.name, "rule-output", config_name, ) print( f"Profiler output S3 bucket: ", get_detailed_profiler_output_uri(estimator) )

(Optional) Installieren des Python-Pakets von SageMaker Profiler

Um SageMaker Profiler auf PyTorch- oder TensorFlow-Framework-Images zu verwenden, die nicht in In SageMaker Profiler vorinstallierte Framework-Images von SageMaker AI aufgeführt sind, oder auf Ihrem eigenen benutzerdefinierten Docker-Container für Trainings, können Sie SageMaker Profiler mithilfe eines der Binärdateien für das Python-Paket von SageMaker Profiler installieren.

Option 1: Installieren des SageMaker-Profiler-Pakets beim Starten eines Trainingsjobs

Wenn Sie SageMaker Profiler für Trainingsjobs mit PyTorch- oder TensorFlow-Images verwenden möchten, die nicht in In SageMaker Profiler vorinstallierte Framework-Images von SageMaker AI aufgeführt sind, erstellen Sie eine requirements.txt-Datei und suchen Sie sie unter dem Pfad, den Sie für den source_dir-Parameter des Framework-Schätzers von SageMaker AI in Schritt 2 angegeben haben. Weitere Informationen zum Einrichten einer requirements.txt-Datei im Allgemeinen finden Sie unter Verwenden von Bibliotheken von Drittanbietern in der Dokumentation zum SageMaker Python SDK. Fügen Sie in der requirements.txt-Datei einen der S3-Bucket-Pfade zum Binärdateien für das Python-Paket von SageMaker Profiler hinzu.

# requirements.txt https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

Option 2: Installieren des SageMaker-Profiler-Pakets in Ihren benutzerdefinierten Docker-Containern

Wenn Sie einen benutzerdefinierten Docker-Container für das Training verwenden, fügen Sie eines der Binärdateien für das Python-Paket von SageMaker Profiler zu Ihrer Dockerfile hinzu.

# Install the smprof package version compatible with your CUDA version RUN pip install https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

Eine allgemeine Anleitung zum Ausführen eines benutzerdefinierten Docker-Containers für Trainings auf SageMaker AI finden Sie unter Anpassen Ihres eigenen Trainings-Containers.