

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

# Python 프로파일링 통계 데이터에 액세스
<a name="debugger-access-data-python-profiling"></a>

Python 프로파일링은 훈련 스크립트 및 SageMaker AI 딥 러닝 프레임워크의 Python 함수 및 연산자와 관련된 프레임워크 지표를 제공합니다.

<a name="debugger-access-data-python-profiling-modes"></a>**Python 프로파일링을 위한 훈련 모드 및 단계**

훈련 중에 특정 구간을 프로파일링하여 각 간격에 대한 통계를 분할하기 위해 디버거는 모드 및 단계를 설정하는 도구를 제공합니다.

훈련 모드의 경우 다음 `PythonProfileModes` 클래스를 사용하세요.

```
from smdebug.profiler.python_profile_utils import PythonProfileModes
```

이 클래스는 다음 옵션을 제공합니다.
+ `PythonProfileModes.TRAIN` - 훈련 단계에서 대상 단계를 프로파일링하려는 경우에 사용합니다. 이 모드 옵션은 TensorFlow에서만 사용할 수 있습니다.
+ `PythonProfileModes.EVAL`- 평가 단계에서 대상 단계를 프로파일링하려는 경우에 사용합니다. 이 모드 옵션은 TensorFlow에서만 사용할 수 있습니다.
+ `PythonProfileModes.PREDICT`- 예측 단계에서 대상 단계를 프로파일링하려는 경우에 사용합니다. 이 모드 옵션은 TensorFlow에서만 사용할 수 있습니다.
+ `PythonProfileModes.GLOBAL` - 이전 세 단계가 포함된 글로벌 단계에서 대상 단계를 프로파일링하려는 경우에 사용합니다. 이 모드 옵션은 PyTorch에서만 사용할 수 있습니다.
+ `PythonProfileModes.PRE_STEP_ZERO` - 첫 번째 에포크의 첫 번째 훈련 단계가 시작되기 전에 초기화 단계에서 대상 단계를 프로파일링하려는 경우에 사용합니다. 이 단계에는 초기 작업 제출, EC2 인스턴스에 훈련 스크립트 업로드, EC2 인스턴스 준비, 입력 데이터 다운로드가 포함됩니다. 이 모드 옵션은 TensorFlow 및 PyTorch 모두에서 사용할 수 있습니다.
+ `PythonProfileModes.POST_HOOK_CLOSE` - 훈련 작업이 완료되고 디버거 후크가 닫힌 후 마무리 단계에서 대상 단계를 프로파일링하려는 경우에 사용합니다. 이 단계에는 훈련 작업이 마무리되고 완료되는 동안 프로파일링 데이터가 포함됩니다. 이 모드 옵션은 TensorFlow 및 PyTorch 모두에서 사용할 수 있습니다.

<a name="debugger-access-data-python-profiling-phases"></a>훈련 단계의 경우 다음 `StepPhase` 클래스를 사용하세요.

```
from smdebug.profiler.analysis.utils.python_profile_analysis_utils import StepPhase
```

이 클래스는 다음 옵션을 제공합니다.
+ `StepPhase.START` - 초기화 단계의 시작점을 지정하는 데 사용합니다.
+ `StepPhase.STEP_START` - 훈련 단계의 시작 단계를 지정하는 데 사용합니다.
+ `StepPhase.FORWARD_PASS_END` - 정방 전달이 종료되는 단계를 지정하는 데 사용합니다. 이 옵션은 PyTorch에서만 사용할 수 있습니다.
+ `StepPhase.STEP_END` - 훈련 단계의 종료 단계를 지정하는 데 사용합니다. 이 옵션은 TensorFlow에서만 사용할 수 있습니다.
+ `StepPhase.END` - 완료(post-hook-close) 단계의 종료점을 지정하는 데 사용합니다. 콜백 후크가 닫히지 않으면 완료 단계 프로파일링이 발생하지 않습니다.

**Python 프로파일링 분석 도구**

디버거는 두 가지 프로파일링 도구를 사용하여 Python 프로파일링을 지원합니다.
+ cProfile - 표준 Python 프로파일러입니다. cProfile은 프로파일링이 활성화되었을 때 호출된 모든 함수의 CPU 시간에 대한 프레임워크 지표를 수집합니다.
+ Pyinstrument - 밀리초마다 프로파일링 이벤트를 샘플링하는 낮은 오버헤드의 Python 프로파일러입니다.

Python 프로파일링 옵션과 수집 항목에 대한 자세한 내용은 [기본 시스템 모니터링 및 다양한 프로파일링 옵션이 있는 사용자 지정 프레임워크 프로파일링](debugger-configure-framework-profiling-options.md) 섹션을 참조하세요.

Python 프로파일링 데이터를 가져오고 분석하기 위해 `PythonProfileAnalysis`, `cProfileAnalysis` 및 `PyinstrumentAnalysis` 클래스의 다음 메서드가 제공됩니다. 각 함수는 기본 S3 URI에서 최신 데이터를 로드합니다.

