Amazon SageMaker 프로파일러를 사용하여 컴퓨팅 리소스의 활동을 프로파일링할 수 있습니다 AWS . - 아마존 SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SageMaker 프로파일러를 사용하여 컴퓨팅 리소스의 활동을 프로파일링할 수 있습니다 AWS .

Amazon SageMaker Profiler는 현재 프리뷰 출시 중이며 무료로 지원됩니다. AWS 리전일반적으로 사용 가능한 Amazon SageMaker Profiler 버전 (있는 경우) 에는 미리 보기에서 제공하는 것과 다른 기능 및 가격이 포함될 수 있습니다.

Amazon SageMaker Profiler는 딥 러닝 모델을 SageMaker 학습하는 동안 프로비저닝된 AWS 컴퓨팅 리소스를 자세히 볼 수 있는 Amazon의 기능입니다. SageMaker CPU 및 GPU 사용량, GPU에서의 커널 실행, CPU에서의 커널 시작, 동기화 작업, CPU와 GPU에서의 메모리 작업, 커널 실행과 해당 실행 사이의 지연 시간, CPU와 GPU 간 데이터 전송을 프로파일링하는 데 중점을 둡니다. SageMaker 또한 프로파일러는 프로파일을 시각화하는 사용자 인터페이스 (UI), 프로파일링된 이벤트의 통계 요약, GPU와 CPU 간 이벤트의 시간 관계를 추적하고 이해하기 위한 교육 작업 타임라인을 제공합니다.

참고

SageMaker 프로파일러는 AWS Deep Learning Containers for 를 PyTorch TensorFlow 지원하고 사용할 수 있습니다. SageMaker 자세한 내용은 지원되는 프레임워크, 이미지 AWS 리전, 인스턴스 유형 단원을 참조하세요.

데이터 사이언티스트용

대규모 컴퓨팅 클러스터에서 딥 러닝 모델을 훈련할 때는 병목 현상, 커널 시작 지연 시간, 메모리 제한, 낮은 리소스 사용률 등의 컴퓨팅 최적화 문제가 발생하는 경우가 많습니다.

이러한 컴퓨팅 성능 문제를 식별하려면 컴퓨팅 리소스를 더 깊이 분석하여 지연 시간을 유발하는 커널과 병목 현상을 유발하는 작업을 이해해야 합니다. 데이터 사이언티스트는 SageMaker 프로파일러 UI를 사용하여 교육 작업의 세부 프로필을 시각화하는 이점을 활용할 수 있습니다. UI는 요약 차트와 타임라인 인터페이스가 포함된 대시보드를 제공하여 컴퓨팅 리소스의 모든 이벤트를 추적할 수 있습니다. 또한 데이터 과학자는 SageMaker Profiler Python 모듈을 사용하여 교육 작업의 특정 부분을 추적하는 사용자 지정 주석을 추가할 수 있습니다.

관리자용

계정 또는 도메인의 관리자인 경우 SageMaker 콘솔 또는 SageMaker 도메인의 프로파일러 랜딩 페이지를 통해 프로파일러 애플리케이션 사용자를 관리할 수 있습니다. AWS SageMaker 각 도메인 사용자는 부여된 권한이 주어지면 자신의 프로파일러 애플리케이션에 액세스할 수 있습니다. SageMaker 도메인 관리자 및 도메인 사용자는 보유한 권한 수준에 따라 프로파일러 애플리케이션을 생성하고 삭제할 수 있습니다.

지원되는 프레임워크, 이미지 AWS 리전, 인스턴스 유형

이 기능은 다음과 같은 기계 학습 프레임워크 및 AWS 리전을(를) 지원합니다.

참고

이 기능을 사용하려면 SageMaker Python SDK 버전 2.180.0 이상이 설치되어 있어야 합니다.

SageMaker 프로파일러와 함께 사전 설치된 프레임워크 이미지 SageMaker

SageMaker 프로파일러는 다음 AWS Deep Learning Containers에 사전 설치되어 있습니다. SageMaker

PyTorch이미지

PyTorch 버전 AWS DLC 이미지 URI
2.2.0

763104351884 .dkr.ecr. <region>.amazonaws.com/pytorch-training:2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker

2.1.0

763104351884 .dkr.ecr. <region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker

2.0.1

763104351884 .dkr.ecr. <region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker

763104351884 .dkr.ecr. <region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu121-ubuntu20.04-sagemaker

1.13.1

763104351884 .dkr.ecr. <region>.amazonaws.com/pytorch-training:1.13.1-gpu-py39-cu117-ubuntu20.04-sagemaker

TensorFlow 이미지

TensorFlow 버전 AWS DLC 이미지 URI
2.13.0

763104351884 .dkr.ecr. <region>.amazonaws.com/tensorflow-training:2.13.0-gpu-py310-cu118-ubuntu20.04-sagemaker

2.12.0

763104351884 .dkr.ecr. <region>.amazonaws.com/tensorflow-training:2.12.0-gpu-py310-cu118-ubuntu20.04-sagemaker

2.11.0

763104351884 .dkr.ecr. <region>.amazonaws.com/tensorflow-training:2.11.0-gpu-py39-cu112-ubuntu20.04-sagemaker

