

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

# 프로파일링 데이터 로더
<a name="debugger-data-loading-time"></a>

PyTorch에서 `SingleProcessingDataLoaderIter` 및 `MultiProcessingDataLoaderIter`와 같은 데이터 로더 반복기는 데이터세트에 대한 모든 반복의 처음에 시작됩니다. 초기화 단계에서 PyTorch는 구성된 작업자 수에 따라 작업자 프로세스를 켜고 데이터 및 `pin_memory` 스레드를 가져오기 위한 데이터 대기열을 설정합니다.

PyTorch 데이터 로더 프로파일링 분석 도구를 사용하려면 다음 `PT_dataloader_analysis` 클래스를 가져오세요.

```
from smdebug.profiler.analysis.utils.pytorch_dataloader_analysis import PT_dataloader_analysis
```

검색된 프로파일링 데이터를 [pandas 데이터 구문 분석 도구를 사용하여 프로파일링 데이터에 액세스](debugger-access-data-profiling-pandas-frame.md) 섹션에서 Pandas 프레임 데이터 객체로 전달합니다.

```
pt_analysis = PT_dataloader_analysis(pf)
```

`pt_analysis` 객체에는 다음과 같은 함수를 사용할 수 있습니다.

SMDebug `S3SystemMetricsReader` 클래스는 지정된 S3 버킷에서 `s3_trial_path` 파라미터로 시스템 지표를 읽습니다.
+ `pt_analysis.analyze_dataloaderIter_initialization()`

  분석은 이러한 초기화 기간의 중앙값 및 최대 기간을 출력합니다. 이상치가 있는 경우(즉, 기간이 2 \$1 중앙값보다 큰 경우) 함수는 해당 기간의 시작 및 종료 시간을 출력합니다. 이를 사용하여 해당 시간 간격 동안 시스템 지표를 검사할 수 있습니다.

  다음 목록은 이 클래스 메서드에서 사용할 수 있는 분석을 보여줍니다.
  + 어떤 유형의 데이터 로더 반복기가 초기화되었습니까?
  + 반복기 당 작업자 수.
  + 반복기가 pin\$1memory를 사용하여 초기화되었는지 아니면 사용하지 않고 초기화되었는지 검사하세요.
  + 훈련 중에 반복기가 초기화된 횟수입니다.
+ `pt_analysis.analyze_dataloaderWorkers()`

  다음 목록은 이 클래스 메서드에서 사용할 수 있는 분석을 보여줍니다.
  + 전체 훈련 기간 동안 분리된 작업자 프로세스 수.
  + 작업자 프로세스의 중앙값 및 최대 기간.
  + 이상치인 작업자 프로세스의 시작 및 종료 시간.
+ `pt_analysis.analyze_dataloader_getnext()`

  다음 목록은 이 클래스 메서드에서 사용할 수 있는 분석을 보여줍니다.
  + 훈련 중에 이루어진 GetNext 호출 수입니다.
  + GetNext 호출의 중앙값 및 최대 기간(마이크로초)입니다.
  + 이상치 GetNext 호출 시간에 대한 시작 시간, 종료 시간, 기간 및 작업자 ID.
+ `pt_analysis.analyze_batchtime(start_timestamp, end_timestamp, select_events=[".*"], select_dimensions=[".*"])`

  디버거는 모든 GetNext 호출의 시작 시간과 종료 시간을 수집합니다. 하나의 데이터 배치에서 훈련 스크립트가 소비한 시간을 확인할 수 있습니다. 지정된 기간 내에서 훈련에 직접적으로 영향을 주지 않는 호출을 식별할 수 있습니다. 이러한 호출은 정확도 계산, 디버깅 또는 로깅을 위한 손실 추가, 디버깅 정보 인쇄 등의 작업을 통해 발생할 수 있습니다. 이러한 작업은 계산 집약적이거나 시간이 많이 소요될 수 있습니다. Python 프로파일러, 시스템 지표 및 프레임워크 지표를 상호 연관시켜 이러한 작업을 식별할 수 있습니다.

  다음 목록은 이 클래스 메서드에서 사용할 수 있는 분석을 보여줍니다.
  + 현재 GetNext 호출과 후속 GetNext 호출의 시작 시간 간의 차이를 찾아 각 데이터 배치 `BatchTime_in_seconds`에 소요된 시간을 프로파일링합니다.
  + `BatchTime_in_seconds`에서 이상치를 찾고 해당 이상치에 대한 시작 및 종료 시간을 확인하세요.
  + 해당 `BatchTime_in_seconds` 타임스탬프 동안 시스템 및 프레임워크 지표를 획득하세요. 이는 시간을 어디에 소비했는지를 나타냅니다.
+ `pt_analysis.plot_the_window()`

  시작 타임스탬프와 종료 타임스탬프 사이의 타임라인 차트를 표시합니다.