2020.05.29

줄리아 vs. 파이썬··· 데이터 과학과 '케미' 좋은 언어는?

Serdar Yegulalp | InfoWorld
파이썬의 여러 응용 분야 가운데 아마도 데이터 애널리틱스가 가장 크고 중요할 것이다. 파이썬 진영에는 과학 컴퓨팅과 데이터 분석 작업을 신속하고 편리하게 해주는 라이브러리, 툴, 애플리케이션이 즐비하다. 

그러나 과학 컴퓨팅, 머신러닝, 데이터 채굴, 대규모 선형 대수학, 분산 및 병렬 컴퓨팅에 특화된 줄리아 언어(Julia language)를 이용하는 개발자에게 파이썬은 충분히 빠르지도 편리하지도 않다. 줄리아는 과학자와 데이터 애널리스트에게 빠르고 편리한 개발뿐 아니라 눈부신 실행 속도 역시 제공하는 것을 목표로 한다. 
 
ⓒGetty Images Bank

줄리아란? 
줄리아(Julia)는 2009년 4인 팀에 의해 개발되고 2012년 일반에 공개되었다. 이는 파이썬과 여타 언어, 그리고 과학 컴퓨팅 및 데이터 프로세싱에 쓰이는 애플리케이션의 단점에 대처하도록 의도되었다. 팀은 “우리는 욕심이 많다”라고 말했다. 그들은 더 많은 것을 원했다. 
 
우리는 개방적인 라이선스의 오픈소스 언어를 원한다. 우리는 루비(Ruby)의 역동성과 C의 속도를 원한다. 우리는 리스프(Lisp)처럼 진정한 매크로를 가지면서도 매트랩(Matlab)처럼 명확하고 익숙한 수학적 표기를 가진 단일한 언어를 원한다. 우리는 파이썬처럼 일반 프로그래밍에서 쓰일 수 있고, R 언어처럼 통계를 위해 간편하고, 펄(Perl)처럼 자연스러운 문자열 처리가 가능하고, 매트랩처럼 선형 대수학에 강점이 있고, 프로그램을 셸로서 탁월하게 접합할 수 있는 무언가를 원한다. 이는 배우기가 쉬우면서도 진지한 해커를 만족시키는 것이어야 한다. 인터랙티브하고 컴파일도 가능해야 한다. 

(그리고 물론 C 언어처럼 빨라야 한다). 

줄리아가 위의 열망을 구현하는 몇 가지 방법을 소개한다. 

인터프리터가 아닌 컴파일러 언어. 줄리아는 런타임 성능을 높이기 위해 LLVM 컴파일러 프레임워크를 이용해 적시에 컴파일된다. 최고 성능을 발휘할 때 줄리아는 C의 속도에 근접하거나 버금간다. 

인터랙티브. 줄리아는 파이썬이 제공하는 것과 유사한 REPL이라는 인터랙티브 명령줄을 사용한다. 이는 신속한 일회성 스크립트 및 명령을 즉시 기록할 수 있다. 

명확한 구문. 줄리아의 구문은 파이썬과 비슷하다. 간결하고 표현력 있고 강력하다. 

줄리아는 동적 타이핑과 정적 타이핑의 이점을 결합한다. 이용자는 ‘부호 없는 32 비트 정수’ 등 변수 유형을 명시할 수 있다. 그뿐만 아니라 유형 계층도 생성할 수 있다. 따라서 특정 유형의 변수를 처리하기 위해 예를 들어 길이와 부호가 명시되지 않은 정수를 수용할 수 있다. 심지어 특정한 맥락에서 필요하지 않다면 타이핑을 전혀 할 필요가 없다. 

줄리아는 파이썬, C, 포트란 라이브러리를 호출할 수 있다. 줄리아는 C 및 포트란으로 쓰인 외부 라이브러리와 직접 접촉할 수 있다. 또한 파이콜(PyCall) 라이브러리에 의해 파이썬 코드와도 접촉할 수 있다. 심지어 파이썬 및 줄리아 사이의 데이터 공유도 가능하다. 

줄리아는 메타프로그래밍을 지원한다. 줄리아 프로그램은 다른 줄리아 프로그램을 생성할 수 있고, 심지어 자체 코드를 수정할 수 있다. 리스프 같은 언어에서 볼 수 있는 것과 유사하다. 

줄리아는 포괄적인 디버거를 가지고 있다. 줄리아는 1.1 버전에서 디버깅 스위트를 도입하였다. 따라서 로컬 REPL에서 코드를 실행하고, 결과물에 진입해 변수를 조사하고 코드 안에 중단점을 추가할 수 있다. 심지어 코드에 의해 생성된 함수에 진입하는 등 정교한 작업도 가능하다. 

