Offcanvas

Python

파이썬 코드 프로파일링을 위한 6가지 유용한 라이브러리

모든 프로그래밍 언어에는 두 가지 속도가 있다. 개발 속도, 그리고 실행 속도다. 파이썬(Python)은 전통적으로 빠른 실행보다는 빠른 개발에 중점을 두는 언어다. 파이썬 코드는 대부분의 경우 충분히 빠르지만 가끔 그렇지 않을 때도 있다. 그럴 때는 속도가 떨어지는 위치와 이유를 파악해 조치를 취해야 한다.   소프트웨어 개발은 물론 엔지니어링 전반적으로 통용되는 격언으로 “추정하지 말고 측정하라”는 말이 있다. 소프트웨어에서 무엇이 잘못됐는지 추정하곤 하지만 결코 좋은 방법은 아니다. 애플리케이션 속도를 높이기 위해 가장 먼저 사용해야 하는 도구는 실제 프로그램 성능에 대한 통계다. 파이썬에는 애플리케이션을 프로파일링하고 속도가 느린 부분을 파악하는 데 사용할 수 있는 패키지가 풍부하다. 표준 라이브러리에 포함된 간단한 도구부터 실행 중인 애플리케이션에서 통계를 얻기 위한 복잡 정교한 프레임워크에 이르기까지 다양한 도구가 있다. 이번 기사에서는 가장 중요한 5가지 도구에 대해 살펴본다. 모두 크로스 플랫폼(cross-platform)이며 파이파이(PyPI) 또는 파이썬 표준 라이브러리에서 즉시 사용할 수 있다.  타임(Time), 타임잇(Timeit) 실행 속도가 몇 초 또는 몇 분 정도인 두 코드 스니펫 간의 시간을 프로파일링하는 것이 전부라면 스톱워치만 있어도 충분하다. 파이썬 표준 라이브러리에는 스톱워치 기능을 하는 두 가지 함수가 제공된다. 타임 모듈의 perf_counter 함수는 운영체제의 고분해능 타이머를 호출해 임의의 타임스탬프를 구한다. time.perf_counter를 작업 전후에 한 번씩 호출해 둘 사이의 차이를 구할 수 있다. 야단스럽지 않게, 낮은 오버헤드로 코드 시간을 측정하는 방법이다. 타임잇 모듈은 파이썬 코드에 대한 실제 벤치마킹과 비슷한 작업을 수행한다. timeit.timeit 함수는 코드 스니펫을 여러 번 실행하고(기본값은 100만 번), 소요된 총 시간을 측정한다. 타이트한 루프에서 단일 작...

파이썬 Python 타임잇 Timeit c프로파일 cProfile 팔란티어 Palanteer 파이인스트루먼트 Pyinstrument 파이-스파이 Py-spy 야피 Yappi

2021.08.03

모든 프로그래밍 언어에는 두 가지 속도가 있다. 개발 속도, 그리고 실행 속도다. 파이썬(Python)은 전통적으로 빠른 실행보다는 빠른 개발에 중점을 두는 언어다. 파이썬 코드는 대부분의 경우 충분히 빠르지만 가끔 그렇지 않을 때도 있다. 그럴 때는 속도가 떨어지는 위치와 이유를 파악해 조치를 취해야 한다.   소프트웨어 개발은 물론 엔지니어링 전반적으로 통용되는 격언으로 “추정하지 말고 측정하라”는 말이 있다. 소프트웨어에서 무엇이 잘못됐는지 추정하곤 하지만 결코 좋은 방법은 아니다. 애플리케이션 속도를 높이기 위해 가장 먼저 사용해야 하는 도구는 실제 프로그램 성능에 대한 통계다. 파이썬에는 애플리케이션을 프로파일링하고 속도가 느린 부분을 파악하는 데 사용할 수 있는 패키지가 풍부하다. 표준 라이브러리에 포함된 간단한 도구부터 실행 중인 애플리케이션에서 통계를 얻기 위한 복잡 정교한 프레임워크에 이르기까지 다양한 도구가 있다. 이번 기사에서는 가장 중요한 5가지 도구에 대해 살펴본다. 모두 크로스 플랫폼(cross-platform)이며 파이파이(PyPI) 또는 파이썬 표준 라이브러리에서 즉시 사용할 수 있다.  타임(Time), 타임잇(Timeit) 실행 속도가 몇 초 또는 몇 분 정도인 두 코드 스니펫 간의 시간을 프로파일링하는 것이 전부라면 스톱워치만 있어도 충분하다. 파이썬 표준 라이브러리에는 스톱워치 기능을 하는 두 가지 함수가 제공된다. 타임 모듈의 perf_counter 함수는 운영체제의 고분해능 타이머를 호출해 임의의 타임스탬프를 구한다. time.perf_counter를 작업 전후에 한 번씩 호출해 둘 사이의 차이를 구할 수 있다. 야단스럽지 않게, 낮은 오버헤드로 코드 시간을 측정하는 방법이다. 타임잇 모듈은 파이썬 코드에 대한 실제 벤치마킹과 비슷한 작업을 수행한다. timeit.timeit 함수는 코드 스니펫을 여러 번 실행하고(기본값은 100만 번), 소요된 총 시간을 측정한다. 타이트한 루프에서 단일 작...

