Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
La configuración para ejecutar un trabajo de formación con el SageMaker Profiler consta de dos pasos: adaptar el guion de formación y configurar el lanzador de tareas de SageMaker formación.
Temas
Paso 1: Adapte su script de entrenamiento con los módulos SageMaker Profiler Python
Para empezar a capturar las ejecuciones del núcleo GPUs mientras se ejecuta el trabajo de entrenamiento, modifique el script de entrenamiento mediante los módulos Python de SageMaker Profiler. Importe la biblioteca y añada los métodos start_profiling()
y stop_profiling()
para definir el principio y el final de la creación de perfiles. También puede utilizar anotaciones personalizadas opcionales para añadir marcadores en el script de entrenamiento a fin de visualizar las actividades del hardware durante determinadas operaciones de cada paso.
Tenga en cuenta que los anotadores extraen las operaciones de. GPUs Para realizar operaciones de creación de perfiles CPUs, no es necesario añadir ninguna anotación adicional. La creación de perfiles de CPU también se activa cuando especificas la configuración de creación de perfiles, con la que practicará en Paso 2: Cree un estimador del marco de SageMaker IA y active Profiler SageMaker .
nota
Elaborar un perfil de todo un trabajo de entrenamiento no es el uso más eficiente de los recursos. Recomendamos perfilar un máximo de 300 pasos de un trabajo de entrenamiento.
importante
La versión en 14 de diciembre de 2023 implica un cambio importante. El nombre del paquete SageMaker Profiler Python se cambia de smppy
asmprof
. Esto es efectivo en los contenedores de SageMaker AI Framework
Si utiliza una de las versiones anteriores de los contenedores de SageMaker AI Frameworksmppy
Si no está seguro de qué versión o del nombre del paquete debe utilizar, sustituya la declaración de importación del paquete SageMaker Profiler por el siguiente fragmento de código.
try:
import smprof
except ImportError:
# backward-compatability for TF 2.11 and PT 1.13.1 images
import smppy as smprof
Método 1. Utilice el administrador de contexto smprof.annotate
para anotar todas las funciones
El administrador de contextos de smprof.annotate()
puede encapsular todas las funciones. Se recomienda utilizar este contenedor si desea crear perfiles por funciones en lugar de por líneas de código. El siguiente script de ejemplo muestra cómo implementar el administrador de contexto para encapsular el ciclo de entrenamiento y todas las funciones en cada iteración.
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()
Método 1. Utilice smprof.annotation_begin()
y smprof.annotation_end()
anote una línea de código específica en funciones
También puede definir anotaciones para perfilar líneas de código específicas. Puede establecer el punto de inicio y el punto de conexión exactos de la creación de perfiles a nivel de líneas de código individuales, no mediante las funciones. Por ejemplo, en el siguiente script, el step_annotator
se define el al principio de cada iteración y termina al final de la iteración. Mientras tanto, se definen otros anotadores detallados para cada operación y encapsulan las operaciones objetivo a lo largo de cada iteración.
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()
Tras anotar y configurar los módulos de iniciación del generador de perfiles, guarde el guion para enviarlo mediante un lanzador de tareas de SageMaker formación en el siguiente paso 2. En el ejemplo del lanzador se presupone que el script de entrenamiento se llama train_with_profiler_demo.py
.
Paso 2: Cree un estimador del marco de SageMaker IA y active Profiler SageMaker
El siguiente procedimiento muestra cómo preparar un estimador del marco de SageMaker IA para el entrenamiento con el SDK de SageMaker Python.
-
Configure un objeto
profiler_config
mediante los módulosProfilerConfig
yProfiler
de la siguiente manera.from sagemaker import ProfilerConfig, Profiler profiler_config = ProfilerConfig( profile_params = Profiler(cpu_profiling_duration=3600) )
La siguiente es la descripción del módulo
Profiler
y su argumento.-
Profiler
: El módulo para activar SageMaker Profiler con el trabajo de formación.-
cpu_profiling_duration
(int): especifique la duración en segundos para activar la creación de perfiles. CPUs El valor predeterminado es de 3600 segundos.
-
-
-
Cree un estimador del marco de SageMaker IA con el
profiler_config
objeto creado en el paso anterior. En el siguiente código se muestra un ejemplo de creación de un PyTorch estimador. Si desea crear un TensorFlow estimador, impórtelosagemaker.tensorflow.TensorFlow
en su lugar y especifique una de TensorFlowlas versiones compatibles con Profiler. SageMaker Para obtener más información sobre los tipos de instancias admitidos, consulte SageMaker Imágenes de AI Framework preinstaladas con Profiler 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
) -
Inicie el trabajo de entrenamiento ejecutando el método
fit
. Conwait=False
, puede silenciar los registros de los trabajos de entrenamiento y dejar que se ejecuten en segundo plano.estimator.fit(wait=False)
Mientras ejecuta el trabajo de entrenamiento o una vez finalizado el trabajo, puede pasar al tema siguiente en Abre la aplicación de interfaz de SageMaker usuario Profiler y empezar a explorar y visualizar los perfiles guardados.
Si desea acceder directamente a los datos del perfil guardados en el bucket de Amazon S3, utilice el siguiente script para recuperar el URI de S3.
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)
)
(Opcional) Instale el paquete SageMaker Profiler Python
Para usar SageMaker Profiler en imágenes de TensorFlow marcos PyTorch o marcos que no figuran en SageMaker Imágenes de AI Framework preinstaladas con Profiler SageMaker él o en su propio contenedor Docker personalizado con fines de formación, puede instalar SageMaker Profiler mediante uno de los. SageMaker Archivos binarios del paquete Profiler Python
Opción 1: Instale el paquete SageMaker Profiler al iniciar un trabajo de formación
Si desea utilizar SageMaker Profiler para realizar tareas de formación con TensorFlow imágenes PyTorch o imágenes que no aparecen en ellasSageMaker Imágenes de AI Framework preinstaladas con Profiler SageMaker , cree un requirements.txt archivo y ubíquelo en la ruta que especifique para el source_dir parámetro del estimador del marco de SageMaker IA en el paso 2. Para obtener más información sobre la configuración de un requirements.txt
archivo en general, consulte Uso de bibliotecas de tercerosrequirements.txt
, añada una de las rutas de bucket de S3 para los SageMaker Archivos binarios del paquete Profiler Python.
# requirements.txt
https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl
Opción 2: instale el paquete SageMaker Profiler en sus contenedores Docker personalizados
Si usa un contenedor de Docker personalizado para entrenamiento, agregue uno de los SageMaker Archivos binarios del paquete Profiler Python a su Dockerfile.
# 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
Para obtener información sobre cómo ejecutar un contenedor Docker personalizado para el entrenamiento sobre SageMaker IA en general, consulta Cómo adaptar tu propio contenedor de entrenamiento.