줄리아의 장점 
줄리아는 원래 과학 및 수치 연산을 위해 설계되었다. 따라서 줄리아가 연관 응용 분야에서 여러 유리한 기능을 가진 것은 새삼스러울 게 없다. 

빠르다. 줄리아는 JIT 컴파일과 유형 선언문에 의해 순수하고 최적화되지 않은 파이썬에 비해 언제나 훨씬 월등하다. 파이썬은 외부 라이브러리, 써드파티 JIT 컴파일러(PyPy), 사이썬(Cython) 같은 툴에 의한 최적화로 더 빨라질 수 있다. 그러나 줄리아는 처음부터 더 빠르도록 설계되었다. 

수학 친화적 구문으로 만들어졌다. 줄리아는 매트랩, R, 매스매티카(Mathematica), 옥타브(Octave) 같은 과학 연산 언어 및 환경을 이용하는 사람을 주요 대상으로 한다. 줄리아의 수학 연산 구문은 컴퓨팅 세계 외부에서 작성된 수학 공식처럼 보인다. 따라서 프로그래머가 아닌 사람이 선택하기가 더 용이하다. 

자동 메모리 관리 기능이 있다. 파이썬과 마찬가지로 줄리아는 메모리를 할당하고 비우는 일로 이용자에게 부담을 주지 않는다. 나아가 가비지 컬렉션(garbage collection)에 대한 수동 제어 수단을 제공한다. 따라서 줄리아로 전환하더라도 파이썬이 주는 일반적 편의를 놓치거나 하지는 않는다. 

줄리아는 우월한 병렬성을 제공한다. 수학 및 과학 컴퓨팅은 일정 기기, 특히 다중 코어 상에서 전체 리소스를 활용할 수 있을 때 성장한다. 파이썬과 줄리아는 병렬 연산을 수행할 수 있다. 그러나 파이썬의 병렬 연산 방식은 스레드나 노드 사이의 데이터 직렬화 및 역직렬화를 필요로 한다. 반면 줄리아의 병렬화는 한층 정교하다. 아울러 줄리아의 병렬화 구문은 파이썬보다 덜 무거워서 사용하기가 더 용이하다.  

줄리아는 자체적인 네이티브 머신러닝 라이브러리를 개발 중이다. 플럭스(Flux)는 줄리아의 머신러닝 라이브러리이고, 보편적 응용 분야를 위한 여러 모델 패턴을 보이고 있다. 전적으로 줄리아로 작성됐기 때문에 이용자는 필요할 때마다 이를 수정할 수 있고, 또한 줄리아의 독창적인 적시 컴파일링에 의해 프로젝트를 전체적으로 최적화할 수 있다. 

파이썬의 장점 
줄리아는 처음부터 데이터 과학을 위해 의도된 반면 파이썬은 데이터 과학으로 진화했다고 볼 수 있다. 파이썬은 데이터 과학자에게 몇몇 매력적인 이점을 제공한다. 아래와 같은 이유에서 ‘범용’ 파이썬이 데이터 과학 작업을 위한 더 나은 선택지가 될 수 있다. 

파이썬은 제로-기준 어레이 인덱싱을 이용한다. 파이썬, C 등 대다수 언어에서 어레이의 첫 요소는 ‘제로(0)’이다. 예를 들어 파이썬의 경우 문자열의 첫 문자는 ‘string[0]’이다. 줄리아는 1 기준 어레이 인덱싱을 이용한다. 이는 우연이 아니다. 대다수의 수학 및 과학 애플리케이션, 예를 들어 매스매티카 등이 1 기준 인텍싱을 이용하고, 줄리아는 이들을 의도해서 만들어졌다. 줄리아에서 ‘실험적 기능’을 통해 제로 인덱싱을 지원하는 것은 가능하다. 그러나 1-인덱싱 기본값은 깊이 뿌리내린 프로그래밍 습관을 지닌 일반 이용자가 이를 채택하는 것을 방해할 수 있다. 

시작할 때 오버헤드가 더 적다. 줄리아 프로그램보다 파이썬 프로그램이 더 느릴 수 있다. 그러나 파이썬의 런타임 자체는 더 가볍고, 따라서 파이썬 프로그램이 시작하고 최초의 결과를 전달하는 데 더 적은 시간이 걸리는 것이 보통이다. 또한 JIT 컴파일링은 줄리아 프로그램의 실행 속도를 빠르게 해주지만, 대신 시작 시간은 오래 걸린다. 줄리아의 시작 속도를 개선하기 위해 많은 작업이 진행되었지만, 파이썬이 여전히 우월하다.  

