본문 바로가기
예바의 스터디/개념 정리

Pytorch Profiler로 모델의 메모리 연산 및 실행시간 분석하기

by 예바두비두밥바 2025. 2. 20.

Pytorch Profiler

PyTorch에서 실행된 연산들의 성능을 분석하는 데 사용되는 도구로, CPU와 GPU(CUDA)에서 실행되는 연산의 실행 시간과 메모리 사용량을 측정하여 최적화 포인트를 찾는 데 유용하다.

  • 각 연산의 실행 시간 분석 : 연산별 CPU 시간, GPU 시간을 측정하여 병목 구간 파악 가능
  • CUDA(GPU) 연산 분석 : use_cuda=True 옵션을 사용하면 GPU 연산 시간도 포함하여 분석 가능
  • 메모리 사용량 분석 : profile_memory=True를 설정하면 메모리 사용량까지 추적 가능
  • Chrome 트레이스 파일(JSON) 저장 : 프로파일링 결과를 Chrome의 chrome://tracing/에서 시각화 가능
  • 연산 호출 스택 추적 : with_stack=True를 사용하면 연산이 실행된 코드 위치까지 추적 가능

(*프로파일러 사용 시, 실행 시간이 증가한다는 점 참고 부탁드립니다.)

 

1. 사용법

Profiler 주요 매개변수

매개변수 설명
use_cuda=True GPU 성능까지 프로파일링
record_shapes=True 텐서의 shape까지 분석
profile_memory=True 메모리 사용량도 기록
with_stack=True 연산이 호출된 위치까지 추적

 

 

Profiler 기본 사용법

# profiler 호출
import torch.autograd.profiler as profiler

# 프로파일러 실행 (use_device = 'cuda'로 CUDA 성능 포함하여 분석)
with profiler.profile(use_device = 'cuda') as prof:
    outputs = model(gene_embeddings, drug_embeddings, drug_graphs, drug_masks)
    
# 프로파일러 실행 영역 내에서 특정 모듈 프로파일링
with torch.autograd.profiler.record_function("Gene_Embedding"):
        gene_embeddings = self.gene_embedding_layer(gene_embeddings) 
        
# 프로파일링 결과 출력(CUDA 실행 시간이 긴 연산 순으로 정렬)
print(prof.key_averages().table(sort_by="cuda_time_total", row_limit=10))

 

 

2. 결과 해석

Profiler 결과 출력

 

 

열(Column) 설명

이름 설명
Name 프로파일링된 연산(또는 함수)의 이름
Self CPU % 이 연산이 CPU에서 실행된 시간 중, 다른 연산을 호출하지 않고 자체적으로 소비한 시간의 비율
Self CPU 이 연산이 CPU에서 자체적으로 소비한 총 시간 (밀리초, ms)
CPU total % 이 연산이 CPU에서 실행된 총 시간(호출된 하위 연산 포함)이 전체 실행 시간에서 차지하는 비율
CPU total 이 연산이 CPU에서 실행된 총 시간(호출된 하위 연산 포함) (밀리초, ms)
CPU time avg 이 연산의 평균 실행 시간 (전체 실행 시간 / 호출 횟수)
Self CUDA 이 연산이 GPU(CUDA)에서 자체적으로 소비한 총 시간 (밀리초, ms)
Self CUDA % 이 연산이 GPU에서 자체적으로 소비한 시간의 비율
CUDA total 이 연산이 GPU에서 실행된 총 시간(호출된 하위 연산 포함) (밀리초, ms)
CUDA time avg 이 연산이 GPU에서 실행된 평균 시간 (전체 실행 시간 / 호출 횟수)
# of Calls 이 연산이 실행된 횟수 (호출 수)