Prepare e execute um trabalho de treinamento com o SageMaker Profiler - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Prepare e execute um trabalho de treinamento com o SageMaker Profiler

A configuração para executar um trabalho de treinamento com o SageMaker Profiler consiste em duas etapas: adaptar o script de treinamento e configurar o iniciador do trabalho de SageMaker treinamento.

Etapa 1: Adapte seu script de treinamento usando os módulos SageMaker Profiler Python

Para começar a capturar as execuções do kernel GPUs enquanto o trabalho de treinamento está em execução, modifique seu script de treinamento usando os módulos do SageMaker Profiler Python. Importe a biblioteca e adicione os métodos start_profiling() e stop_profiling() para definir o início e o fim da criação de perfil. Você também pode usar anotações personalizadas opcionais para adicionar marcadores no script de treinamento para visualizar as atividades do hardware durante operações específicas em cada etapa.

Observe que os anotadores extraem operações de. GPUs Para operações de criação de perfil emCPUs, você não precisa adicionar nenhuma anotação adicional. CPUa criação de perfil também é ativada quando você especifica a configuração de criação de perfil, na qual você praticará. Etapa 2: criar um estimador de SageMaker estrutura e ativar o Profiler SageMaker

nota

Definir o perfil de um trabalho de treinamento completo não é o uso mais eficiente dos recursos. Recomendamos traçar o perfil de no máximo 300 etapas de um trabalho de treinamento.

Importante

O lançamento em 14 de dezembro de 2023 envolve uma alteração significativa. O nome do pacote SageMaker Profiler Python foi alterado smppy de para. smprof Isso é efetivo nos SageMaker Framework Containers para TensorFlow v2.12 e versões posteriores.

Se você usa uma das versões anteriores dos SageMaker Framework Containers, como a TensorFlow v2.11.0, o pacote Profiler SageMaker Python ainda estará disponível como. smppy Se você não tiver certeza sobre qual versão ou nome do pacote deve usar, substitua a instrução de importação do pacote SageMaker Profiler pelo seguinte trecho de código.

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

Abordagem 1. Use o gerenciador de contexto smprof.annotate para anotar funções completas

Você pode agrupar funções completas com o gerenciador de smprof.annotate() contexto. Esse wrapper é recomendado se você quiser criar perfis por funções em vez de linhas de código. O script de exemplo a seguir mostra como implementar o gerenciador de contexto para encapsular o ciclo de treinamento e as funções completas em cada iteração.

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()

Abordagem 2. Use smprof.annotation_begin() e smprof.annotation_end() para anotar uma linha de código específica nas funções

Você também pode definir anotações para traçar o perfil de linhas de código específicas. Você pode definir o ponto inicial e final exatos da criação de perfil no nível das linhas de código individuais, não pelas funções. Por exemplo, no script a seguir, o step_annotator é definido no início de cada iteração e termina no final da iteração. Enquanto isso, outros anotadores detalhados para cada operação são definidos e envolvem as operações de destino em cada iteração.

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()

Depois de anotar e configurar os módulos de iniciação do profiler, salve o script para enviar usando um inicializador de tarefas de SageMaker treinamento na próxima Etapa 2. O iniciador de exemplo presume que o script de treinamento seja chamado de train_with_profiler_demo.py.

Etapa 2: criar um estimador de SageMaker estrutura e ativar o Profiler SageMaker

O procedimento a seguir mostra como preparar um estimador de SageMaker estrutura para treinamento usando o Python SageMaker . SDK

  1. Configure um objeto profiler_config usando os módulos ProfilerConfig e Profiler da seguinte forma.

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

    A seguir está a descrição do módulo Profiler e do argumento.

    • Profiler: O módulo para ativar o SageMaker Profiler com o trabalho de treinamento.

      • cpu_profiling_duration(int): especifique a duração do tempo em segundos para a criação de perfil. CPUs O padrão é 3600 segundos.

  2. Crie um estimador de SageMaker estrutura com o profiler_config objeto criado na etapa anterior. O código a seguir mostra um exemplo de criação de um PyTorch estimador. Se você quiser criar um TensorFlow estimador, importe sagemaker.tensorflow.TensorFlow em vez disso e especifique uma das TensorFlowversões suportadas pelo SageMaker Profiler. Para obter mais informações sobre os tipos de instâncias com suporte para as estruturas, consulte SageMaker imagens de estrutura pré-instaladas com SageMaker o Profiler.

    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. Inicie o trabalho de treinamento executando o método fit. Com o wait=False, você pode silenciar os registros de trabalhos de treinamento e deixá-los em execução em segundo plano.

    estimator.fit(wait=False)

Durante a execução do trabalho de treinamento ou após a conclusão do trabalho, você pode ir para o próximo tópico em Abra o aplicativo SageMaker Profiler UI e começar a explorar e visualizar os perfis salvos.

Se você quiser acessar diretamente os dados do perfil salvos no bucket do Amazon S3, use o script a seguir para recuperar o S3. URI

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 o pacote SageMaker Profiler Python

Para usar o SageMaker Profiler em PyTorch imagens de TensorFlow estrutura não listadas ou em SageMaker imagens de estrutura pré-instaladas com SageMaker o Profiler seu próprio contêiner Docker personalizado para treinamento, você pode instalar o SageMaker Profiler usando um dos. SageMaker Arquivos binários do pacote Profiler Python

Opção 1: instalar o pacote SageMaker Profiler ao iniciar um trabalho de treinamento

Se você quiser usar o SageMaker Profiler para treinar trabalhos usando PyTorch TensorFlow imagens não listadasSageMaker imagens de estrutura pré-instaladas com SageMaker o Profiler, crie um requirements.txt arquivo e localize-o no caminho especificado para o source_dir parâmetro do estimador da SageMaker estrutura na Etapa 2. Para obter mais informações sobre como configurar um requirements.txt arquivo em geral, consulte Usando bibliotecas de terceiros na documentação do SageMaker Python SDK. No requirements.txt arquivo, adicione um dos caminhos de bucket do S3 para o. SageMaker Arquivos binários do pacote Profiler Python

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

Opção 2: instalar o pacote SageMaker Profiler em seus contêineres personalizados do Docker

Se você usa um contêiner Docker personalizado para treinamento, adicione um deles SageMaker Arquivos binários do pacote Profiler Python ao seu 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 obter orientação sobre como executar um contêiner Docker personalizado para treinamento SageMaker em geral, consulte Adaptar seu próprio contêiner de treinamento.