완성도가 높다. 줄리아 언어는 젊다. 줄리아는 불과 2009년부터 개발되기 시작했다. 그 과정에서 상당한 피쳐 천(feature churn)을 겪었다. 이와 대조적으로 파이썬은 30년 가까운 역사를 가지고 있다. 

파이썬은 월등히 많은 써드파티 패키지가 있다. 파이썬이 가진 최대의 매력 가운데 하나라면 파이썬 진영의 써드파티 패키지의 다양성과 유용성이다. 다시 한번, 상대적으로 짧은 역사인 줄리아 진영의 소프트웨어는 아직도 소규모다. 이는 부분적으로 기존의 C 및 파이썬 라이브러리 이용으로 상쇄된다. 그러나 줄리아가 성장하려면 자체 라이브러리가 있어야 한다. 플럭스(Flux), 케이넷(Knet) 같은 라이브러리는 줄리아가 머신러닝과 딥러닝에 유용하도록 만들어주지만, 작업의 대부분이 텐서플로나 파이토치를 통해 이뤄지는 실정이다. 

수백만 명에 이르는 이용자. 대규모 열혈 활성 커뮤니티가 없으면 언어는 무용지물이다. 줄리아 커뮤니티는 열성적이고 성장 중이다. 그러나 여전히 파이썬 커뮤니티에 비하면 작은 조각에 불과하다. 파이썬의 거대한 커뮤니티는 거대한 이점이다. 

파이썬은 빨라지고 있다. 파이썬 인터프리터의 향상은 물론이고 (멀티-코어 병렬 프로세싱 등) 파이썬은 가속하기가 더욱 쉬워지고 있다. 마이픽(mypyc) 프로젝트는 타입 주석이 달린 파이썬을 사이썬 보다 훨씬 더 원활하게 네이티브 C로 변환한다. 이는 일반적으로 4배의 성능 향상을 가져오고, 순수 수학 연산에서는 이보다 훨씬 더 높은 성능을 발휘한다. ciokr@idg.co.kr
 



2020.05.29

줄리아 vs. 파이썬··· 데이터 과학과 '케미' 좋은 언어는?

Serdar Yegulalp | InfoWorld
파이썬의 여러 응용 분야 가운데 아마도 데이터 애널리틱스가 가장 크고 중요할 것이다. 파이썬 진영에는 과학 컴퓨팅과 데이터 분석 작업을 신속하고 편리하게 해주는 라이브러리, 툴, 애플리케이션이 즐비하다. 

그러나 과학 컴퓨팅, 머신러닝, 데이터 채굴, 대규모 선형 대수학, 분산 및 병렬 컴퓨팅에 특화된 줄리아 언어(Julia language)를 이용하는 개발자에게 파이썬은 충분히 빠르지도 편리하지도 않다. 줄리아는 과학자와 데이터 애널리스트에게 빠르고 편리한 개발뿐 아니라 눈부신 실행 속도 역시 제공하는 것을 목표로 한다. 
 
ⓒGetty Images Bank

줄리아란? 
줄리아(Julia)는 2009년 4인 팀에 의해 개발되고 2012년 일반에 공개되었다. 이는 파이썬과 여타 언어, 그리고 과학 컴퓨팅 및 데이터 프로세싱에 쓰이는 애플리케이션의 단점에 대처하도록 의도되었다. 팀은 “우리는 욕심이 많다”라고 말했다. 그들은 더 많은 것을 원했다. 
 
우리는 개방적인 라이선스의 오픈소스 언어를 원한다. 우리는 루비(Ruby)의 역동성과 C의 속도를 원한다. 우리는 리스프(Lisp)처럼 진정한 매크로를 가지면서도 매트랩(Matlab)처럼 명확하고 익숙한 수학적 표기를 가진 단일한 언어를 원한다. 우리는 파이썬처럼 일반 프로그래밍에서 쓰일 수 있고, R 언어처럼 통계를 위해 간편하고, 펄(Perl)처럼 자연스러운 문자열 처리가 가능하고, 매트랩처럼 선형 대수학에 강점이 있고, 프로그램을 셸로서 탁월하게 접합할 수 있는 무언가를 원한다. 이는 배우기가 쉬우면서도 진지한 해커를 만족시키는 것이어야 한다. 인터랙티브하고 컴파일도 가능해야 한다. 

