줄리아 언어를 소개합니다 (The Julia Language)
계산과학을 하시는 분들을 위한 컴퓨터 언어 이야기입니다.
줄리아 언어(The Julia Language)라는 것이 있습니다. MIT에서 개발한 신생 언어입니다. 2012년에 처음 발표되었으니 굉장히 새로운 언어입니다. 한 번 써보니 너무 마음에 들어서 소개합니다.
저는 그리 복잡한 프로그래밍을 하지 않습니다. 그저 데이터 파일 읽어서, 수치해석(Numerical Analysis) 좀 하고, 최적화(Optimization) 문제의 해를 구하는 수치 알고리듬(Numerical Algorithm) 구현 좀 하고, 때로는 외부 라이브러리(특히 CPLEX)를 호출합니다. 그리고 그림 좀 그립니다. 이 목적으로 주로 MATLAB을 썼습니다.
MATLAB은 이런 목적에 굉장히 잘 부합합니다. 벡터, 행렬 계산이 굉장히 편하게 되어 있고, 안정적이기도 합니다. 수많은 사용자가 있어서 필요할 때 도움 받기도 좋습니다. 일하는 속도가 굉장히 빠릅니다.
MATLAB의 단점:
- for-loop이 느립니다. 많이 개선되긴 했지만, for-loop이 굉장히 느려서, vectorization을 특별히 신경써가며 해야 합니다.
- Optimization solver를 쓰기 굉장히 불편합니다. 뒤에서 좀 더 설명하겠습니다.
- 유료입니다. 대부분의 학교에서 라이센스를 구매하였고, 학생은 비교적 저렴하게 구매할 수 있지만, 어쨌든 유료입니다.
그래서 대안으로 처음 살펴 본 것이 Python이었습니다. C나 Java같은 컴파일 언어는 고려 대상이 아니었습니다. 개발속도가 아무래도 느리기 때문입니다. 클래스 구조 설계 에서 변수 선언까지 굉장히 손이 가는 일이 많아서, 저처럼 간단한 알고리듬 구현만 하면 되는 사람에게는 작업 속도만 늦추는 일이었습니다.
Python은 굉장히 인기 좋은 언어이고 사용자도 많고 라이브러리도 잘 갖추어져 있습니다. MATLAB만큼 편하진 않지만, C나 Java같은 컴파일 언어보다는 훨씬 편리하고 쉽습니다.
Python의 단점:
- Array의 index가 0부터 시작합니다. 일반적으로 프로그래밍하시는 분들이야 index가 0부터 시작하는 것이 너무나 당연한 일이겠지만, 주로 벡터와 행렬을 다루는 제겐 index는 1부터 시작해야 합니다. x=[1, 2, 3] 과 같은 벡터가 있다고 생각해보면 x[1]은 첫번째 element여야 하고, x[3]은 마지막 element여야 합니다. 안 그러면 알고리듬 구현에 큰 방해가 됩니다. 1을 빼주면 된다지만, 불편합니다. 버그 발생의 온상지입니다.
다른 단점들도 좀 있겠지만, 그냥 여기서 멈췄습니다. 저한테 index가 1부터 시작하는 건 굉장히 중요한 문제입니다. 제게 Array는 vector/matrix입니다. MATLAB은 index가 1부터 시작합니다. MATLAB의 ‘MAT’가 matrix에서 온 말입니다. 애초에 그렇게 설계 되었습니다.
그래서 한동안 고민하다가 계속 MATLAB을 썼습니다.
선형계획(Linear Programming) 문제를 풀기 위해서 MATLAB에서 linprog라는 함수를 제공합니다.
와 같은 문제가 있다면,
같은 방식으로 쓰면 됩니다.
여기서 문제는 A는 행렬입니다. 저 행렬을 만드는데 시간이 너무 많이 걸립니다. Algebraic Modeling Language (AML) 이라는 것이 있습니다. 사람이 선형계획 문제를 수식으로 쓰듯이 컴퓨터에 입력할 수 있도록 도와주는 중간 언어입니다. 그러면 A행렬, b벡터 등을 알아서 만들어 줍니다. MATLAB 에는 안타깝게도 (제가 알기로는) 사용하기 편리한 AML이 없습니다. (라고 썼었는데, 역시 뭔가 있긴 있었습니다. CVX, YALMIP라는 패키지가 있었네요.)
제가 최근에 쓴 논문에 나오는 최적화 문제입니다. 이 문제에서 x는 입니다. 이 문제를 풀기 위해서 MATLAB + CPLEX를 사용했었는데, A행렬 만드는 데 너무 고생했던 기억이 납니다. 불가능한 일은 아닙니다만, 버그가 발생하면 수정하기가 굉장히 어렵습니다.
그러던 와중에 Julia라는 언어를 발견했습니다. Julia는 애초에 계산을 위해 만들어진 언어이기 때문에, 위에서 제가 말한 단점들을 대부분 해결했습니다. MALTAB처럼 편리하게 개발할 수 있고, C처럼 빠르게 동작하는 언어가 지향점입니다. Array index도 당연하게 1부터 시작합니다. for-loop도 빠릅니다. 어떤 경우에는 vectorization하는 것보다 for-loop을 그냥 쓰는 게 더 빠르기도 합니다.
Julia에는 JuMP라는 패키지가 있습니다. MIT의 두 대학원생이 개발하고 있습니다. JuMP는 기본적으로 Julia언어를 위한 AML입니다. 최적화 문제를 모델링하기 쉽도록 개발되었습니다.
와 같은 제약식이 있다면
라고 쓰면 됩니다.
이라는 제약식이 있다면
처럼 쓰면 됩니다. 매우 간단합니다.
게다가 Julia는 빠릅니다. C나 Fortran보다 빠를 방도야 없겠습니다만, 다른 유사한 장점을 가진 언어인 Python이나 MATLAB과 비교할 바는 아닙니다. Julia 홈페이지의 중간 부분에 있는 표를 보시기 바랍니다. 한 경제학 전공자의 경험에 의하면 Julia가 Python보다 다섯배이상 빠르다고 합니다.
Julia의 단점
계산용 언어로써 Julia의 단점은 찾아보기 어렵습니다. 지금 현재 단점이라면, 급속히 늘어나고 있긴 하지만, 아직은 부족한 라이브러리를 들 수 있겠고, 라이브러리가 계속 개발 중이라서 안정성이 좀 부족합니다.
대학원생이 Julia를 써서 연구할 경우에 생기는 조금 다른 유형의 단점이 생길 수도 있습니다. 아직 산업 현장에서는 C++나 Java를 훨씬 더 선호합니다. 적어도 최적화 문제에 있어서는 더욱 그렇습니다. 대부분의 큰 기업들이 C++/Java 프로그래밍을 할 수 있는 사람을 찾습니다. 그도 그럴 것이 기존에 개발되어 있는 코드 대부분이 C++/Java입니다. 그래서 C++ 혹은 Java를 쓰지 못 한다면 취업의 폭이 좁아질 수도 있습니다.
하지만 C++/Java 버그 잡다가 논문 작성이 늦어져서 졸업이 늦어지는 사태와 비교해 본다면 Julia로 코딩 해서 연구의 생산성을 높이는 것도 그리 나쁜 선택은 아닐거라고 생각합니다.
이 글에서 Julia를 소개 하고 예찬 했지만, 대학원생이라면 다음의 두 가지 말씀은 드려야 할 것 같습니다.
- 지도교수가 선호하는 언어가 있다면, 그걸로 작업하시는 것이 낫습니다. 이유가 있겠죠. 굳이 Julia를 고집할 이유는 없어 보입니다.
- 연구를 위해서 써오던 손에 익숙한 언어가 있다면, 그냥 그걸로 계속 작업하시길 바랍니다. Julia가 편리하다고는 하지만, 처음 언어를 배울 때는 항상 적응 기간이 필요합니다. 괜히 Julia로 바꿨다가 졸업만 늦어질지도 모릅니다.
Julia를 배우는 데 도움이 될만한 웹사이트들입니다.
- Learn Julia in Y Minutes
- Julia By Example
- 제가 작성한 Julia가이드입니다. 설치 방법을 자세히 설명해 두었습니다.
그리고 최적화를 연구하시거나 사용하는 분이라면
통계나 머신 러닝 분야시라면
Julia 개발 환경 IDE
Julia를 이용해서 비즈니스에 나선 Forio라는 회사도 있습니다. Julia로 작성된 프로그램의 결과를 웹사이트에서 보여줄 수 있도록 하는 작업을 쉽게 해 주는 서버 환경을 제공합니다. 예를 들어서 Julia 와 Google Maps를 연동시켜서 Traveling Saleman Problem을 풉니다.
끝으로, 비틀즈가 부릅니다, Julia.
추가: 제가 Julia Programming에 관한 책도 하나 썼습니다. 경영과학을 위한 줄리아 언어 프로그래밍
Discover more from 잡생각 전문 블로그
Subscribe to get the latest posts sent to your email.
교수님 안녕하세요? Matlab 에는 CVX 나 YALMIP 같은 파서들이 있습니다.
CPLEX 와 연동시키지 않고 보통 SeDuMi 를 많이 사용하는데요, SDP 까지 커버가 가능하니 한번 살펴보시는 것도 괜찮을 것 같습니다.
앗 그렇네요. 어차피 CPLEX를 써야 할 일이 많아서 CVX는 쳐다도 안 봤었는데 지금 보니 Gurobi를 지원하는군요. YALMIP는 전혀 몰랐습니다. 제 삽질을 어떡하나요. ㅎㅎㅎ 미리 알았더라면 시간을 많이 아꼈을 텐데 안타깝군요 – _-;; 아무튼 여러가지 알려 주셔서 감사합니다!!
Julia 에서 CVX 는 Convex.jl 이라는 이름으로 존재합니다.
https://github.com/JuliaOpt/Convex.jl
안녕하세요. 교수님. 그냥 참고삼아 말씀드리는 건데, Python에는 매트릭스와 벡터를 다루기 위한 패키지가 따로 있습니다. scipy 라는 라이브러리인데, 이걸 사용하면 matlab과 거의 동일한 문법으로 다룰 수 있고 내부 원소 참조도 1부터 시작하는 인덱스를 사용합니다. 다양한 도메인에 쉽게 적용할 수 있다는 것이 Python의 장점이죠.
헉! 그것이 정녕 사실입니까? 1부터 시작할 수 있게 해 주는 것이 SciPy 인가요 아니면 Numpy 인가요? numpy.matrix 말씀하시는 건가요? 아무리 봐도 0부터 시작하는 거 같은데, 좀 더 자세히 알려주세요 ^^;
줄리아로 화면을 갖는 프로그램을 만드는것도 가능한가요?
궁금합니다.
저도 해본적은 없어서 잘 모르겠지만. 웹인터페이스를 이용하는 방식이면 가능한 듯 합니다.
https://discourse.julialang.org/t/julia-for-gui-app/416/10
에 보니 Escher.jl, Blink.jl 등 이야기가 있네요.
안녕하세요. 저는 교통을 전공하는 대학원생입니다.
최근 연구 범위를 최적화로 확장을 하려고 최적화 이론을 공부하고 연구를 해보려고 하는데요,
저는 주로 R과 Python을 기반으로 데이터 분석을 하였습니다.
그래서 최적화를 구현하기 위해서 Julia를 따로 배워야하나 고민이 많습니다.
혹시 최적화를 하는 쪽에서 julia가 범용적으로 쓰이는 언어인지,
python이나 R로도 충분한지 여쭤보고 싶습니다. 감사합니다.
안녕하세요, 지금 Python을 쓰시고 불편함이 없으시다면 그냥 Python으로 계속 하셔도 괜찮습니다. PYOMO 라는 최적화 modeling language가 있습니다. 그걸 쓰시면 되겠습니다. R은 최적화가 되긴 되는데 라이브러리가 충분하지 않다고 들었습니다.
앗 교수님 답변 감사드립니다. 사실은 이 글을 쓴 후 언어 하나쯤 더 배워도 좋겠다라는 생각으로 교수님의 책을 구입해서 Julia를 공부를 시작하였습니다. 감사합니다 :)
교수님 안녕하세요, 원광대학교 SW중심대학사업단 직원입니다.
혹시 줄리아에 대한 특강이 가능하실까요?
저희 학생들이 줄리아에 대한 특강을 듣고 싶다는 요청이 들어왔는데 아직 생소해서 제 능력으로는 요청드릴곳조차 없던 중 블로그의 글을 발견하게 되었습니다.
혹시 가능하시다면 063-850-5295로 꼭..전화 부탁드립니다.
간절히 원하는 학생들이 있어 꼭 듣게 해주고 싶어서요. 연락 기다리겠습니다.
아..교수님 국내가 아니신듯 하네요. 제가 생각이 짧았어요. 죄송합니다.