2021.08.03

최적의 AI 개발 언어 6가지와 새로 부상하는 2가지

인공 지능(Artificial Intelligence, AI)는 애플리케이션 개발자에게 무한한 가능성을 제공한다. 머신러닝 또는 딥 러닝을 활용해 훨씬 더 정확한 사용자 프로필, 개인 맞춤 설정, 추천을 만들거나 더 스마트한 검색, 음성 인터페이스 또는 지능형 비서를 구현하거나 그 외의 다양한 방법으로 앱을 개선할 수 있다. 심지어 예전에는 생각지도 못했던, 보고 듣고 상황에 반응하는 애플리케이션을 만들 수도 있다.   AI를 온전히 활용하기 위해서는 어떤 프로그래밍 언어를 배워야 할까? 물론 좋은 머신러닝, 딥 러닝 라이브러리가 풍부한 언어가 좋다. 또한 우수한 런타임 성능, 충실한 툴 지원, 대규모 프로그래머 커뮤니티, 건강한 지원 패키지 생태계도 필요하다. 요구사항이 많지만 괜찮은 선택지 역시 풍부하다.  AI 개발을 위한 6가지 최적의 프로그래밍 언어와, 이 목록에는 들지 못했지만 살펴볼 만한 2가지 언어를 소개한다. 이 가운데에는 인기 상승 중인 언어도 있고 하락세인 언어도 있고 딥 러닝 아키텍처와 애플리케이션의 역사에 관심이 있는 경우에만 알면 되는 언어도 있다. 이제부터 각각의 장단점을 살펴보자. 파이썬(Python) 선두는 여전히 파이썬이다. 사실 다른 언어가 이 자리를 뺏기도 쉽지 않다. 파이썬에도 나름의 골치 아픈 문제는 있지만 AI 작업을 한다면 어느 시점에는 거의 무조건 파이썬을 사용하게 된다. 또한 파이썬의 투박한 부분들도 그동안 어느정도 개선됐다. 2020년을 목전에 둔 지금, 주요 라이브러리 대부분이 파이썬 3.x를 지원하고 파이썬 2.x에 대한 지원을 속속 중단하고 있음을 감안하면 파이썬 2.x냐, 파이썬 3.x냐의 논란은 거의 무의미하다. 즉, 모든 새로운 언어 기능을 마침내 본격적으로 활용할 수 있게 됐다. 모든 솔루션이 각자 다른 방법으로 조금씩 문제가 있는 악몽 같은 파이썬의 패키징은 여전하지만 95%의 상황에서는 별다른 걱정 없이 아나콘다(Anaconda)를 사용할 수 있다. 그럼에도 파...

자바 LUA Julia 줄리아 Python SWIFT 딥러닝 머신러닝 스위프트 Java C++ 파이썬 프로그래밍 인공지능 자바스크립트 루아

2019.11.25

