이 영역을 누르면 첫 페이지로 이동
StudyDiary 블로그의 첫 페이지로 이동

StudyDiary

페이지 맨 위로 올라가기

StudyDiary

Python Profiler를 사용한 병목지점 찾기

  • 2022.01.18 05:29
  • 카테고리 없음

현재 강화학습을 사용한 업무를 진행하고 있다.
하지만 강화학습 환경이 느리다.
훈련속도를 가속화하기 위해 다양한 python profiler를 적용하여 병목 지점을 찾아내었다.

먼저 다양한 종류의 python profiler가 있었다.
가장 기본이 되는 profile과 cProfile이 있었다. profile은 매우 느리고, cProfile은 빠르지만 function단위로 profiling을 하고, 결과를 binary로 저장해 한번더 풀어야하는 귀찮음이 있었다.

다음으로 사용한 것은 line-profiler이다.
line-profiler는 적당한 속도로 프로파일링이되고, line단위로 좀 더 자세한 통계정보를 알려준다.
하지만 line-profiler는 어느 method에서 프로파일링을 할 것인지 지정해줘야 하고, class에는 적용할 수 없다. 그리고, 실행할 때 kernprof -l -v {program name}.py 으로 실행해야 한다.

그 외에 다음의 profiler들을 이번에 사용해보았다.

  1. pyinstrument: function단위로 실행되고, html로 출력할 수 있다. 병목지점을 쉽게 찾을 수 있다.
  2. py-spy: 타겟을 지정할 수 없지만 line단위로 실행된다. flame graph나 speedtscope 형태로 출력하므로 병목지점 찾는데 유용하다
  3. pprofile: line-profiler에서 영감을 받아 만든 profiler로 line별로 통계정보를 출력한다.
  4. scalene: python time, cpu time, gpu, memory, copy volumne 등 다양한 정보를 출력한다. 타겟을 지정할 수 없고, 전체 프로그램 중에서 병목지점에 대한 정보만 출력된다.

나는 이러한 프로파일러들을 크게 두 단계로 나누어 사용했다.

  1. py-spy나 pyinstrument를 사용해 정확한 병목지점을 찾는다
  2. line-profiler를 사용해 해당 function에 어느 부분이 문제인지 통계정보를 확인한다 (e.g. call 수가 너무 많다, 실행시간이 너무 길다 등)

아무래도 line-profiler를 사용하면 전체적인 프로파일링 결과를 얻기 어렵고, 병목지점을 확인하기 위해서는 프로그램을 여러번 돌려야 한다.
그것보다는 다른 profiler를 사용해 병목지점을 찾고 디테일한 정보를 line-profiler로 찾는 것이 가장 편한 것 같다.

저작자표시 (새창열림)

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

다른 글 더 둘러보기

정보

StudyDiary 블로그의 첫 페이지로 이동

StudyDiary

  • StudyDiary의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (10)
    • Machine Learning (2)
      • PR113 (1)
    • 회고 (3)
      • 일주일 회고 (0)
      • Today I Learned (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 리눅스
  • 도커
  • PR113
  • ml4co
  • til
  • gnn
  • combinatorial optimization
  • TSP

나의 외부 링크

정보

Understand의 StudyDiary

StudyDiary

Understand

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © Understand. Designed by Fraccino.

티스토리툴바