중요

위 표의 프레임워크 컨테이너의 배포 및 유지 관리는 AWS Deep Learning Containers 서비스에서 관리하는 프레임워크 지원 정책에 따릅니다. 더 이상 지원되지 않는 이전 프레임워크 버전을 사용하는 경우 현재 지원되는 프레임워크 버전으로 업그레이드하는 것이 좋습니다.

참고

다른 프레임워크 이미지나 자체 Docker 이미지에 SageMaker 프로파일러를 사용하려면 다음 섹션에 제공된 SageMaker Profiler SageMaker Python 패키지 바이너리 파일을 사용하여 프로파일러를 설치할 수 있습니다.

SageMaker 프로파일러 Python 패키지 바이너리 파일

자체 Docker 컨테이너를 구성하려면 다른 Docker 컨테이너에서 SageMaker Profiler를 사용하고 Profiler SageMaker Python 패키지를 로컬로 설치하려면 다음 바이너리 파일 중 하나를 사용하십시오. PyTorch TensorFlow 사용자 환경의 Python 및 CUDA 버전에 따라 다음 중 하나를 선택하십시오.

PyTorch

TensorFlow

바이너리 파일을 사용하여 SageMaker 프로파일러를 설치하는 방법에 대한 자세한 내용은 을 참조하십시오. (선택 사항) SageMaker 프로파일러 Python 패키지 설치

지원됨 AWS 리전

SageMaker 프로파일러는 다음에서 사용할 수 있습니다. AWS 리전

  • 미국 동부 (버지니아 북부) (us-east-1)

  • 미국 동부 (오하이오)(us-east-2)

  • 미국 서부 (오리건) (us-west-2)

  • EU (프랑크푸르트)(eu-central-1)

  • EU (아일랜드)(eu-west-1)

지원되는 인스턴스 유형

SageMaker 프로파일러는 다음 인스턴스 유형에서 교육 작업의 프로파일링을 지원합니다.

CPU 및 GPU 프로파일링

  • ml.g4dn.12xlarge

  • ml.g5.24xlarge

  • ml.g5.48xlarge

  • ml.p3dn.24xlarge

  • ml.p4de.24xlarge

  • ml.p4d.24xlarge

  • ml.p5.48xlarge

GPU 프로파일링만 가능

  • ml.g5.2xlarge

  • ml.g5.4xlarge

  • ml.g5.8xlarge

  • ml.g5.16.xlarge

필수 조건

다음 목록은 프로파일러 사용을 시작하기 위한 사전 요구 사항을 보여줍니다. SageMaker

  • 계정에 Amazon VPC가 설정되어 있는 SageMaker 도메인입니다. AWS

    도메인 설정에 대한 지침은 빠른 설정을 사용하여 Amazon SageMaker 도메인에 온보딩을 참조하십시오. 또한 개별 사용자가 Profiler UI 애플리케이션에 액세스할 수 있도록 도메인 사용자 프로필을 추가해야 합니다. 자세한 내용은 SageMaker 도메인 사용자 프로필 추가 및 제거를 참조하십시오.

  • 다음 목록은 Profiler UI 애플리케이션을 사용하기 위한 최소 권한 집합입니다.

    • sagemaker:CreateApp

    • sagemaker:DeleteApp

    • sagemaker:DescribeTrainingJob

    • sagemaker:Search

    • s3:GetObject

    • s3:ListBucket

SageMaker 프로파일러를 사용하여 교육 작업을 준비하고 실행하십시오.

SageMaker 프로파일러를 사용하여 교육 작업을 실행하도록 설정하는 단계는 교육 스크립트 조정과 교육 작업 시작 관리자 구성의 두 단계로 구성됩니다. SageMaker

1단계: SageMaker 프로파일러 Python 모듈을 사용하여 학습 스크립트 조정

훈련 작업이 실행되는 동안 GPU에서 커널 실행을 캡처하기 시작하려면 SageMaker Profiler Python 모듈을 사용하여 훈련 스크립트를 수정하십시오. 라이브러리를 가져오고 start_profiling()stop_profiling() 메서드를 추가하여 프로파일링의 시작과 끝을 정의합니다. 또한 선택적 사용자 지정 주석을 사용하여 훈련 스크립트에 마커를 추가하여 각 단계에서 특정 작업을 수행하는 동안 하드웨어 활동을 시각화할 수 있습니다.

참고로 주석자는 GPU에서 연산을 추출합니다. CPU에서 프로파일링 작업을 수행할 때는 주석을 추가할 필요가 없습니다. CPU 프로파일링은 프로파일링 구성을 지정할 때도 활성화됩니다. 이 설정은 2단계: 프레임워크 추정기 생성 및 프로파일러 활성화 SageMaker SageMaker 에서 연습해 보겠습니다.

참고

전체 훈련 작업을 프로파일링하는 것이 리소스를 가장 효율적으로 사용하는 것은 아닙니다. 훈련 작업의 최대 300단계를 프로파일링하는 것이 좋습니다.

중요

이번 2023년 12월 14일 릴리스에는 주요 변경 사항이 포함되어 있습니다. SageMaker 프로파일러 Python 패키지 이름이 에서 로 smppy 변경되었습니다. smprof 이는 TensorFlow v2.12 이상의 SageMaker 프레임워크 컨테이너에서 유효합니다.

