측정하지 않은 건 최적화하지 마
PyTorch 프로파일러는 CPU와 GPU에서 연산별 실행 시간을 포착하고 Chrome 추적 JSON으로 내보내며, profile_memory=True일 때는 텐서 할당도 추적해. '학습 시간이 실제로 어디에 쓰이지?'와 '왜 메모리가 부족하지?'에 답하는 알맞은 도구야.
두 프로파일러의 서로 다른 목적
torch.profiler.profile: 현대적이고 포괄적인 기본 선택이야. CPU와 CUDA 시간, 메모리, Chrome 추적을 모두 다뤄.torch.utils.bottleneck: 더 오래됐지만 가벼운 Python 감싸개야. 전체 프로파일러를 구성하지 않고 무엇이 느린지 빠르게 확인할 때 유용해.
Chrome 추적
프로파일러는 Chrome의 chrome://tracing 뷰어나 perfetto.dev에서 열 수 있는 JSON을 내보내. CPU와 GPU 연산을 시간축 위에서 소요 시간과 호출 관계까지 함께 볼 수 있어. 'cudaStreamSynchronize가 아주 길다'거나 '작은 연산 하나가 10,000번 호출된다'는 문제가 눈에 바로 보여.
재현성은 별도 주제지만 알아 둘 가치가 있어
디버깅이나 논문식 대조 실험을 위해 비트 단위로 같은 실행이 필요하다면 모든 난수 생성기의 씨앗을 설정하고 PyTorch에 결정론적 알고리즘을 사용하라고 명령해. 비용 없이 얻는 기능은 아니야. 일부 연산은 결정론적 구현이 없고, 다른 연산은 결정론적 모드에서 더 느려. 운영 학습보다는 디버깅에 사용해.