인공 지능(Artificial Intelligence, AI)는 애플리케이션 개발자에게 무한한 가능성을 제공한다. 머신러닝 또는 딥 러닝을 활용해 훨씬 더 정확한 사용자 프로필, 개인 맞춤 설정, 추천을 만들거나 더 스마트한 검색, 음성 인터페이스 또는 지능형 비서를 구현하거나 그 외의 다양한 방법으로 앱을 개선할 수 있다. 심지어 예전에는 생각지도 못했던, 보고 듣고 상황에 반응하는 애플리케이션을 만들 수도 있다.   AI를 온전히 활용하기 위해서는 어떤 프로그래밍 언어를 배워야 할까? 물론 좋은 머신러닝, 딥 러닝 라이브러리가 풍부한 언어가 좋다. 또한 우수한 런타임 성능, 충실한 툴 지원, 대규모 프로그래머 커뮤니티, 건강한 지원 패키지 생태계도 필요하다. 요구사항이 많지만 괜찮은 선택지 역시 풍부하다.  AI 개발을 위한 6가지 최적의 프로그래밍 언어와, 이 목록에는 들지 못했지만 살펴볼 만한 2가지 언어를 소개한다. 이 가운데에는 인기 상승 중인 언어도 있고 하락세인 언어도 있고 딥 러닝 아키텍처와 애플리케이션의 역사에 관심이 있는 경우에만 알면 되는 언어도 있다. 이제부터 각각의 장단점을 살펴보자. 파이썬(Python) 선두는 여전히 파이썬이다. 사실 다른 언어가 이 자리를 뺏기도 쉽지 않다. 파이썬에도 나름의 골치 아픈 문제는 있지만 AI 작업을 한다면 어느 시점에는 거의 무조건 파이썬을 사용하게 된다. 또한 파이썬의 투박한 부분들도 그동안 어느정도 개선됐다. 2020년을 목전에 둔 지금, 주요 라이브러리 대부분이 파이썬 3.x를 지원하고 파이썬 2.x에 대한 지원을 속속 중단하고 있음을 감안하면 파이썬 2.x냐, 파이썬 3.x냐의 논란은 거의 무의미하다. 즉, 모든 새로운 언어 기능을 마침내 본격적으로 활용할 수 있게 됐다. 모든 솔루션이 각자 다른 방법으로 조금씩 문제가 있는 악몽 같은 파이썬의 패키징은 여전하지만 95%의 상황에서는 별다른 걱정 없이 아나콘다(Anaconda)를 사용할 수 있다. 그럼에도 파...

2019.11.25

C 속도의 파이썬··· '사이썬'의 기본 개념 따라잡기

파이썬(Python)은 가장 편리하고 다재다능하고 유용한 프로그래밍 언어로 유명하다. 하지만 실행 속도 측면에서는 별로 내세울 만하지 않았다. 사이썬(Cython)은 다르다. 사이썬은 파이썬의 확대 집합으로, C로 컴파일되며 실행하는 작업에 따라 적게는 몇 퍼센트에서 많게는 몇 배 더 높은 성능을 제공한다. 파이썬의 네이티브 객체 형식에 구속되는 작업에서는 속도 향상 폭이 크지 않지만 수치 연산을 비롯해 파이썬 자체 내부 구조가 관여하지 않는 모든 연산에서 상당한 속도 향상을 얻을 수 있다. 이 방법으로 파이썬의 본질적인 제약을 완화하거나 아예 뛰어넘을 수 있다. 사이썬을 사용하면 파이썬의 용이함과 편리함을 포기하지 않고도 파이썬의 본질적인 제약 가운데 상당수를 우회하거나 완전히 뛰어넘을 수 있다. 이 기사에서는 사이썬의 기본 개념을 알아보고 사이썬을 사용해 함수 중 하나의 실행 속도를 가속화하는 간단한 파이썬 애플리케이션을 만들어 본다. 파이썬을 C로 컴파일 파이썬 코드는 C 모듈을 직접 호출할 수 있다. 이런 C 모듈은 일반 C 라이브러리일 수도 있고 파이썬 전용으로 제작된 라이브러리일 수도 있다. 사이썬은 또 다른 종류의 모듈, 즉 파이썬 내부 구조와 통신하며 기존 파이썬 코드와 하나로 묶을 수 있는 C 라이브러리를 생성한다. 사이썬 코드는 기본적으로 파이썬 코드와 상당부분 닮았다. 사이썬 컴파일러에 파이썬 프로그램을 집어넣으면 컴파일러는 프로그램을 현 상태 그대로 받아들이다. 사이썬의 네이티브 가속이 적용되지 않을 뿐이다. 그러나 파이썬 코드에 사이썬의 특수 구문으로 된 형식 주석을 넣으면 사이썬은 느린 파이썬 객체를 속도가 빠른 C로 대체할 수 있다. 사이썬의 접근 방법은 증분적이다. 즉, 개발자는 애플리케이션 전체를 처음부터 새로 작성할 필요 없이 기존 파이썬 애플리케이션으로 시작해서 부분부분 코드를 변경해 속도를 높일 수 있다. 이 방법은 일반적으로 소프트웨어 성능 문제의 속성과 잘 맞아떨어진다. 대부분의 프로그램...