SageMaker 프레임워크 컨테이너의 이전 버전 (예: TensorFlow v2.11.0) 중 하나를 사용하는 경우 프로파일러 SageMaker Python 패키지를 계속 사용할 수 있습니다. smppy 어떤 버전이나 패키지 이름을 사용해야 할지 잘 모르겠으면 SageMaker 프로파일러 패키지의 import 문을 다음 코드 스니펫으로 바꾸십시오.

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

접근법 1. 컨텍스트 관리자 smprof.annotate을(를) 사용하여 전체 함수에 주석 달기

컨텍스트 관리자를 사용하여 전체 함수를 래핑할 수 있습니다. smprof.annotate() 코드 라인 대신 함수별로 프로파일링하려는 경우 이 래퍼를 사용하는 것이 좋습니다. 다음 예제 스크립트는 컨텍스트 관리자를 구현하여 각 반복에서 훈련 루프와 전체 함수를 래핑하는 방법을 보여줍니다.

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

접근법 2. smprof.annotation_begin()smprof.annotation_end()을(를) 사용하여 함수의 특정 코드 라인에 주석 달기

주석을 정의하여 특정 코드 라인을 프로파일링할 수도 있습니다. 프로파일링의 정확한 시작점과 끝점은 함수가 아닌 개별 코드 라인 수준에서 설정할 수 있습니다. 예를 들어, 다음 스크립트에서 step_annotator은(는) 각 반복 시작 시 정의되고 반복 종료 시 종료됩니다. 한편, 각 작업에 대한 기타 세부 주석자가 정의되고 각 반복 전반에 걸쳐 대상 작업을 래핑합니다.

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

프로파일러 시작 모듈에 주석을 달고 설정한 후, 다음 2단계에서 SageMaker 교육 작업 실행 프로그램을 사용하여 제출할 스크립트를 저장합니다. 샘플 런처는 훈련 스크립트에 이름이 train_with_profiler_demo.py(으)로 지정된 것으로 가정합니다.

2단계: 프레임워크 추정기 생성 및 프로파일러 활성화 SageMaker SageMaker

다음 절차는 SageMaker Python SDK를 사용하여 학습용 SageMaker 프레임워크 추정기를 준비하는 방법을 보여줍니다.

  1. 다음과 같이 ProfilerConfigProfiler 모듈을 사용하여 profiler_config 객체를 설정합니다.

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

    다음은 Profiler 모듈과 해당 인수에 대한 설명입니다.

    • Profiler: 훈련 작업과 함께 SageMaker 프로파일러를 활성화하기 위한 모듈입니다.

      • cpu_profiling_duration (int): CPU에서 프로파일링할 시간을 초 단위로 지정합니다. 기본값은 3600초입니다.

  2. 이전 단계에서 만든 profiler_config 객체를 사용하여 SageMaker 프레임워크 추정기를 생성합니다. 다음 코드는 추정기를 만드는 예제를 보여줍니다. PyTorch TensorFlow 추정기를 만들려면 sagemaker.tensorflow.TensorFlow 대신 가져와서 프로파일러가 지원하는 TensorFlow버전 중 하나를 지정하세요. SageMaker 지원되는 프레임워크 및 인스턴스 유형에 대한 자세한 내용은 SageMaker 프로파일러와 함께 사전 설치된 프레임워크 이미지 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 )
  3. fit 메서드를 실행하여 훈련 작업을 시작합니다. wait=False을(를) 사용하면 훈련 작업 로그를 무음으로 설정하고 백그라운드에서 실행되도록 할 수 있습니다.

    estimator.fit(wait=False)

훈련 작업을 실행하는 동안 또는 작업이 완료된 후에는 SageMaker 프로파일러 UI 애플리케이션을 엽니다.에서 다음 주제로 이동하여 저장된 프로필을 탐색하고 시각화할 수 있습니다.

Amazon S3 버킷에 저장된 프로필 데이터에 직접 액세스하려면 다음 스크립트를 사용하여 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) )

(선택 사항) SageMaker 프로파일러 Python 패키지 설치

에 나열되지 않은 TensorFlow 프레임워크 이미지 PyTorch 또는 자체 사용자 지정 Docker 컨테이너에서 SageMaker 프로파일러와 함께 사전 설치된 프레임워크 이미지 SageMaker 교육용으로 SageMaker 프로파일러를 사용하려면 다음 중 하나를 사용하여 SageMaker 프로파일러를 설치할 수 있습니다. SageMaker 프로파일러 Python 패키지 바이너리 파일

옵션 1: 교육 작업을 시작하는 동안 SageMaker 프로파일러 패키지 설치

에 나열되지 않은 PyTorch TensorFlow 이미지나 이미지를 사용하는 교육 작업에 SageMaker 프로파일러를 사용하려면 requirements.txt 파일을 만들고 SageMaker 프로파일러와 함께 사전 설치된 프레임워크 이미지 SageMaker 2단계에서 SageMaker 프레임워크 추정기의 source_dir 매개변수로 지정한 경로 아래에서 파일을 찾으십시오. 일반적인 requirements.txt 파일 설정에 대한 자세한 내용은 SageMaker Python SDK 설명서의 타사 라이브러리 사용을 참조하십시오. requirements.txt파일에 의 S3 버킷 경로 중 하나를 추가합니다. SageMaker 프로파일러 Python 패키지 바이너리 파일

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