(그리고 물론 C 언어처럼 빨라야 한다). 

줄리아가 위의 열망을 구현하는 몇 가지 방법을 소개한다. 

인터프리터가 아닌 컴파일러 언어. 줄리아는 런타임 성능을 높이기 위해 LLVM 컴파일러 프레임워크를 이용해 적시에 컴파일된다. 최고 성능을 발휘할 때 줄리아는 C의 속도에 근접하거나 버금간다. 

인터랙티브. 줄리아는 파이썬이 제공하는 것과 유사한 REPL이라는 인터랙티브 명령줄을 사용한다. 이는 신속한 일회성 스크립트 및 명령을 즉시 기록할 수 있다. 

명확한 구문. 줄리아의 구문은 파이썬과 비슷하다. 간결하고 표현력 있고 강력하다. 

줄리아는 동적 타이핑과 정적 타이핑의 이점을 결합한다. 이용자는 ‘부호 없는 32 비트 정수’ 등 변수 유형을 명시할 수 있다. 그뿐만 아니라 유형 계층도 생성할 수 있다. 따라서 특정 유형의 변수를 처리하기 위해 예를 들어 길이와 부호가 명시되지 않은 정수를 수용할 수 있다. 심지어 특정한 맥락에서 필요하지 않다면 타이핑을 전혀 할 필요가 없다. 

줄리아는 파이썬, C, 포트란 라이브러리를 호출할 수 있다. 줄리아는 C 및 포트란으로 쓰인 외부 라이브러리와 직접 접촉할 수 있다. 또한 파이콜(PyCall) 라이브러리에 의해 파이썬 코드와도 접촉할 수 있다. 심지어 파이썬 및 줄리아 사이의 데이터 공유도 가능하다. 

줄리아는 메타프로그래밍을 지원한다. 줄리아 프로그램은 다른 줄리아 프로그램을 생성할 수 있고, 심지어 자체 코드를 수정할 수 있다. 리스프 같은 언어에서 볼 수 있는 것과 유사하다. 

줄리아는 포괄적인 디버거를 가지고 있다. 줄리아는 1.1 버전에서 디버깅 스위트를 도입하였다. 따라서 로컬 REPL에서 코드를 실행하고, 결과물에 진입해 변수를 조사하고 코드 안에 중단점을 추가할 수 있다. 심지어 코드에 의해 생성된 함수에 진입하는 등 정교한 작업도 가능하다. 

줄리아의 장점 
줄리아는 원래 과학 및 수치 연산을 위해 설계되었다. 따라서 줄리아가 연관 응용 분야에서 여러 유리한 기능을 가진 것은 새삼스러울 게 없다. 

빠르다. 줄리아는 JIT 컴파일과 유형 선언문에 의해 순수하고 최적화되지 않은 파이썬에 비해 언제나 훨씬 월등하다. 파이썬은 외부 라이브러리, 써드파티 JIT 컴파일러(PyPy), 사이썬(Cython) 같은 툴에 의한 최적화로 더 빨라질 수 있다. 그러나 줄리아는 처음부터 더 빠르도록 설계되었다. 

수학 친화적 구문으로 만들어졌다. 줄리아는 매트랩, R, 매스매티카(Mathematica), 옥타브(Octave) 같은 과학 연산 언어 및 환경을 이용하는 사람을 주요 대상으로 한다. 줄리아의 수학 연산 구문은 컴퓨팅 세계 외부에서 작성된 수학 공식처럼 보인다. 따라서 프로그래머가 아닌 사람이 선택하기가 더 용이하다. 

자동 메모리 관리 기능이 있다. 파이썬과 마찬가지로 줄리아는 메모리를 할당하고 비우는 일로 이용자에게 부담을 주지 않는다. 나아가 가비지 컬렉션(garbage collection)에 대한 수동 제어 수단을 제공한다. 따라서 줄리아로 전환하더라도 파이썬이 주는 일반적 편의를 놓치거나 하지는 않는다. 

줄리아는 우월한 병렬성을 제공한다. 수학 및 과학 컴퓨팅은 일정 기기, 특히 다중 코어 상에서 전체 리소스를 활용할 수 있을 때 성장한다. 파이썬과 줄리아는 병렬 연산을 수행할 수 있다. 그러나 파이썬의 병렬 연산 방식은 스레드나 노드 사이의 데이터 직렬화 및 역직렬화를 필요로 한다. 반면 줄리아의 병렬화는 한층 정교하다. 아울러 줄리아의 병렬화 구문은 파이썬보다 덜 무거워서 사용하기가 더 용이하다.  

