AI 모델 개발: 성능 분석 – PyTorch 프로파일링

ㅁ 성능 분석

1. PyTorch 프로파일링

ㅇ 정의:
PyTorch 모델 학습 및 추론 과정에서 연산별 시간, 메모리 사용량, GPU 활용도 등을 수집·분석하는 기능으로, 병목 지점을 식별하고 최적화 방향을 찾기 위해 사용됨.

ㅇ 특징:
– torch.profiler 모듈을 통해 CPU/GPU 연산별 소요 시간과 호출 빈도를 기록 가능
– TensorBoard나 Chrome Trace Viewer로 시각화 지원
– 단계별(스텝별) 프로파일링, 특정 구간만 선택적 수집 가능
– 비동기 GPU 연산을 동기화하여 정확한 시간 측정 가능

ㅇ 적합한 경우:
– 모델 훈련 속도가 예상보다 느릴 때 병목 구간을 찾고자 할 때
– 메모리 초과(OOM) 오류 원인을 분석할 때
– GPU 활용률이 낮을 때 연산 최적화 포인트를 찾고자 할 때

ㅇ 시험 함정:
– 프로파일링 자체가 성능에 영향을 미칠 수 있으므로 전체 학습에 그대로 적용하면 안 됨 (시험에서 ‘성능 저하 없이 프로파일링 가능’이라고 하면 X)
– GPU 연산은 비동기이므로 동기화(sync) 없이 시간 측정 시 부정확한 값이 나올 수 있음
– 모든 연산이 자동으로 기록되는 것은 아니며, 프로파일링 범위를 명시해야 함

ㅇ 시험 대비 “패턴 보기” 예시:
– O: “torch.profiler를 사용하면 연산별 시간과 메모리 사용량을 분석할 수 있다.”
– O: “프로파일링 시 특정 구간만 선택하여 기록할 수 있다.”
– X: “PyTorch 프로파일링은 모델 성능에 전혀 영향을 주지 않는다.”
– X: “GPU 연산은 항상 동기적으로 실행되므로 별도의 조치 없이 정확한 시간 측정이 가능하다.”

ㅁ 추가 학습 내용

PyTorch 프로파일링에서 자주 사용하는 주요 API와 개념 정리

1. 주요 API
– torch.profiler.profile : 코드 실행 구간에 대한 성능 데이터를 수집하는 프로파일러 컨텍스트 매니저
– schedule : 프로파일링의 단계별 스케줄을 정의하는 함수. wait, warmup, active 단계로 나누어 설정 가능
– on_trace_ready : 프로파일링 결과를 처리하는 콜백 함수. 예를 들어 trace 파일을 저장하거나 TensorBoard로 시각화할 때 사용

2. 단계별 스케줄링 개념
– wait 단계 : 프로파일링을 시작하기 전 준비 단계. 데이터 로딩 및 초기 연산으로 인한 왜곡을 방지
– warmup 단계 : 프로파일링을 시작하기 전 워밍업 단계. 캐시나 최적화가 반영된 상태로 측정하기 위함
– active 단계 : 실제로 성능 데이터를 수집하는 단계

3. TensorBoard에서 trace 파일 로드 방법
– 프로파일링 시 on_trace_ready를 통해 trace 파일을 지정 폴더에 저장
– TensorBoard 실행 시 –logdir 옵션으로 해당 폴더 경로를 지정하여 웹 브라우저에서 결과 확인

4. CPU와 GPU 병목 원인 분석 시 확인 항목
– kernel launch latency : GPU 커널 실행 시작까지의 지연
– 데이터 로딩 지연 : DataLoader의 속도 및 전처리로 인한 지연
– 연산 병렬화 여부 : 멀티스레드 및 멀티프로세스 활용 여부

5. 비동기 실행과 동기화 필요성
– PyTorch의 GPU 연산은 기본적으로 비동기 실행
– 정확한 시간 측정이나 디버깅 시 torch.cuda.synchronize()를 사용하여 모든 GPU 연산이 완료될 때까지 대기
– 동기화 시점 예시 : 성능 측정 전후, 메모리 사용량 확인 전, 오류 원인 파악 시

답글 남기기

Your email address will not be published. Required fields are marked *.

*
*