옵션 2: 사용자 지정 Docker 컨테이너에 SageMaker 프로파일러 패키지 설치

사용자 지정 Docker 컨테이너를 교육용으로 사용하는 경우 이 중 하나를 Dockerfile에 추가하세요. SageMaker 프로파일러 Python 패키지 바이너리 파일

# 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

일반적인 학습을 위해 사용자 지정 Docker 컨테이너를 실행하는 방법에 대한 지침은 SageMaker 자체 교육 컨테이너 조정을 참조하세요.

SageMaker 프로파일러 UI 애플리케이션을 엽니다.

다음 옵션을 통해 SageMaker 프로파일러 UI 애플리케이션에 액세스할 수 있습니다.

옵션 1: 도메인 세부정보 SageMaker 페이지에서 프로파일러 UI 실행

SageMaker 콘솔에 액세스할 수 있는 경우 이 옵션을 사용할 수 있습니다.

도메인 세부정보 페이지로 이동합니다.

다음 절차는 도메인 세부정보 페이지로 이동하는 방법을 보여줍니다.

  1. https://console.aws.amazon.com/sagemaker/ 에서 아마존 SageMaker 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 도메인을 선택합니다.

  3. 도메인 목록에서 SageMaker 프로파일러 애플리케이션을 시작하려는 도메인을 선택합니다.

SageMaker 프로파일러 UI 애플리케이션을 실행합니다.

다음 절차는 사용자 프로필로 범위가 지정된 SageMaker 프로파일러 애플리케이션을 시작하는 방법을 보여줍니다.

  1. 도메인 세부정보 페이지에서 사용자 프로필 탭을 선택합니다.

  2. SageMaker 프로파일러 UI 애플리케이션을 실행하려는 사용자 프로필을 식별합니다.

  3. 선택한 사용자 프로필에 대해 시작을 선택하고 Profiler를 선택합니다.

옵션 2: 콘솔의 SageMaker 프로파일러 랜딩 페이지에서 SageMaker 프로파일러 UI 애플리케이션 실행 SageMaker

다음 절차는 콘솔의 프로파일러 랜딩 페이지에서 SageMaker 프로파일러 UI 애플리케이션을 시작하는 방법을 설명합니다. SageMaker SageMaker SageMaker콘솔에 액세스할 수 있는 경우 이 옵션을 사용할 수 있습니다.

  1. https://console.aws.amazon.com/sagemaker/ 에서 아마존 SageMaker 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 프로파일러를 선택합니다.

  3. 시작하기에서 Studio Classic 애플리케이션을 시작하려는 도메인을 선택합니다. 사용자 프로필이 한 도메인에만 속하는 경우 도메인 선택 옵션이 표시되지 않습니다.

  4. SageMaker 프로파일러 UI 애플리케이션을 실행하려는 사용자 프로필을 선택합니다. 도메인에 사용자 프로필이 없는 경우 사용자 프로필 생성을 선택합니다. 새 사용자 프로필을 만드는 방법에 대한 자세한 내용은 사용자 프로필 추가 및 제거를 참조하세요.

  5. Profiler 열기를 선택합니다.

옵션 3: SageMaker Python SDK의 애플리케이션 런처 함수 사용

SageMaker 도메인 사용자이고 Studio에만 액세스할 수 있는 경우 함수를 실행하여 SageMaker Studio Classic을 통해 SageMaker SageMaker 프로파일러 UI 애플리케이션에 액세스할 수 있습니다. sagemaker.interactive_apps.detail_profiler_app.DetailProfilerApp

참고로 SageMaker 스튜디오 클래식은 re:Invent 2023 이전의 이전 스튜디오 UI 환경이며, re:Invent 2023에서 새롭게 디자인된 스튜디오 UI에 애플리케이션으로 마이그레이션되었습니다. SageMaker 프로파일러 UI 애플리케이션은 SageMaker 도메인 수준에서 사용할 수 있으므로 도메인 ID와 사용자 프로필 이름이 필요합니다. 현재 이 DetailedProfilerApp 함수는 SageMaker Studio Classic 애플리케이션 내에서만 작동하며, 이 함수는 SageMaker Studio Classic에서 도메인 및 사용자 프로필 정보를 제대로 가져옵니다.

re:Invent 2023 이전에 생성된 도메인, 도메인 사용자 및 스튜디오의 경우 Amazon SageMaker Studio Classic에서 마이그레이션하기 지침에 따라 업데이트하지 않는 한 스튜디오 클래식이 기본 환경이 됩니다. 이 경우에는 추가 조치가 필요하지 않으며 함수를 실행하여 SageMaker 프로파일러 UI 애플리케이션을 직접 시작할 수 있습니다. DetailProfilerApp

re:Invent 2023 이후에 새 도메인과 Studio를 생성한 경우 Studio UI에서 Studio Classic 애플리케이션을 시작한 다음 DetailProfilerApp 함수를 실행하여 프로파일러 UI 애플리케이션을 시작하십시오. SageMaker

