40TB에 달하는 위성 데이터를 전처리 하기 위해서 IPyparallel을 활용해 코드를 병렬화하는 중 전처리 코드에서 어떤 부분이 시간이 오래걸리는지 확인을 해야 했다. 그래서 함수들을 벤치마크하는 중 Magic Command를 알게 되었다. Magic Command에 대해서 알아보자.
alias 명령어로 나만의 Magic Command를 정의할 수 있다.
이렇게 매개변수도 받을 수 있다.
unalias
로 지울 수 있다.
노트북 안에서 외부의 파일을 실행할 수 있다. 외부에서 다운로드 받은 파일이 .py인데 주피터로 옮기기가 귀찮은적이 굉장히 많았었는데 너무 좋다. 옵션은 다음과 같다.
%run [-n -i -e -G]
[( -t [-N<N>] | -d [-b<N>] | -p [profile options] )]
( -m mod | file ) [args]
여기서 가장 맘에 드는건 $run -t {filename}
을 입력하면 시간까지 체크해준다.. 만세 만세 만만세~! $run -p {filename}
을 입력하면 Python Profiler를 이용해 함수의 프로파일링까지 해준다. 최고...
$save [-r, -f, -a]
{filename} 를 통해 외부에 파일을 저장할 수 있다.
-f option은 덮어씌우기 -a 옵션은 이어쓰기이다. default는 -r이고 그냥 쓰기이다.
해당 셀의 성능을 체크하고 싶다면 위의 명령어들을 사용하자 (inline mode는 %하나만)
CPU time, Wall time을 모두 알려준다. timeit -n -r
을 활용하면 원하는 녀석을 여러번 실행시키고 표준 편차까지 알려준다. -n 앞에는 반복 횟수이고 -r 은 -n의 반복 횟수이다. 그러니까 -n * -r이 총 반복 횟수이다.
해당 셀을 프로파일링한다. 벤치마크의 끝판왕이다. 파이썬 내장 profiler는 성능에 지장을 줄 정도로 느리다고 들었는데 걱정되긴 하지만 아주 편리하다.
%%prun -s <key> -T <filename>
의 옵션을 주로 쓸 것 같다.
key를 입력해 어느 key를 기준으로 정렬할 것인지 정할 수 있다. 기본값은 internal time이다. 키는 여러개 줄 수도 있다. -s key1 -s key2
이런식으로 정의된 키는 다음과 같다.
-T 옵션은 결과를 txt 형식으로 저장해준다
cprofiler를 설치한 후 !python -m cProfiler {filename}
으로 실행시키자. 성능의 저하가 없다고 한다. C언어 만세!
pstats를 활용해서 읽어야한다. 좀 귀찮다.
주피터노트북은 정말 놀랍다. 알면 알수록 놀랍다. 이 기능은 정말 Magic이라고 불러도 될 만큼 놀랍다.. 나중에 더 필요한 기능이 있으면 돌아와야겠다.