View a markdown version of this page

Bereiten Sie einen Trainingsjob mit SageMaker Profiler vor und führen Sie ihn aus - 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.

Bereiten Sie einen Trainingsjob mit SageMaker Profiler vor und führen Sie ihn aus

Anmerkung

Hinweis zum Ende des Supports: Am 30. Juni 2027 AWS wird der Support für Amazon SageMaker Profiler eingestellt. Nach dem 30. Juni 2027 können Sie nicht mehr auf die Profiler-Konsole oder die Profiler-Ressourcen zugreifen. Weitere Informationen finden Sie unter Änderung der Profiler-Verfügbarkeit.

Die Einrichtung für die Ausführung eines Trainingsjobs mit dem SageMaker Profiler besteht aus zwei Schritten: dem Anpassen des Trainingsskripts und der Konfiguration des SageMaker Trainingsjob-Launchers.

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

Um mit der Erfassung der Kernel-Läufe auf GPUs zu beginnen, während der Trainingsjob ausgeführt wird, ändern Sie Ihr Trainingsskript mithilfe der SageMaker Profiler-Python-Module. 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 Sie eine SageMaker KI ModelTrainer und aktivieren Sie den Profiler SageMaker ü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 SageMaker Profiler-Python-Paketname wurde von in geändert. smppy smprof Dies ist in den SageMaker AI Framework-Containern für TensorFlow Version 2.12 und höher wirksam.

Wenn Sie eine der früheren Versionen der SageMaker AI Framework-Container wie TensorFlow v2.11.0 verwenden, ist das SageMaker Profiler-Python-Paket weiterhin verfügbar als. smppy Wenn Sie sich nicht sicher sind, welche Version oder welchen Paketnamen Sie verwenden sollten, ersetzen Sie die Import-Anweisung 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()

Nachdem Sie die Profiler-Initiierungsmodule mit Anmerkungen versehen und eingerichtet haben, speichern Sie das Skript, um es im folgenden Schritt 2 mithilfe eines Startprogramms für SageMaker Trainingsaufgaben zu senden. Der Beispiel-Launcher geht davon aus, dass das Trainingsskript train_with_profiler_demo.py heißt.

Schritt 2: Erstellen Sie eine SageMaker KI ModelTrainer und aktivieren Sie den Profiler SageMaker

Das folgende Verfahren zeigt, wie Sie eine SageMaker KI mithilfe des SageMaker Python-SDK ModelTrainer für das Training 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 Trainingsjob.

      • 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 eine SageMaker KI ModelTrainer mit dem im vorherigen Schritt erstellten profiler_config Objekt. Der folgende Code zeigt ein Beispiel für das Erstellen einer PyTorch ModelTrainer. Wenn Sie eine erstellen möchten TensorFlow ModelTrainer, importieren Sie sagemaker.tensorflow.TensorFlow stattdessen eine der von SageMaker Profiler unterstützten TensorFlow Versionen und geben Sie sie an. Weitere Informationen zu den unterstützten Frameworks und Instance-Typen finden Sie unter SageMaker Mit Profiler vorinstallierte AI-Framework-Images SageMaker.

    from sagemaker.train import ModelTrainer from sagemaker.train.configs import SourceCode from sagemaker.core.helper.session_helper import get_execution_role from sagemaker.core import image_uris training_image = image_uris.retrieve( framework="pytorch", region=region, version="2.0.0", image_scope="training", instance_type=ml.p4d.24xlarge ) model_trainer = ModelTrainer( training_image=training_image, role=get_execution_role(), source_code=SourceCode(entry_script="train_with_profiler_demo.py", source_dir=source_dir), # your training job entry point 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 train ausführen. Mit wait=False können Sie die Protokolle der Trainingsaufträge stummschalten, so dass sie im Hintergrund laufen.

    model_trainer.train(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(model_trainer): config_name = None for processing in model_trainer.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( model_trainer.output_path, model_trainer.latest_training_job.name, "rule-output", config_name, ) print( f"Profiler output S3 bucket: ", get_detailed_profiler_output_uri(model_trainer) )

(Optional) Installieren Sie das SageMaker Profiler-Python-Paket

Um SageMaker Profiler auf PyTorch TensorFlow Framework-Images zu verwenden, die nicht in der Liste aufgeführt sindSageMaker Mit Profiler vorinstallierte AI-Framework-Images SageMaker, oder auf Ihrem eigenen benutzerdefinierten Docker-Container zu Trainingszwecken, können Sie SageMaker Profiler mithilfe eines der installieren. SageMaker Binärdateien des Profiler-Python-Pakets

Option 1: Installieren Sie das SageMaker Profiler-Paket, während Sie einen Trainingsjob starten

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

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

Option 2: Installieren Sie das SageMaker Profiler-Paket in Ihren benutzerdefinierten Docker-Containern

Wenn Sie einen benutzerdefinierten Docker-Container für das Training verwenden, fügen Sie eines der SageMaker Binärdateien des Profiler-Python-Pakets 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 Anleitung zum Ausführen eines benutzerdefinierten Docker-Containers für SageMaker KI-Schulungen im Allgemeinen finden Sie unter Anpassen Ihres eigenen Trainingscontainers.