참고로 이 DetailedProfilerApp 함수는 Studio 애플리케이션, SageMaker SageMaker 스튜디오 코드 편집기 JupyterLab 애플리케이션, Notebook 인스턴스와 같은 다른 SageMaker 머신 러닝 IDE에서는 작동하지 않습니다. SageMaker 이러한 IDE에서 DetailedProfilerApp 함수를 실행하면 프로파일러 UI 애플리케이션을 여는 직접 링크 대신 SageMaker 콘솔의 프로파일러 랜딩 페이지로 연결되는 URL이 반환됩니다.

프로파일러 UI에 시각화된 프로필 출력 데이터를 살펴보세요. SageMaker

이 섹션에서는 SageMaker 프로파일러 UI를 살펴보고 이를 사용하고 이를 통해 통찰력을 얻는 방법에 대한 팁을 제공합니다.

프로필 로드

SageMaker 프로파일러 UI를 열면 로드 프로필 페이지가 열립니다. 대시보드타임라인을 로드하고 생성하려면 다음 절차를 따르세요.

훈련 작업 프로필을 로드하려면
  1. 훈련 작업 목록 섹션에서 확인란을 사용하여 프로필을 로드하려는 훈련 작업을 선택합니다.

  2. 로드(Load)를 선택합니다. 작업 이름이 상단의 로드된 프로필 섹션에 표시되어야 합니다.

  3. 작업 이름 왼쪽에 있는 라디오 버튼을 선택하여 대시보드타임라인을 생성합니다. 참고로 라디오 버튼을 선택하면 UI에서 대시보드가 자동으로 열립니다. 또한 작업 상태와 로딩 상태가 여전히 진행 중인 것으로 보이는 상태에서 시각화를 생성하면 SageMaker 프로파일러 UI는 진행 중인 교육 작업에서 수집한 최신 프로필 데이터 또는 부분적으로 로드된 프로필 데이터까지 대시보드 플롯과 타임라인을 생성합니다.

작은 정보

프로필을 한 번에 하나씩 로드하고 시각화할 수 있습니다. 다른 프로필을 로드하려면 먼저 이전에 로드한 프로필을 언로드해야 합니다. 프로필을 언로드하려면 로드된 프로필 섹션에서 프로필 오른쪽 끝에 있는 휴지통 아이콘을 사용합니다.

프로파일러 UI의 로드 프로필 페이지 스크린샷 SageMaker

대시보드

