-
파이썬 데이터사이언스 핸드북 1장 - 코드 프로파일링 및 시간 측정데이터 분석/NumPy 2020. 5. 9. 13:33
특정 명령어나 일련의 명령어의 실행 시간을 확인하는 것이 유용하고, 때로는 멀티라인 프로세스를 면밀하게 분석하고 복잡한 일련의 작업에서 병목이 되는 지점을 찾는 것이 유용하다. IPython 은 이런 방식으로 코드의 실행 시간을 측정하고 프로파일링하는 다양한 기능을 제공한다.
- %time : 단일 문장의 실행 시간
- %timeit : 단일 문장을 반복 실행해 더 정확하게 실행 시간을 측정일반적으로 %time 으로 측정한 시간이 %timeit 으로 측정한 시간보다 길다. %timeit 이 물밑에서 시스템 호출이 시간 측정을 방해하지 못하도록 몇몇 영리한 작업을 수행하기 때문이다. 예를 들면, 이 명령어는 시간 측정에 영향을 줄 수도 있는 미사용 파이썬 객체를 정리하는 가비지 컬렉션 작업을 못 하게 막는다.
Q. 여기서 CPU time 과 Wall time 은 뭘까?
CPU time 은 CPU 가 코드를 실행하는데 걸린 시간을 측정한 것으로, kernel time(file IO) 등을 포함한다.
Wall clock time 은 실제 코드를 실행하는 데에 걸린 시간으로, 컴퓨터가 해당 실행 시점에 다른 작업을 하고 있다면 영향을 받을 수 있다.이 질문에 대한 해답 링크
Q, What are the differences between these three? Which of these three is most suitable to compare the performance of two applications/scripts
- Wall clock time
- User time
- CPU time
A. User time
Wall clock time is the actual amount of time taken to perform a job. This is equivalent to timing your job with a stopwatch and the measured time to complete your task can be affected by anything else that the system happens to be doing at the time.
User time measures the amount of time the CPU spent running your code. This does not count anything else that might be running, and also does not count CPU time spent in the kernel (such as for file I/O).
CPU time measures the total amount of time the CPU spent running your code or anything requested by your code. This includes kernel time.
The "User time" measurement is probably the most appropriate for measuring the performance of different jobs, since it will be least affected by other things happening on the system.line_profiler 와 memory_profilier 확장 모듈을 설치하면 다음 명령어도 실행할 수 있다.
- %memit 단일 문장의 메모리 사용량을 측정
- %prun : 프로파일러로 코드를 실행함
- %lprun : 라인 단위 프로파일러로 코드를 실행함
- %mprun : 라인 단위 메모리 프로파일러로 코드를 실행코드의 실행시간을 측정하자.
%prun
코드 중 가장 오래 걸리는 호출을 확인하는 데에 유용하다.
%lprun
코드를 라인 단위로 호출한다. sum_of_lists(N) 이 호출될 때 내부에서 동작하는 순서대로 라인 단위로 걸린 시간을 보여준다.
코드의 사용 메모리량을 측정하자.
%memit
참고로 MiB 는 MB 와 다릅니다. 보통 리눅스에서 KiB, MiB 로 출력 메세지를 보면 이렇게 표시합니다.
- KB = 1000 Byte, MB = 1000 * 1000 Byte, GB = 1000 * 1000 * 1000 Byte, TB = 1000 * 1000 * 1000 * 1000 Byte
- KiB = 1024 Byte, MiB = 1024 * 1024 Byte, GiB = 1024 * 1024 * 1024 Byte, TiB = 1024* 1024 * 1024 * 1024 Byte
출처. http://forum.falinux.com/zbxe/index.php?document_srl=795807&mid=lecture_tip%mprun
Increment 열이 각 라인이 전체 메모리 할당량에 얼마나 영향을 주는지에 대한 지표이다.
mprun 은 노트북 자체가 아니라 별도의 모듈에 정의된 함수에만 동작하기 때문에 %%file 매직을 사용해 sum_of_lists 함수를 포함하는 mprun_demo.py 라는 간단한 모듈을 생성했따.
%%mprun 은 IPython 에 포함되어있지 않기 때문에 memory_profiler 확장모듈을 설치해야 한다.
mprun_demo 모듈에서 sum_of_lists 함수를 가져온 후, %mprun 을 실행시킨다.
'데이터 분석 > NumPy' 카테고리의 다른 글
파이썬 데이터사이언스 핸드북 2 장 - ndarray 소개 (0) 2020.05.16 파이썬 데이터사이언스 핸드북 2장 - Numpy 소개 (0) 2020.05.12 파이썬 데이터사이언스 핸드북 1장 - IPython 의 에러와 디버깅 (0) 2020.05.05 파이썬 데이터사이언스 핸드북 1장 - IPython 의 꿀팁 명령어 (0) 2020.05.05 파이썬 데이터사이언스 핸드북 1장 - Jupyter notebook 실행 (0) 2020.05.05