프레임워크 프로파일링을 위한 구성 - 아마존 SageMaker

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

프레임워크 프로파일링을 위한 구성

주의

Amazon SageMaker 프로파일러를 선호하여 SageMaker 디버거는 2.11 및 2.0부터 프레임워크 프로파일링 기능을 더 이상 사용하지 않습니다. TensorFlow PyTorch 이전 버전의 프레임워크와 SDK에서 사용자는 다음과 같이 이 기능을 계속 사용할 수 있습니다.

  • SageMaker Python SDK <= v2.130.0

  • PyTorch >= v1.6.0, < v2.0

  • TensorFlow >= v2.3.1, < v2.11

2023년 3월 16일 섹션도 참조하십시오.

디버거 프레임워크 프로파일링을 활성화하려면 예측기를 구성할 때 framework_profile_params 파라미터를 구성하세요. 디버거 프레임워크 프로파일링은 CProfile 또는 Pyinstrument 옵션을 사용하여 초기화 단계의 데이터, 데이터 로더 프로세스, 딥 러닝 프레임워크의 Python 연산자 및 훈련 스크립트, 단계 내 및 단계 간 세부 프로파일링과 같은 프레임워크 지표를 수집합니다. FrameworkProfile 클래스를 사용하여 사용자 지정 프레임워크 프로파일링 옵션을 구성할 수 있습니다.

참고

디버거 프레임워크 프로파일링을 시작하기 전에 모델 빌드에 사용되는 프레임워크가 디버거에서 프레임워크 프로파일링을 지원하는지 확인하세요. 자세한 정보는 지원되는 프레임워크 및 알고리즘을 참조하세요.

디버거는 프레임워크 지표를 기본 S3 버킷에 저장합니다. 예를 들어, 기본 S3 버킷 URI의 형식이 s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/입니다.

기본 프레임워크 프로파일링으로 훈련 작업 시작

다음 예제 코드는 기본 시스템 모니터링 및 기본 프레임워크 프로파일링을 시작하는 가장 간단한 profiler_config 파라미터 설정입니다. 다음 예제 코드의 FrameworkProfile 클래스는 훈련 작업이 시작될 때 기본 프레임워크 프로파일링을 시작합니다. 디버거 프레임워크 프로파일링에는 세부 프로파일링, 데이터 로더 프로파일링 및 Python 프로파일링과 같은 옵션이 포함됩니다.

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile() )

profiler_config 파라미터 구성을 사용하면 디버거가 모니터링 및 프로파일링의 기본 설정을 호출합니다. 디버거는 500밀리초마다 시스템 지표를 모니터링하고, 5단계는 세부 프로파일링 옵션으로, 7단계는 데이터 로더 프로파일링 옵션으로, 9단계, 10단계, 11단계는 Python 프로파일링 옵션으로 프로파일링합니다.

사용 가능한 프로파일링 구성 옵션, 기본 파라미터 설정 및 구성 방법의 예를 찾으려면 Amazon Python SageMaker SDK의 SageMaker 디버거 API를 참조하십시오기본 시스템 모니터링 및 다양한 프로파일링 옵션이 있는 사용자 지정 프레임워크 프로파일링으로 훈련 작업을 시작하세요.. FrameworkProfile

시스템 모니터링 간격을 변경하고 기본 프레임워크 프로파일링을 활성화하려는 경우 framework_profile_params 파라미터를 사용하여 system_monitor_interval_millis 파라미터를 명시적으로 지정할 수 있습니다. 예를 들어 1000밀리초마다 모니터링하고 기본 프레임워크 프로파일링을 활성화하려면 다음 예제 코드를 사용하세요.

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile() )

FrameworkProfile클래스에 대한 자세한 내용은 Amazon SageMaker Python FrameworkProfile SDK의 SageMaker 디버거 API를 참조하십시오.