훈련 작업 로드 및 선택을 마치면 UI에서 기본적으로 다음 패널이 포함된 대시보드 페이지가 열립니다.

  • GPU 활성 시간 - 이 파이 차트는 GPU 활성 시간과 GPU 유휴 시간의 백분율을 보여줍니다. 전체 훈련 작업 동안 GPU가 유휴 상태보다 더 활발한지 확인할 수 있습니다. GPU 활성 시간은 사용률이 0% 이상인 프로필 데이터 포인트를 기준으로 하는 반면, GPU 유휴 시간은 사용률이 0%인 프로파일링된 데이터 포인트를 기준으로 합니다.

  • 시간 경과에 따른 GPU 사용률 - 이 타임라인 그래프는 모든 노드를 단일 차트로 집계하여 시간 경과에 따른 노드당 평균 GPU 사용률을 보여줍니다. 특정 시간 간격 동안 GPU에 워크로드 불균형, 사용률 저하 문제, 병목 현상 또는 유휴 문제가 있는지 확인할 수 있습니다. 개별 GPU 수준 및 관련 커널 실행에서의 사용률을 추적하려면 타임라인 인터페이스을(를) 사용하세요. 참고로 GPU 활동 수집은 훈련 스크립트에 프로파일러 스타터 함수 SMProf.start_profiling()을(를) 추가한 곳에서 시작되며 SMProf.stop_profiling()에서 중지됩니다.

  • CPU 활성 시간 - 이 파이 차트는 CPU 활성 시간과 CPU 유휴 시간의 백분율을 보여줍니다. 전체 훈련 작업 동안 CPU가 유휴 상태보다 더 활발한지 확인할 수 있습니다. CPU 활성 시간은 사용률이 0% 이상인 프로필 데이터 포인트를 기준으로 하는 반면, CPU 유휴 시간은 사용률이 0%인 프로파일링된 데이터 포인트를 기준으로 합니다.

  • 시간 경과에 따른 CPU 사용률 - 이 타임라인 그래프는 모든 노드를 단일 차트로 집계하여 시간 경과에 따른 노드당 평균 CPU 사용률을 보여줍니다. 특정 시간 간격 동안 CPU에 병목 현상이 발생하거나 사용률이 낮은지 확인할 수 있습니다. 개별 GPU 사용률 및 커널 실행에 맞게 조정된 CPU의 사용률을 추적하려면 타임라인 인터페이스을(를) 사용하세요. 참고로 사용률 지표는 작업 초기화 시점부터 시작됩니다.

  • 모든 GPU 커널이 소비한 시간 - 이 파이 차트는 훈련 작업 전반에 걸쳐 운영된 모든 GPU 커널을 보여줍니다. 기본적으로 상위 15개 GPU 커널이 개별 섹터로 표시되고 다른 모든 커널은 한 섹터에 표시됩니다. 섹터 위로 마우스를 가져가면 더 자세한 정보를 볼 수 있습니다. 값은 GPU 커널의 총 작동 시간을 초 단위로 나타내며 백분율은 프로필의 전체 시간을 기준으로 합니다.

  • 상위 15개 GPU 커널이 소비한 시간 - 이 파이 차트는 훈련 작업 전반에 걸쳐 운영된 모든 GPU 커널을 보여줍니다. 상위 15개 GPU 커널을 개별 섹터로 보여줍니다. 섹터 위로 마우스를 가져가면 더 자세한 정보를 볼 수 있습니다. 값은 GPU 커널의 총 작동 시간을 초 단위로 나타내며 백분율은 프로필의 전체 시간을 기준으로 합니다.

  • 모든 GPU 커널의 시작 횟수 - 이 파이 차트는 훈련 작업 전반에 걸쳐 시작된 모든 GPU 커널의 개수를 보여줍니다. 상위 15개 GPU 커널이 개별 섹터로 표시되고 다른 모든 커널은 한 섹터에 표시됩니다. 섹터 위로 마우스를 가져가면 더 자세한 정보를 볼 수 있습니다. 이 값은 시작된 GPU 커널의 총 개수를 나타내며 백분율은 모든 커널의 전체 개수를 기준으로 합니다.

  • 상위 15개 GPU 커널의 시작 횟수 - 이 파이 차트는 훈련 작업 전반에 걸쳐 시작된 모든 GPU 커널의 개수를 보여줍니다. 상위 15개의 GPU 커널을 보여줍니다. 섹터 위로 마우스를 가져가면 더 자세한 정보를 볼 수 있습니다. 이 값은 시작된 GPU 커널의 총 개수를 나타내며 백분율은 모든 커널의 전체 개수를 기준으로 합니다.

  • 단계 시간 분포 - 이 히스토그램은 GPU의 단계 지속 시간 분포를 보여줍니다. 이 플롯은 훈련 스크립트에 단계 주석자를 추가한 후에만 생성됩니다.

  • 커널 정밀도 분포 - 이 파이 차트는 FP32, FP16, INT32, INT8과 같은 다양한 데이터 유형에서 커널을 실행하는 데 소요된 시간의 백분율을 보여줍니다.

  • GPU 활동 분포 - 이 파이 차트는 커널 실행, 메모리(memcpymemset), 동기화(sync)와 같이 GPU 활동에 소요된 시간의 백분율을 보여줍니다.

  • GPU 메모리 작업 분포 - 이 파이 차트는 GPU 메모리 작업에 소요된 시간의 백분율을 보여줍니다. 이를 통해 memcopy 활동을 시각화하여 훈련 작업이 특정 메모리 작업에 과도한 시간을 소비하고 있는지 확인할 수 있습니다.

  • 새 히스토그램 생성 - 1단계: SageMaker 프로파일러 Python 모듈을 사용하여 학습 스크립트 조정 작업 중에 수동으로 주석을 추가한 사용자 지정 지표의 새 다이어그램을 만드세요. 새 히스토그램에 사용자 지정 주석을 추가할 때는 훈련 스크립트에서 추가한 주석의 이름을 선택하거나 입력합니다. 예를 들어, 1단계의 데모 훈련 스크립트에서는 step, Forward, Backward, Optimize, 및 Loss이(가) 사용자 지정 주석입니다. 새 히스토그램을 생성하는 동안 이러한 주석 이름은 메트릭 선택을 위한 드롭다운 메뉴에 표시되어야 합니다. Backward을(를) 선택하는 경우 UI는 프로파일링된 시간 동안 역방향 패스에 소요된 시간의 히스토그램을 대시보드에 추가합니다. 이 유형의 히스토그램은 비정상적으로 시간이 오래 걸리고 병목 현상을 일으키는 특이값이 있는지 확인하는 데 유용합니다.

다음 스크린샷은 컴퓨팅 노드당 시간에 대한 GPU 및 CPU 활성 시간 비율과 평균 GPU 및 CPU 사용률을 보여줍니다.

프로파일러 UI의 대시보드 페이지 스크린샷 SageMaker

다음 스크린샷은 GPU 커널이 시작된 횟수를 비교하고 실행에 소요되는 시간을 측정하는 파이 차트의 예제를 보여줍니다. 모든 GPU 커널에 걸린 시간모든 GPU 커널의 시작 횟수 패널에서 k의 입력 필드에 정수를 지정하여 플롯에 표시할 범례의 수를 조정할 수도 있습니다. 예를 들어 10을 지정하면 가장 많이 실행된 커널과 시작된 커널 상위 10개가 각각 플롯에 표시됩니다.

프로파일러 UI의 대시보드 페이지 스크린샷 SageMaker

다음 스크린샷은 커널 정밀도 분포, GPU 활동 분포, GPU 메모리 작업 분포에 대한 단계 시간 지속 히스토그램 및 파이 차트의 예제를 보여줍니다.

프로파일러 UI의 대시보드 페이지 스크린샷 SageMaker