파이썬 Cython Python 사이썬

2018.02.13

파이썬(Python)은 가장 편리하고 다재다능하고 유용한 프로그래밍 언어로 유명하다. 하지만 실행 속도 측면에서는 별로 내세울 만하지 않았다. 사이썬(Cython)은 다르다. 사이썬은 파이썬의 확대 집합으로, C로 컴파일되며 실행하는 작업에 따라 적게는 몇 퍼센트에서 많게는 몇 배 더 높은 성능을 제공한다. 파이썬의 네이티브 객체 형식에 구속되는 작업에서는 속도 향상 폭이 크지 않지만 수치 연산을 비롯해 파이썬 자체 내부 구조가 관여하지 않는 모든 연산에서 상당한 속도 향상을 얻을 수 있다. 이 방법으로 파이썬의 본질적인 제약을 완화하거나 아예 뛰어넘을 수 있다. 사이썬을 사용하면 파이썬의 용이함과 편리함을 포기하지 않고도 파이썬의 본질적인 제약 가운데 상당수를 우회하거나 완전히 뛰어넘을 수 있다. 이 기사에서는 사이썬의 기본 개념을 알아보고 사이썬을 사용해 함수 중 하나의 실행 속도를 가속화하는 간단한 파이썬 애플리케이션을 만들어 본다. 파이썬을 C로 컴파일 파이썬 코드는 C 모듈을 직접 호출할 수 있다. 이런 C 모듈은 일반 C 라이브러리일 수도 있고 파이썬 전용으로 제작된 라이브러리일 수도 있다. 사이썬은 또 다른 종류의 모듈, 즉 파이썬 내부 구조와 통신하며 기존 파이썬 코드와 하나로 묶을 수 있는 C 라이브러리를 생성한다. 사이썬 코드는 기본적으로 파이썬 코드와 상당부분 닮았다. 사이썬 컴파일러에 파이썬 프로그램을 집어넣으면 컴파일러는 프로그램을 현 상태 그대로 받아들이다. 사이썬의 네이티브 가속이 적용되지 않을 뿐이다. 그러나 파이썬 코드에 사이썬의 특수 구문으로 된 형식 주석을 넣으면 사이썬은 느린 파이썬 객체를 속도가 빠른 C로 대체할 수 있다. 사이썬의 접근 방법은 증분적이다. 즉, 개발자는 애플리케이션 전체를 처음부터 새로 작성할 필요 없이 기존 파이썬 애플리케이션으로 시작해서 부분부분 코드를 변경해 속도를 높일 수 있다. 이 방법은 일반적으로 소프트웨어 성능 문제의 속성과 잘 맞아떨어진다. 대부분의 프로그램...

2018.02.13

회사명:한국IDG 제호: ITWorld 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아00743 등록일자 : 2009년 01월 19일

발행인 : 박형미 편집인 : 박재곤 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2022 International Data Group. All rights reserved.

10.5.0.5