기본 시스템 모니터링 및 대상 단계 또는 대상 시간 범위에 대한 사용자 지정 프레임워크 프로파일링으로 훈련 작업을 시작하세요.

훈련 작업을 프로파일링하기 위해 대상 단계 또는 대상 시간 간격을 지정하려면 FrameworkProfile 클래스의 파라미터를 지정해야 합니다. 다음 코드 예제는 시스템 모니터링과 함께 프로파일링의 대상 범위를 지정하는 방법을 보여줍니다.

  • 대상 단계 범위의 경우

    다음 예제 구성에서 디버거는 500밀리초마다 전체 훈련 작업을 모니터링하고(기본 모니터링), 5단계부터 15단계까지의 대상 단계 범위(10단계)를 프로파일링합니다.

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )

    다음 예제 구성에서 디버거는 1000밀리초마다 전체 훈련 작업을 모니터링하고 5단계부터 15단계까지의 대상 단계 범위(10단계)를 프로파일링합니다.

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )
  • 대상 시간 범위의 경우

    다음 예제 구성에서 디버거는 500밀리초마다 전체 훈련 작업을 모니터링하고(기본 모니터링) 현재 Unix 시간을 기준으로 600초 동안 대상 시간 범위를 프로파일링합니다.

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    다음 예제 구성에서 디버거는 1000밀리초마다 전체 훈련 작업을 모니터링하고 현재 Unix 시간으로부터 600초 동안 대상 시간 범위를 프로파일링합니다.

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    프레임워크 프로파일링은 대상 단계 또는 시간 범위에서 모든 프로파일링 옵션에 대해 수행됩니다.

    사용 가능한 프로파일링 옵션에 대한 자세한 내용은 Amazon Python FrameworkProfile SageMaker SDK의 SageMaker 디버거 API를 참조하십시오.

    다음 섹션에서는 사용 가능한 프로파일링 옵션을 스크립팅하는 방법을 보여줍니다.

기본 시스템 모니터링 및 다양한 프로파일링 옵션이 있는 사용자 지정 프레임워크 프로파일링으로 훈련 작업을 시작하세요.