타임라인 인터페이스

CPU에 예약되고 GPU에서 실행되는 작업 및 커널 수준의 컴퓨팅 리소스를 자세히 보려면 타임라인 인터페이스를 사용하세요.

마우스, [w, a, s, d] 키 또는 키보드의 화살표 키 4개를 사용하여 타임라인 인터페이스를 확대 및 축소하고 왼쪽이나 오른쪽으로 이동할 수 있습니다.

작은 정보

타임라인 인터페이스와 상호 작용하는 데 필요한 키보드 바로 가기에 대한 추가 팁을 보려면 왼쪽 창에서 키보드 바로 가기를 선택하세요.

이 타임라인 트랙은 트리 구조로 구성되어 있어 호스트 수준에서 디바이스 수준까지의 정보를 제공합니다. 예를 들어, 각각 8개의 GPU가 있는 N 인스턴스를 실행하는 경우 각 인스턴스의 타임라인 구조는 다음과 같습니다.

  • algo-i node — 프로비저닝된 인스턴스에 작업을 할당하는 데 SageMaker 사용되는 태그입니다. 숫자 inode은(는) 무작위로 할당됩니다. 예를 들어 인스턴스 4개를 사용하는 경우 이 섹션은 algo-1에서 algo-4로 확장됩니다.

    • CPU - 이 섹션에서 평균 CPU 사용률과 성능 카운터를 확인할 수 있습니다.

    • GPU - 이 섹션에서 평균 GPU 사용률, 개별 GPU 사용률 및 커널을 확인할 수 있습니다.

      • 합계 사용률 - 인스턴스당 평균 GPU 사용률입니다.

      • HOST-0 PID-123 - 각 프로세스 트랙에 할당된 고유한 이름입니다. 약어 PID는 프로세스 ID이고, 여기에 추가된 숫자는 프로세스에서 데이터를 캡처하는 동안 기록되는 프로세스 ID 번호입니다. 이 섹션에는 프로세스에서 얻은 다음 정보가 표시됩니다.

        • GPU-inum_gpu 사용률 - 시간 경과에 따른 inum_gpu번째 GPU 사용률.

        • GPU-inum_gpu 디바이스 - inum_gpu번째 GPU 디바이스에서 실행되는 커널.

          • 스트림 icuda_stream - GPU 디바이스에서 실행되는 커널을 보여주는 CUDA 스트림. CUDA 스트림에 대해 자세히 알아보려면 NVIDIA에서 제공하는 CUDA C/C++ 스트림 및 동시성에 관한 PDF 슬라이드를 참조하세요.

        • GPU-inum_gpu 호스트 - inum_gpu번째 GPU 호스트에서 실행되는 커널.

다음 스크린샷은 각각 8개의 NVIDIA A100 Tensor Core GPU가 장착된 ml.p4d.24xlarge 인스턴스에서 실행되는 훈련 작업의 프로필 타임라인을 보여줍니다.

다음은 프로필을 축소하여 보여 주는 것으로, 다음 데이터 배치를 가져오기 위해 step_232와(과) step_233 사이의 간헐적인 데이터 로더를 포함하여 12개의 단계를 인쇄합니다.

SageMaker 프로파일러 UI의 타임라인 페이지 스크린샷으로, 샘플 교육 작업의 프로필을 시각화합니다.

각 CPU에 대해 CPU에서 실행되는 명령을 나타내는 "itlb_misses.miss_causes_a_walk""clk_unhalted_ref.tsc"와(과) 같은 CPU 사용률 및 성능 카운터를 추적할 수 있습니다.

각 GPU에 대해 호스트 타임라인과 디바이스 타임라인을 볼 수 있습니다. 커널 시작은 호스트 타임라인을 기준으로 하고 커널 실행은 디바이스 타임라인을 기준으로 합니다. GPU 호스트 타임라인에 훈련 스크립트를 추가한 경우 주석(예: 앞으로, 뒤로, 최적화)을 볼 수도 있습니다.

타임라인 뷰에서는 커널 쌍을 추적할 수도 있습니다. launch-and-run 이를 통해 호스트(CPU)에 예약된 커널 시작이 해당 GPU 디바이스에서 어떻게 실행되는지 이해할 수 있습니다.

작은 정보

f 키를 누르면 선택한 커널이 확대됩니다.

다음 스크린샷은 이전 스크린샷의 step_233step_234을(를) 확대한 모습입니다. 다음 스크린샷에서 선택한 타임라인 간격은 분산 훈련의 필수 통신 및 동기화 단계이자 GPU-0 디바이스에서 실행되는 AllReduce 작업입니다. 스크린샷에서 GPU-0 호스트에서의 커널 시작은 청록색 화살표로 표시된 GPU-0 디바이스 스트림 1에서 실행되는 커널에 연결된다는 것을 알 수 있습니다.

SageMaker 프로파일러 UI의 타임라인 페이지 스크린샷