줄리아는 자체적인 네이티브 머신러닝 라이브러리를 개발 중이다. 플럭스(Flux)는 줄리아의 머신러닝 라이브러리이고, 보편적 응용 분야를 위한 여러 모델 패턴을 보이고 있다. 전적으로 줄리아로 작성됐기 때문에 이용자는 필요할 때마다 이를 수정할 수 있고, 또한 줄리아의 독창적인 적시 컴파일링에 의해 프로젝트를 전체적으로 최적화할 수 있다. 

파이썬의 장점 
줄리아는 처음부터 데이터 과학을 위해 의도된 반면 파이썬은 데이터 과학으로 진화했다고 볼 수 있다. 파이썬은 데이터 과학자에게 몇몇 매력적인 이점을 제공한다. 아래와 같은 이유에서 ‘범용’ 파이썬이 데이터 과학 작업을 위한 더 나은 선택지가 될 수 있다. 

파이썬은 제로-기준 어레이 인덱싱을 이용한다. 파이썬, C 등 대다수 언어에서 어레이의 첫 요소는 ‘제로(0)’이다. 예를 들어 파이썬의 경우 문자열의 첫 문자는 ‘string[0]’이다. 줄리아는 1 기준 어레이 인덱싱을 이용한다. 이는 우연이 아니다. 대다수의 수학 및 과학 애플리케이션, 예를 들어 매스매티카 등이 1 기준 인텍싱을 이용하고, 줄리아는 이들을 의도해서 만들어졌다. 줄리아에서 ‘실험적 기능’을 통해 제로 인덱싱을 지원하는 것은 가능하다. 그러나 1-인덱싱 기본값은 깊이 뿌리내린 프로그래밍 습관을 지닌 일반 이용자가 이를 채택하는 것을 방해할 수 있다. 

시작할 때 오버헤드가 더 적다. 줄리아 프로그램보다 파이썬 프로그램이 더 느릴 수 있다. 그러나 파이썬의 런타임 자체는 더 가볍고, 따라서 파이썬 프로그램이 시작하고 최초의 결과를 전달하는 데 더 적은 시간이 걸리는 것이 보통이다. 또한 JIT 컴파일링은 줄리아 프로그램의 실행 속도를 빠르게 해주지만, 대신 시작 시간은 오래 걸린다. 줄리아의 시작 속도를 개선하기 위해 많은 작업이 진행되었지만, 파이썬이 여전히 우월하다.  

완성도가 높다. 줄리아 언어는 젊다. 줄리아는 불과 2009년부터 개발되기 시작했다. 그 과정에서 상당한 피쳐 천(feature churn)을 겪었다. 이와 대조적으로 파이썬은 30년 가까운 역사를 가지고 있다. 

파이썬은 월등히 많은 써드파티 패키지가 있다. 파이썬이 가진 최대의 매력 가운데 하나라면 파이썬 진영의 써드파티 패키지의 다양성과 유용성이다. 다시 한번, 상대적으로 짧은 역사인 줄리아 진영의 소프트웨어는 아직도 소규모다. 이는 부분적으로 기존의 C 및 파이썬 라이브러리 이용으로 상쇄된다. 그러나 줄리아가 성장하려면 자체 라이브러리가 있어야 한다. 플럭스(Flux), 케이넷(Knet) 같은 라이브러리는 줄리아가 머신러닝과 딥러닝에 유용하도록 만들어주지만, 작업의 대부분이 텐서플로나 파이토치를 통해 이뤄지는 실정이다. 

수백만 명에 이르는 이용자. 대규모 열혈 활성 커뮤니티가 없으면 언어는 무용지물이다. 줄리아 커뮤니티는 열성적이고 성장 중이다. 그러나 여전히 파이썬 커뮤니티에 비하면 작은 조각에 불과하다. 파이썬의 거대한 커뮤니티는 거대한 이점이다. 

파이썬은 빨라지고 있다. 파이썬 인터프리터의 향상은 물론이고 (멀티-코어 병렬 프로세싱 등) 파이썬은 가속하기가 더욱 쉬워지고 있다. 마이픽(mypyc) 프로젝트는 타입 주석이 달린 파이썬을 사이썬 보다 훨씬 더 원활하게 네이티브 C로 변환한다. 이는 일반적으로 4배의 성능 향상을 가져오고, 순수 수학 연산에서는 이보다 훨씬 더 높은 성능을 발휘한다. ciokr@idg.co.kr
 

X