다음 프로파일링 구성 클래스를 사용하여 프레임워크 프로파일링 옵션을 관리할 수 있습니다.

  • DetailedProfilingConfig - 네이티브 프레임워크 프로파일러 (프로파일러 및 프로파일러) TensorFlow 를 사용하여 프레임워크 작업을 프로파일링할 대상 단계 또는 시간 범위를 지정합니다. PyTorch 예를 들어 사용하는 경우 디버거 후크를 사용하면 TensorFlow 프로파일러가 특정 프레임워크 메트릭을 수집할 수 있습니다. TensorFlow TensorFlow 세부 프로파일링을 통해 모든 프레임워크 연산자를 사전 단계(첫 단계 이전), 훈련 작업의 단계 내 및 단계 간에 프로파일링할 수 있습니다.

    참고

    세부 프로파일링을 통해 GPU 메모리 사용량이 크게 증가할 수 있습니다. 두 단계 이상에 대해서는 세부 프로파일링을 활성화하지 않는 것이 좋습니다.

  • DataloaderProfilingConfig — 딥러닝 프레임워크 데이터 로더 프로세스를 프로파일링할 대상 단계 또는 시간 범위를 지정합니다. 디버거는 프레임워크의 모든 데이터 로더 이벤트를 수집합니다.

    참고

    데이터 로더 프로파일링은 데이터 로더에서 정보를 수집하는 동안 훈련 성능을 저하시킬 수 있습니다. 데이터 로더 프로파일링을 두 단계 이상 활성화하지 않는 것이 좋습니다.

    디버거는 AWS 딥 러닝 컨테이너에 대해서만 데이터 로더 프로세스에 주석을 달도록 사전 구성되어 있습니다. 디버거는 다른 사용자 지정 또는 외부 훈련 컨테이너의 데이터 로더 프로세스를 프로파일링할 수 없습니다.

  • PythonProfilingConfig — Python 함수를 프로파일링할 대상 단계 또는 시간 범위를 지정합니다. CProfile과 Pystrument라는 두 개의 Python 프로파일러 중에서 선택할 수도 있습니다.

    • cProfile - 표준 Python 프로파일러입니다. cProfile은 훈련 중에 호출되는 모든 Python 연산자에 대한 정보를 수집합니다. CProfile을 사용하면 디버거는 각 함수 호출에 대한 누적 시간과 주석을 저장하여 Python 함수에 대한 완전한 세부 정보를 제공합니다. 예를 들어 딥러닝에서 가장 자주 호출되는 함수는 컨볼루션 필터와 역방 전달 연산자일 수 있으며, cProfile은 이들 모두를 프로파일링합니다. cProfile 옵션의 경우 총 시간, CPU 시간, 오프 CPU 시간 등의 타이머 옵션을 추가로 선택할 수 있습니다. 프로세서(CPU 및 GPU 모두)에서 실행되는 모든 함수 호출을 CPU 시간으로 프로파일링할 수 있지만, 오프 CPU 시간 옵션을 사용하여 I/O 또는 네트워크 병목 현상을 식별할 수도 있습니다. 기본값은 총 시간이며 디버거는 CPU 시간과 오프 CPU 시간을 모두 프로파일링합니다. cProfile을 사용하면 프로필 데이터를 분석할 때 모든 기능을 자세히 살펴볼 수 있습니다.

    • Pyinstrument - Pyinstrument는 샘플링을 기반으로 작동하는 오버헤드가 적은 Python 프로파일러입니다. 디버거는 Pyinstrument 옵션을 사용하여 밀리초마다 프로파일링 이벤트를 샘플링합니다. Pystrument는 CPU 시간 대신 벽시계로 경과된 시간을 측정하므로, 프로파일링 노이즈(점점 빨라지는 관련 없는 함수 호출을 필터링)를 줄이고 모델 훈련에 실제로 연산 집약적(점점 느려짐) 연산자를 캡처하는 데는 Pyinstrument 옵션이 CProfile 옵션보다 더 나은 선택이 될 수 있습니다. Pystrument를 사용하면 함수 호출 트리를 확인하고 속도 저하의 구조와 근본 원인을 더 잘 이해할 수 있습니다.

    참고

    Python 프로파일링을 활성화하면 전체 훈련 시간이 느려질 수 있습니다. cProfile은 호출할 때마다 가장 자주 호출되는 Python 연산자를 프로파일링하므로 호출 수에 비해 프로파일링 처리 시간이 늘어납니다. Pystrument의 경우 샘플링 메커니즘 때문에 시간에 관하여 누적 프로파일링 시간이 증가합니다.

다음 예제 구성은 지정된 값과 함께 다양한 프로파일링 옵션을 사용할 때의 전체 구조를 보여줍니다.

import time from sagemaker.debugger import (ProfilerConfig, FrameworkProfile, DetailedProfilingConfig, DataloaderProfilingConfig, PythonProfilingConfig, PythonProfiler, cProfileTimer) profiler_config=ProfilerConfig( system_monitor_interval_millis=500, framework_profile_params=FrameworkProfile( detailed_profiling_config=DetailedProfilingConfig( start_step=5, num_steps=1 ), dataloader_profiling_config=DataloaderProfilingConfig( start_step=7, num_steps=1 ), python_profiling_config=PythonProfilingConfig( start_step=9, num_steps=1, python_profiler=PythonProfiler.CPROFILE, cprofile_timer=cProfileTimer.TOTAL_TIME ) ) )

사용 가능한 프로파일링 옵션에 대한 자세한 내용은 Amazon Python SDK의 DetailedProfiling DataloaderProfiling SageMaker 구성, 구성 PythonProfiling 구성을 참조하십시오.