또한 이전 스크린샷과 같이 타임라인 간격을 선택하면 UI의 하단 패널에 두 개의 정보 탭이 나타납니다. 현재 선택 탭에는 선택한 커널과 호스트의 연결된 커널 시작에 대한 세부 정보가 표시됩니다. 각 GPU 커널은 항상 CPU에서 직접적으로 호출되므로 연결 방향은 항상 호스트(CPU)에서 디바이스(GPU) 방향입니다. 연결 탭에는 선택한 커널 시작 및 실행 쌍이 표시됩니다. 둘 중 하나를 선택하여 타임라인 보기의 중앙으로 이동할 수 있습니다.

다음 스크린샷은 AllReduce 작업 시작 및 실행 쌍을 더 확대하여 보여줍니다.

프로파일러 UI의 타임라인 페이지 스크린샷 SageMaker

정보

정보에서 인스턴스 유형, 작업에 프로비저닝된 컴퓨팅 리소스의 Amazon 리소스 이름(ARN), 노드 이름, 하이퍼파라미터 등 로드된 훈련 작업에 대한 정보에 액세스할 수 있습니다.

설정

SageMaker Profiler UI 애플리케이션 인스턴스는 기본적으로 2시간의 유휴 시간이 지나면 종료되도록 구성되어 있습니다. 설정에서 다음 설정을 사용하여 자동 종료 타이머를 조정할 수 있습니다.

  • 앱 자동 종료 활성화 - 지정된 유휴 시간이 지나면 애플리케이션이 자동으로 종료되도록 선택하고 활성화로 설정합니다. 자동 종료 기능을 끄려면 비활성화를 선택합니다.

  • 자동 종료 임곗값(시간) - 앱 자동 종료 활성화에서 활성화를 선택하면 애플리케이션이 자동으로 종료되는 임곗값을 시간 단위로 설정할 수 있습니다. 기본값은 2시간으로 설정되어 있습니다.

프로파일러 사용에 관해 자주 묻는 질문 SageMaker

다음 자주 묻는 질문을 통해 프로파일러 사용에 SageMaker 대한 답변을 찾아보세요.

Q. 오류 메시지가 나타납니다. ModuleNotFoundError: No module named 'smppy'

2023년 12월부터 SageMaker Profiler Python 패키지의 이름이 패키지 이름 중복 문제를 해결하기 smppy smprof 위해 에서 로 변경되었습니다. smppy 이 패키지는 이미 오픈 소스 패키지에서 사용되고 있습니다.

따라서 2023년 12월 smppy 이전부터 사용하고 있는데 이 ModuleNotFoundError 문제가 발생하는 경우, 최신 패키지를 설치했거나 최신 패키지를 사용하는 중에 교육 스크립트의 smprof 패키지 이름이 오래되었기 때문일 수 있습니다. SageMaker 프로파일러와 함께 사전 설치된 프레임워크 이미지 SageMaker 이 경우 교육 스크립트 smprof 전체에서 언급된 내용을 모두 smppy 로 바꿔야 합니다.

교육 스크립트에서 SageMaker Profiler Python 패키지 이름을 업데이트할 때 어떤 버전의 패키지 이름을 사용해야 하는지에 대한 혼동을 피하려면 다음 코드 스니펫과 같이 조건부 import 문을 사용하는 것이 좋습니다.

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

또한 최신 TensorFlow 버전 PyTorch 또는 버전으로 업그레이드하는 smppy 동안 사용한 적이 있다면 의 지침에 따라 최신 smprof 패키지를 설치해야 합니다. (선택 사항) SageMaker 프로파일러 Python 패키지 설치

Q. 오류 메시지가 뜹니다. ModuleNotFoundError: No module named 'smprof'

먼저, 공식적으로 지원되는 SageMaker 프레임워크 컨테이너 중 하나를 사용해야 합니다. 이들 중 하나를 사용하지 않는 경우 의 지침에 따라 smprof 패키지를 설치할 수 (선택 사항) SageMaker 프로파일러 Python 패키지 설치 있습니다.

Q. 가져올 수 없습니다. ProfilerConfig

Python SDK를 사용하여 작업 시작 관리자 스크립트로 가져올 ProfilerConfig 수 없는 경우 로컬 환경 또는 Jupyter 커널에 SageMaker Python SDK 버전이 상당히 오래된 것일 수 있습니다. SageMaker SDK를 최신 버전으로 업그레이드해야 합니다.

$ pip install --upgrade sagemaker

Q. 오류 메시지가 뜹니다. aborted: core dumped when importing smprof into my training script

이전 버전의 smprof 에서는 PyTorch 2.0+ 및 PyTorch Lightning에서 이 문제가 발생합니다. 이 문제를 해결하려면 의 지침에 따라 최신 smprof 패키지도 설치하십시오. (선택 사항) SageMaker 프로파일러 Python 패키지 설치

Q. Studio에서 SageMaker 프로파일러 UI를 찾을 수 없습니다. SageMaker 어떻게 찾을 수 있나요?

SageMaker 콘솔에 액세스할 수 있는 경우 다음 옵션 중 하나를 선택하십시오.

도메인 사용자로서 SageMaker 콘솔에 액세스할 수 없는 경우 SageMaker Studio Classic을 통해 애플리케이션에 액세스할 수 있습니다. 이런 경우에는 다음 옵션을 선택하십시오.

고려 사항

SageMaker 프로파일러를 사용할 때는 다음 사항을 고려하십시오.