jupyter nbextensions의 Execute Time과 %% time과 time module의 차이

소개



Jupyter의 확장 기능으로 jupyter nbextensions라는 패키지가 있습니다.

참고: [작업 효율화] Jupyter의 확장 기능을 전부 조사해 보았다

이 기능 안에 실행 시간을 계측하기 위한 기능 Execute Time이 있습니다만, 원래 jupyter notebook에서는 셀상에서 %%time (혹은 %%timeit)라고 치면 실행 시간을 계측할 수 있습니다.

참고: Jupyter Notebook에서 셀 실행 시간을 차지한다면 %%time을 사용하자.

또한 time module을 사용하여 처리 전후에 다음과 같이 실행 시간을 계측하는 고전적인 방법도 있습니다.
import time
start = time.time()
// 計測したい処理
end = time.time()
print("time (ms):", (end - start) * (10 ** 3))

이번에는 이 3개의 계측 방법의 차이에 대해 소개합니다.
line_profiler와 같은 다른 측정 방법은 제외됩니다.
실수가 있으면 적절하게 수정하십시오.

실행 환경은 다음과 같습니다.
  • OS: OSX High Sierra
  • CPU: 2.8GHz Intel Core i7
  • Python: 3.7.0

  • 세 가지 측정 방법의 차이



    결론부터 말씀드리면,%%timetime module에 의한 기법에서는 스크립트의 실행 시간 (ms)을 측정하고,
    Execute Time은 셀 실행 시간 (ms)을 측정합니다.

    이것은 다음 스크립트에서 쉽게 나타낼 수 있습니다.
    %%timeit -r 1 -n 5
    t1= time.time()
    n = 10000000
    sum(range(n))
    t2 = time.time()
    print("time module (ms): ", (t2 - t1) * (10 ** 3))
    

    1행째%%timeit에 익숙하지 않은 옵션이 붙어 있습니다만, 이것은 계측 오차를 고려해 복수회(이번은 5회) 측정하는 것을 지시하는 것입니다.
    이 스크립트를 한 셀에서 실행한 결과는 다음과 같습니다.



    셀 직후의 executed in에 이어지는 시간이 Execute Time에 의한 측정 시간,
    출력의 time module (ms): 이후가 time module에 의한 계측 시간,
    출력의 마지막 행은 %timeit에 의한 측정 시간을 나타냅니다.

    이 시점에서 Execute Time에 의한 측정 시간이 셀의 실행 시간을 나타내는 것을 알 수 있습니다.
    또한 time%%timeit는 스크립트 실행 시간을 나타내는 것을 동시에 알 수 있습니다.

    셀 실행 시간



    게다가 한 셀을 실행하는 데 얼마나 걸리는지 확인해 봅시다.

    이것은 다음의 스크립트로 n의 오더를 적절히 바꾸어 가면 왠지 보입니다.
    n = 10000000
    sum(range(n))
    
    n10000000에서 100까지 차례로 줄여서 수행한 결과는 다음과 같습니다.



    결과와 같이 n10000에서 작게해도 셀의 실행 시간에 차이가 나타나지 않는 것을 확인할 수 있습니다.
    또한이 결과에서 셀 당 실행 시간은 4ms 정도라고 할 수 있습니다 (단, 환경 의존).
    Jupyter를 사용하는 분이 이 시간에 신경이 쓰이는 분은 없다고는 생각합니다만, 마음에 두어 두면 좋을지도 모릅니다.

    요약


  • nbextensions의 Execute Time은 셀 실행 시간 (ms)을 측정합니다
  • %%time는 스크립트 실행 시간 (ms)을 측정합니다
  • 미소 시간이지만 셀 실행 오버 헤드는 적당히 크다
  • 1F에 시끄러운 격 게이머가 무의미하게 셀을 만들고 있다면 쓰자
  • 좋은 웹페이지 즐겨찾기