```
from smdebug.profiler.analysis.python_profile_analysis import PythonProfileAnalysis, cProfileAnalysis, PyinstrumentAnalysis
```

분석을 위해 Python 프로파일링 객체를 설정하려면 다음 예제 코드와 같이 CProfileAnalysis 또는 PyInstrumentAnalysis 클래스를 사용하세요. `cProfileAnalysis` 객체를 설정하는 방법을 보여주고, `PyinstrumentAnalysis`를 사용하려는 경우 클래스 이름을 바꾸는 방법을 보여줍니다.

```
python_analysis = cProfileAnalysis(
    local_profile_dir=tf_python_stats_dir, 
    s3_path=tj.profiler_s3_output_path
)
```

`cProfileAnalysis` 및 `PyinstrumentAnalysis` 클래스가 Python 프로파일링 통계 데이터를 가져오는 데 사용할 수 있는 메서드는 다음과 같습니다.
+ `python_analysis.fetch_python_profile_stats_by_time(start_time_since_epoch_in_secs, end_time_since_epoch_in_secs)` - 시작 시간과 종료 시간을 가져와서 시작 또는 종료 시간이 제공된 간격과 겹치는 단계 통계의 함수 통계를 반환합니다.
+ `python_analysis.fetch_python_profile_stats_by_step(start_step, end_step, mode, start_phase, end_phase)` - 시작 단계와 종료 단계를 가져와서 프로파일링된 `step`가 `start_step <= step < end_step`를 만족하는 모든 단계 통계의 함수 통계를 반환합니다.
  + `start_step` 및 `end_step`(str) - Python 프로파일링 통계 데이터를 가져오기 위한 시작 단계와 종료 단계를 지정합니다.
  + `mode`(str) - `PythonProfileModes` 열거자 클래스를 사용하여 훈련 작업 모드를 지정합니다. 기본값은 `PythonProfileModes.TRAIN`입니다. 사용 가능한 옵션은 [Python 프로파일링을 위한 훈련 모드 및 단계](#debugger-access-data-python-profiling-modes) 섹션에 나와 있습니다.
  + `start_phase`(str) - `StepPhase` 열거자 클래스를 사용하여 대상 단계의 시작 단계를 지정합니다. 이 파라미터를 사용하면 여러 훈련 단계 간에 프로파일링을 수행할 수 있습니다. 기본값은 `StepPhase.STEP_START`입니다. 사용 가능한 옵션은 [Python 프로파일링을 위한 훈련 모드 및 단계](#debugger-access-data-python-profiling-phases) 섹션에 나와 있습니다.
  + `end_phase`(str) - `StepPhase` 열거자 클래스를 사용하여 대상 단계의 종료 단계를 지정합니다. 이 파라미터는 훈련의 종료 단계를 설정합니다. 사용 가능한 옵션은 `start_phase` 파라미터에 사용할 수 있는 옵션과 동일합니다. 기본값은 `StepPhase.STEP_END`입니다. 사용 가능한 옵션은 [Python 프로파일링을 위한 훈련 모드 및 단계](#debugger-access-data-python-profiling-phases) 섹션에 나와 있습니다.
+ `python_analysis.fetch_profile_stats_between_modes(start_mode, end_mode)` - 시작 모드와 종료 모드 사이의 Python 프로파일링에서 통계를 가져옵니다.
+ `python_analysis.fetch_pre_step_zero_profile_stats()` - Python 프로파일링에서 0단계까지 통계를 가져옵니다.
+ `python_analysis.fetch_post_hook_close_profile_stats()` - 후크가 종료된 후 Python 프로파일링에서 통계를 가져옵니다.
+ `python_analysis.list_profile_stats()` - Python 프로파일링 통계의 DataFrame을 반환합니다. 각 행에는 각 프로파일링 인스턴스의 메타데이터와 해당 통계 파일(단계당 하나)이 들어 있습니다.
+ `python_analysis.list_available_node_ids()` - Python 프로파일링 통계에 사용할 수 있는 노드 ID 목록을 반환합니다.

`cProfileAnalysis` 클래스별 메서드:
+  `fetch_profile_stats_by_training_phase()` - 가능한 모든 시작 모드와 종료 모드 조합에 대한 Python 프로파일링 통계를 가져오고 집계합니다. 예를 들어, 세부 프로파일링이 활성화된 상태에서 훈련 및 검증 단계를 완료하면, `(PRE_STEP_ZERO, TRAIN)`, `(TRAIN, TRAIN)`, `(TRAIN, EVAL)`, `(EVAL, EVAL)` 및 `(EVAL, POST_HOOK_CLOSE)` 조합이 됩니다. 이러한 각 조합 내의 모든 통계 파일이 집계됩니다.
+  `fetch_profile_stats_by_job_phase()` - 작업 단계별로 Python 프로파일링 통계를 가져오고 집계합니다. 작업 단계는 `initialization`(0단계까지 프로파일링), `training_loop`(훈련 및 검증), `finalization`(후크를 종료 후 프로파일링)입니다.