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.
Die Einrichtung zur Ausführung eines Trainingsjobs mit dem SageMaker Profiler besteht aus zwei Schritten: der Anpassung des Trainingsskripts und der Konfiguration des SageMaker Trainingsjob-Launchers.
Themen
Schritt 1: Passen Sie Ihr Trainingsskript mit den SageMaker Profiler-Python-Modulen an
Um mit der Erfassung von Kernelläufen zu beginnen, GPUs 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 Annotatoren Operationen aus extrahieren. GPUs Für die Profilierung von CPUs Vorgängen in 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 einen SageMaker KI-Framework-Estimator und aktivieren Sie 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 Veröffentlichung am 14. Dezember 2023 beinhaltet eine bahnbrechende Änderung. Der Name des SageMaker Profiler-Python-Pakets wurde von smppy
in smprof
geändert. Dies ist in den SageMaker AI Framework-Containern
Wenn Sie eine der früheren Versionen der SageMaker AI Framework Containerssmppy
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
Sie können alle Funktionen mit dem Kontext-Manager abwickeln. smprof.annotate()
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 mit einem SageMaker Trainingsjob-Launcher einzureichen. Der Beispiel-Launcher geht davon aus, dass das Trainingsskript train_with_profiler_demo.py
heißt.
Schritt 2: Erstellen Sie einen SageMaker KI-Framework-Estimator und aktivieren Sie Profiler SageMaker
Das folgende Verfahren zeigt, wie Sie einen SageMaker KI-Framework-Estimator für das Training mit dem SageMaker Python-SDK vorbereiten.
-
Richten Sie mithilfe der Module
ProfilerConfig
undProfiler
wie folgt einprofiler_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 Zeitdauer in Sekunden für die Aktivierung der Profilerstellung an. CPUs Der Standardwert beträgt 3600 Sekunden.
-
-
-
Erstellen Sie einen SageMaker KI-Framework-Estimator mit dem im vorherigen Schritt erstellten
profiler_config
Objekt. 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 ihnsagemaker.tensorflow.TensorFlow
stattdessen und geben Sie eine der von Profiler unterstützten TensorFlowVersionen an. SageMaker Weitere Informationen zu den unterstützten Frameworks und Instance-Typen finden Sie unter SageMaker Mit Profiler vorinstallierte AI-Framework-Images SageMaker .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
) -
Starten Sie den Trainingsauftrag, indem Sie die Methode
fit
ausführen. Mitwait=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 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 für Schulungen, können Sie SageMaker Profiler mithilfe eines der installieren. SageMaker Binärdateien für das Profiler-Python-Paket
Option 1: Installieren Sie das SageMaker Profiler-Paket, während Sie einen Schulungsjob starten
Wenn Sie SageMaker Profiler für Trainingsaufgaben mit PyTorch oder TensorFlow Bildern verwenden möchten, die nicht in 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 zu dem source_dir Parameter des SageMaker KI-Framework-Estimators in Schritt 2 angegeben haben. Weitere Informationen zum Einrichten einer requirements.txt
Datei im Allgemeinen finden Sie unter Verwenden von Bibliotheken von Drittanbieternrequirements.txt
Datei einen der S3-Bucket-Pfade für den hinzuSageMaker Binärdateien für das Profiler-Python-Paket.
# 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 einen davon SageMaker Binärdateien für das Profiler-Python-Paket zu Ihrem 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
Anleitungen zum Ausführen eines benutzerdefinierten Docker-Containers für SageMaker KI-Schulungen im Allgemeinen finden Sie unter Anpassung Ihres eigenen Trainingscontainers.