2019.11.22

AI 개발을 위한 최적의 프로그래밍 언어 6+2선

Ian Pointer | InfoWorld
인공 지능(Artificial Intelligence, AI)는 애플리케이션 개발자에게 무한한 가능성을 제공한다. 머신러닝 또는 딥 러닝을 활용해 훨씬 더 정확한 사용자 프로필, 개인 맞춤 설정, 추천을 만들거나 더 스마트한 검색, 음성 인터페이스 또는 지능형 비서를 구현하거나 그 외의 다양한 방법으로 앱을 개선할 수 있다. 심지어 예전에는 생각지도 못했던, 보고 듣고 상황에 반응하는 애플리케이션을 만들 수도 있다.
 
ⓒ Getty Images Bank

AI를 온전히 활용하기 위해서는 어떤 프로그래밍 언어를 배워야 할까? 물론 좋은 머신러닝, 딥 러닝 라이브러리가 풍부한 언어가 좋다. 또한 우수한 런타임 성능, 충실한 툴 지원, 대규모 프로그래머 커뮤니티, 건강한 지원 패키지 생태계도 필요하다. 요구사항이 많지만 괜찮은 선택지 역시 풍부하다. 

AI 개발을 위한 6가지 최적의 프로그래밍 언어와, 이 목록에는 들지 못했지만 살펴볼 만한 2가지 언어를 소개한다. 이 가운데에는 인기 상승 중인 언어도 있고 하락세인 언어도 있고 딥 러닝 아키텍처와 애플리케이션의 역사에 관심이 있는 경우에만 알면 되는 언어도 있다. 이제부터 각각의 장단점을 살펴보자.


파이썬(Python)

선두는 여전히 파이썬이다. 사실 다른 언어가 이 자리를 뺏기도 쉽지 않다. 파이썬에도 나름의 골치 아픈 문제는 있지만 AI 작업을 한다면 어느 시점에는 거의 무조건 파이썬을 사용하게 된다. 또한 파이썬의 투박한 부분들도 그동안 어느정도 개선됐다.

2020년을 목전에 둔 지금, 주요 라이브러리 대부분이 파이썬 3.x를 지원하고 파이썬 2.x에 대한 지원을 속속 중단하고 있음을 감안하면 파이썬 2.x냐, 파이썬 3.x냐의 논란은 거의 무의미하다. 즉, 모든 새로운 언어 기능을 마침내 본격적으로 활용할 수 있게 됐다.

모든 솔루션이 각자 다른 방법으로 조금씩 문제가 있는 악몽 같은 파이썬의 패키징은 여전하지만 95%의 상황에서는 별다른 걱정 없이 아나콘다(Anaconda)를 사용할 수 있다. 그럼에도 파이썬 측이 이 오랜 문제를 아직 최종적으로, 완전히 해결하지 못한 점은 아쉽다.

어쨌든 파이썬의 수학 및 통계 라이브러리는 다른 언어가 따라올 수 없는 부분이다. 광범위하게 사용되는 넘파이(NumPy)는 이제 텐서 연산에서 표준 API나 다름없고, 판다스(Pandas)를 통해 R의 강력하고 유연한 데이터프레임을 파이썬에서 사용할 수 있다. 자연어 처리(NLP)에는 유명한 NLTK와 빠른 속도를 자랑하는 스페이시(SpaCy)가 있다. 머신러닝의 경우 실전에서 검증된 사이킷-런(Scikit-learn)이 있다. 딥 러닝에서는 모든 현행 라이브러리(텐서플로우, 파이토치, 체이너, 아파치 MX넷, 테아노 등) 프로젝트가 사실상 파이썬을 가장 우선해 개발된다.

아카이브(arXiv)에서 최첨단 딥 러닝 연구 논문을 읽다 보면 소스코드를 제공하는 대다수 연구가 파이썬 코드를 제공한다는 것을 알 수 있다. 파이썬 생태계에는 라이브러리 외의 다른 부분도 있다. 아이파이썬(IPython)은 주피터 노트북(Jupyter Notebook)이 되면서 파이썬 중심 성격이 옅어졌지만 주피터 노트북 사용자와 온라인에서 공유되는 노트북의 대부분이 여전히 파이썬을 사용한다. 배포 모델 측면에서도 마이크로서비스 아키텍처, 셀던 코어(Seldon Core)와 같은 기술의 등장으로 프로덕션에 파이썬 모델을 아주 쉽게 배포할 수 있게 됐다.

파이썬은 AI 연구의 최전선에 있는 언어이며 대부분의 머신러닝, 딥 러닝 프레임워크에 사용되며 AI 분야의 거의 모든 사람이 말하는 언어다. 최소한 하루에 한 번은 공백 문제에 대해 욕지기가 솟는다는 사실에도 불구하고, 이러한 이유로 파이썬은 AI 프로그래밍 언어 중 첫 번째로 꼽힌다.


C++

C++는 AI 애플리케이션 개발에서 가장 먼저 거론되는 언어는 아니지만, 시스템에서 마지막 한방울까지 최대한 성능을 짜내야 한다면(딥 러닝이 엣지로 이동하면서 리소스가 제약된 시스템에서 모델을 실행해야 하는 상황이 갈수록 많아지는 추세임) 무서운 포인터의 세계에 다시 한 번 발을 들여놓아야 한다.

다행히 현대의 C++는 즐거운 코드 작성이 가능하다(진심이다). 이젠 접근 방법에 선택권이 있다. 스택의 가장 밑바닥으로 직행해서 엔비디아 쿠다(CUDA)와 같은 라이브러리를 사용해 GPU에서 바로 실행되는 코드를 쓸 수도 있고, 텐서플로우 또는 파이토치를 사용해서 유연한 고수준 API에 액세스할 수도 있다. 파이토치와 텐서플로우 모두 파이썬(또는 파이토치의 토치스크립트 파이썬 하위 집합)으로 생성된 모델을 로드해서 C++ 런타임에서 바로 실행할 수 있게 해주므로 개발 유연성을 유지하는 동시에 프로덕션에서 베어 메탈 성능에 근접할 수 있다.

요약하자면, AI 애플리케이션이 초소형 임베디드 시스템부터 거대한 클러스터에 이르기까지 모든 디바이스에 걸쳐 확산되면서 C++는 툴킷의 핵심 요소가 되고 있다. 엣지의 AI는 정확함만으로는 더 이상 충분하지 않음을 의미한다. 정확하고도 빨라야 한다.


자바 및 기타 JVM 언어

JVM 언어군(자바, 스칼라, 코틀린, 클로저 등)도 여전히 AI 애플리케이션 개발을 위한 좋은 선택이다. 자연어 처리(코어NLP), 텐서 연산(ND4J), GPU 가속 딥 러닝 스택(DL4J) 등 분야를 불문하고 파이프라인의 모든 부분에서 풍부한 라이브러리가 존재한다. 또한 아파치 스파크, 아파치 하둡과 같은 빅데이터 플랫폼에 대한 접근도 용이하다.

자바는 대부분의 엔터프라이즈에서 공용어이며 새로운 언어 구성자가 도입된 자바 8 이상 버전부터는 많은 이들이 기억하는 짜증나는 코딩 경험에서 벗어났다. 자바로 AI 애플리케이션을 작성하는 과정은 다소 지루하게 느껴질 수 있지만 소기의 목적은 달성할 수 있으며 개발, 배포, 모니터링을 위한 기존의 모든 자바 인프라를 사용할 수 있다.


자바스크립트(JavaScript)

전적으로 AI 애플리케이션을 만들기 위한 목적으로 자바스크립트를 배우는 경우는 거의 없지만 구글 TensorFlow.js는 계속 개선되면서 케라스(Keras) 및 텐서플로우 모델을 브라우저에 배포하거나, GPU 가속 계산을 위해 웹GL을 사용해서 Node.js를 통해 배포하는 흥미로운 방법을 제공한다.

다만 TensorFlow.js가 출범한 이후에도 AI 자바스크립트 개발자들이 대대적으로 AI 영역으로 밀려드는 일은 아직 발생하지 않았다. 자바스크립트 주변 생태계의 라이브러리가 파이썬과 같은 언어에 비해 아직 많지 않은 것이 이유일 수 있다.

또한 서버 측에서는 파이썬 옵션을 사용할 때에 비해 Node.js로 모델을 배포해서 얻는 실질적인 이점이 별로 없다. 따라서 자바스크립트 기반 AI 애플리케이션은 당분간 주로 브라우저 기반으로 남을 가능성이 높다. 그러나 그것만으로도 이모지 스캐빈저 헌트(Emoji Scavenger Hunt)와 같은 재미있는 가능성이 풍부하다.


스위프트(Swift)

이 기사의 지난해 버전에서는 스위프트를 주목해야 할 언어로 언급했는데, 올해에는 상위 6개 언어에 포함됐다. 그동안 무슨 일이 있었을까? 바로 텐서플로우용 스위프트의 등장이다. 최신, 최고의 텐서플로우 기능을 군더더기 없이 완전한 형식으로 바인딩하고, 마치 파이썬을 사용하는 것처럼 파이썬 라이브러리를 가져올 수 있는 마술 같은 기능을 제공한다.

패스트AI(Fastai) 팀은 스위프트 버전의 라이브러리를 개발 중이며, LLVM 컴파일러의 텐서 지능이 높아지면서 모델 생성과 실행에 관해 많은 최적화가 더 이뤄질 것으로 기대된다. 지금 당장 프로덕션에 사용할 수 있는지 묻는다면 답은 아니지만, 딥 러닝 개발의 다음 세대를 향한 길을 가리킨다고 할 수 있으므로 스위프트 주변에서 일어나는 일을 주시할 필요가 있다.


R 언어

R은 이 목록에서 최하위고 추세 자체도 하락하는 중이다. R은 데이터 과학자들이 선호하는 언어다. 그러나 다른 프로그래머들 시각에서 R의 데이터프레임 중심 접근 방법은 다소 혼란스럽다. 전담 R 개발자 그룹이 있다면 연구, 프로토타이핑, 실험을 위해 텐서플로우, 케라스, 또는 H2O와의 통합을 사용하는 것은 좋지만 성능과 운영 측면에 대한 우려 사항 탓에 프로덕션 용도 또는 미개척지 개발에서 R을 선뜻 추천하기는 어렵다. 프로덕션 서버에 배포할 수 있는 성능 좋은 R 코드를 쓸 수는 있지만 대부분의 경우 R 프로토타입을 가지고 와서 자바나 파이썬으로 다시 코딩하는 편이 더 쉽다.


기타 AI 프로그래밍 옵션

물론 파이썬, C++, 자바, 자바스크립트, 스위프트, R 외에 AI 프로그래밍에 사용할 수 있는 다른 언어도 있다. 가장 먼저 배울 만한 언어로 분류하기는 어렵지만 흥미를 끌거나 도움이 될 수도 있는 두 가지 언어를 추가로 소개한다.

- 루아(Lua)
몇 년 전, 연구와 프로덕션에서 가장 인기 있는 머신러닝 라이브러리 중 하나인 토치 프레임워크 덕분에 인공 지능 분야에서 루아(Lua)의 주가가 치솟은 적이 있다. 딥 러닝 모델의 역사를 공부한다면 대부분 토치에 대한 방대한 참조와 오래된 깃허브 리포지토리의 풍부한 루아 소스코드를 발견하게 된다.

역사 연구를 위해서라면 파이토치의 기본 API에서 그다지 멀리 떨어지지 않은 토치 API에 대한 실용적인 지식을 갖추면 유용할 수도 있다. 그러나 애플리케이션을 위해 역사 공부에 매달려야 하는 경우가 아니라면(대부분의 경우 그럴 필요가 없음) 루아의 소소한 여러 기벽을 굳이 헤아리지 않더라도 사는 데 지장은 없다. 

- 줄리아(Julia)
줄리아는 수치 계산에 초점을 둔 고성능 프로그래밍 언어인 만큼 수학 천지인 AI 세계와 잘 맞는다. 지금은 크게 인기 있는 언어는 아니지만 TensorFlow.jl, 모카(Mocha – 카페(Caffe)의 영향을 크게 받음)와 같은 래퍼는 딥 러닝을 충실하게 지원한다. 비교적 작은 생태계에 개의치 않으며 쉽고 빠르게 고성능 계산을 수행하는 특성을 이용하고 싶다면 줄리아를 살펴볼 가치는 있다. editor@itworld.co.kr 



2019.11.22

AI 개발을 위한 최적의 프로그래밍 언어 6+2선

Ian Pointer | InfoWorld
인공 지능(Artificial Intelligence, AI)는 애플리케이션 개발자에게 무한한 가능성을 제공한다. 머신러닝 또는 딥 러닝을 활용해 훨씬 더 정확한 사용자 프로필, 개인 맞춤 설정, 추천을 만들거나 더 스마트한 검색, 음성 인터페이스 또는 지능형 비서를 구현하거나 그 외의 다양한 방법으로 앱을 개선할 수 있다. 심지어 예전에는 생각지도 못했던, 보고 듣고 상황에 반응하는 애플리케이션을 만들 수도 있다.
 
ⓒ Getty Images Bank

AI를 온전히 활용하기 위해서는 어떤 프로그래밍 언어를 배워야 할까? 물론 좋은 머신러닝, 딥 러닝 라이브러리가 풍부한 언어가 좋다. 또한 우수한 런타임 성능, 충실한 툴 지원, 대규모 프로그래머 커뮤니티, 건강한 지원 패키지 생태계도 필요하다. 요구사항이 많지만 괜찮은 선택지 역시 풍부하다. 

AI 개발을 위한 6가지 최적의 프로그래밍 언어와, 이 목록에는 들지 못했지만 살펴볼 만한 2가지 언어를 소개한다. 이 가운데에는 인기 상승 중인 언어도 있고 하락세인 언어도 있고 딥 러닝 아키텍처와 애플리케이션의 역사에 관심이 있는 경우에만 알면 되는 언어도 있다. 이제부터 각각의 장단점을 살펴보자.


파이썬(Python)

선두는 여전히 파이썬이다. 사실 다른 언어가 이 자리를 뺏기도 쉽지 않다. 파이썬에도 나름의 골치 아픈 문제는 있지만 AI 작업을 한다면 어느 시점에는 거의 무조건 파이썬을 사용하게 된다. 또한 파이썬의 투박한 부분들도 그동안 어느정도 개선됐다.

2020년을 목전에 둔 지금, 주요 라이브러리 대부분이 파이썬 3.x를 지원하고 파이썬 2.x에 대한 지원을 속속 중단하고 있음을 감안하면 파이썬 2.x냐, 파이썬 3.x냐의 논란은 거의 무의미하다. 즉, 모든 새로운 언어 기능을 마침내 본격적으로 활용할 수 있게 됐다.

모든 솔루션이 각자 다른 방법으로 조금씩 문제가 있는 악몽 같은 파이썬의 패키징은 여전하지만 95%의 상황에서는 별다른 걱정 없이 아나콘다(Anaconda)를 사용할 수 있다. 그럼에도 파이썬 측이 이 오랜 문제를 아직 최종적으로, 완전히 해결하지 못한 점은 아쉽다.

어쨌든 파이썬의 수학 및 통계 라이브러리는 다른 언어가 따라올 수 없는 부분이다. 광범위하게 사용되는 넘파이(NumPy)는 이제 텐서 연산에서 표준 API나 다름없고, 판다스(Pandas)를 통해 R의 강력하고 유연한 데이터프레임을 파이썬에서 사용할 수 있다. 자연어 처리(NLP)에는 유명한 NLTK와 빠른 속도를 자랑하는 스페이시(SpaCy)가 있다. 머신러닝의 경우 실전에서 검증된 사이킷-런(Scikit-learn)이 있다. 딥 러닝에서는 모든 현행 라이브러리(텐서플로우, 파이토치, 체이너, 아파치 MX넷, 테아노 등) 프로젝트가 사실상 파이썬을 가장 우선해 개발된다.

아카이브(arXiv)에서 최첨단 딥 러닝 연구 논문을 읽다 보면 소스코드를 제공하는 대다수 연구가 파이썬 코드를 제공한다는 것을 알 수 있다. 파이썬 생태계에는 라이브러리 외의 다른 부분도 있다. 아이파이썬(IPython)은 주피터 노트북(Jupyter Notebook)이 되면서 파이썬 중심 성격이 옅어졌지만 주피터 노트북 사용자와 온라인에서 공유되는 노트북의 대부분이 여전히 파이썬을 사용한다. 배포 모델 측면에서도 마이크로서비스 아키텍처, 셀던 코어(Seldon Core)와 같은 기술의 등장으로 프로덕션에 파이썬 모델을 아주 쉽게 배포할 수 있게 됐다.

파이썬은 AI 연구의 최전선에 있는 언어이며 대부분의 머신러닝, 딥 러닝 프레임워크에 사용되며 AI 분야의 거의 모든 사람이 말하는 언어다. 최소한 하루에 한 번은 공백 문제에 대해 욕지기가 솟는다는 사실에도 불구하고, 이러한 이유로 파이썬은 AI 프로그래밍 언어 중 첫 번째로 꼽힌다.


C++

C++는 AI 애플리케이션 개발에서 가장 먼저 거론되는 언어는 아니지만, 시스템에서 마지막 한방울까지 최대한 성능을 짜내야 한다면(딥 러닝이 엣지로 이동하면서 리소스가 제약된 시스템에서 모델을 실행해야 하는 상황이 갈수록 많아지는 추세임) 무서운 포인터의 세계에 다시 한 번 발을 들여놓아야 한다.

다행히 현대의 C++는 즐거운 코드 작성이 가능하다(진심이다). 이젠 접근 방법에 선택권이 있다. 스택의 가장 밑바닥으로 직행해서 엔비디아 쿠다(CUDA)와 같은 라이브러리를 사용해 GPU에서 바로 실행되는 코드를 쓸 수도 있고, 텐서플로우 또는 파이토치를 사용해서 유연한 고수준 API에 액세스할 수도 있다. 파이토치와 텐서플로우 모두 파이썬(또는 파이토치의 토치스크립트 파이썬 하위 집합)으로 생성된 모델을 로드해서 C++ 런타임에서 바로 실행할 수 있게 해주므로 개발 유연성을 유지하는 동시에 프로덕션에서 베어 메탈 성능에 근접할 수 있다.

요약하자면, AI 애플리케이션이 초소형 임베디드 시스템부터 거대한 클러스터에 이르기까지 모든 디바이스에 걸쳐 확산되면서 C++는 툴킷의 핵심 요소가 되고 있다. 엣지의 AI는 정확함만으로는 더 이상 충분하지 않음을 의미한다. 정확하고도 빨라야 한다.


자바 및 기타 JVM 언어

JVM 언어군(자바, 스칼라, 코틀린, 클로저 등)도 여전히 AI 애플리케이션 개발을 위한 좋은 선택이다. 자연어 처리(코어NLP), 텐서 연산(ND4J), GPU 가속 딥 러닝 스택(DL4J) 등 분야를 불문하고 파이프라인의 모든 부분에서 풍부한 라이브러리가 존재한다. 또한 아파치 스파크, 아파치 하둡과 같은 빅데이터 플랫폼에 대한 접근도 용이하다.

자바는 대부분의 엔터프라이즈에서 공용어이며 새로운 언어 구성자가 도입된 자바 8 이상 버전부터는 많은 이들이 기억하는 짜증나는 코딩 경험에서 벗어났다. 자바로 AI 애플리케이션을 작성하는 과정은 다소 지루하게 느껴질 수 있지만 소기의 목적은 달성할 수 있으며 개발, 배포, 모니터링을 위한 기존의 모든 자바 인프라를 사용할 수 있다.


자바스크립트(JavaScript)

전적으로 AI 애플리케이션을 만들기 위한 목적으로 자바스크립트를 배우는 경우는 거의 없지만 구글 TensorFlow.js는 계속 개선되면서 케라스(Keras) 및 텐서플로우 모델을 브라우저에 배포하거나, GPU 가속 계산을 위해 웹GL을 사용해서 Node.js를 통해 배포하는 흥미로운 방법을 제공한다.

다만 TensorFlow.js가 출범한 이후에도 AI 자바스크립트 개발자들이 대대적으로 AI 영역으로 밀려드는 일은 아직 발생하지 않았다. 자바스크립트 주변 생태계의 라이브러리가 파이썬과 같은 언어에 비해 아직 많지 않은 것이 이유일 수 있다.

또한 서버 측에서는 파이썬 옵션을 사용할 때에 비해 Node.js로 모델을 배포해서 얻는 실질적인 이점이 별로 없다. 따라서 자바스크립트 기반 AI 애플리케이션은 당분간 주로 브라우저 기반으로 남을 가능성이 높다. 그러나 그것만으로도 이모지 스캐빈저 헌트(Emoji Scavenger Hunt)와 같은 재미있는 가능성이 풍부하다.


스위프트(Swift)

이 기사의 지난해 버전에서는 스위프트를 주목해야 할 언어로 언급했는데, 올해에는 상위 6개 언어에 포함됐다. 그동안 무슨 일이 있었을까? 바로 텐서플로우용 스위프트의 등장이다. 최신, 최고의 텐서플로우 기능을 군더더기 없이 완전한 형식으로 바인딩하고, 마치 파이썬을 사용하는 것처럼 파이썬 라이브러리를 가져올 수 있는 마술 같은 기능을 제공한다.

패스트AI(Fastai) 팀은 스위프트 버전의 라이브러리를 개발 중이며, LLVM 컴파일러의 텐서 지능이 높아지면서 모델 생성과 실행에 관해 많은 최적화가 더 이뤄질 것으로 기대된다. 지금 당장 프로덕션에 사용할 수 있는지 묻는다면 답은 아니지만, 딥 러닝 개발의 다음 세대를 향한 길을 가리킨다고 할 수 있으므로 스위프트 주변에서 일어나는 일을 주시할 필요가 있다.


R 언어

R은 이 목록에서 최하위고 추세 자체도 하락하는 중이다. R은 데이터 과학자들이 선호하는 언어다. 그러나 다른 프로그래머들 시각에서 R의 데이터프레임 중심 접근 방법은 다소 혼란스럽다. 전담 R 개발자 그룹이 있다면 연구, 프로토타이핑, 실험을 위해 텐서플로우, 케라스, 또는 H2O와의 통합을 사용하는 것은 좋지만 성능과 운영 측면에 대한 우려 사항 탓에 프로덕션 용도 또는 미개척지 개발에서 R을 선뜻 추천하기는 어렵다. 프로덕션 서버에 배포할 수 있는 성능 좋은 R 코드를 쓸 수는 있지만 대부분의 경우 R 프로토타입을 가지고 와서 자바나 파이썬으로 다시 코딩하는 편이 더 쉽다.


기타 AI 프로그래밍 옵션

물론 파이썬, C++, 자바, 자바스크립트, 스위프트, R 외에 AI 프로그래밍에 사용할 수 있는 다른 언어도 있다. 가장 먼저 배울 만한 언어로 분류하기는 어렵지만 흥미를 끌거나 도움이 될 수도 있는 두 가지 언어를 추가로 소개한다.

- 루아(Lua)
몇 년 전, 연구와 프로덕션에서 가장 인기 있는 머신러닝 라이브러리 중 하나인 토치 프레임워크 덕분에 인공 지능 분야에서 루아(Lua)의 주가가 치솟은 적이 있다. 딥 러닝 모델의 역사를 공부한다면 대부분 토치에 대한 방대한 참조와 오래된 깃허브 리포지토리의 풍부한 루아 소스코드를 발견하게 된다.

역사 연구를 위해서라면 파이토치의 기본 API에서 그다지 멀리 떨어지지 않은 토치 API에 대한 실용적인 지식을 갖추면 유용할 수도 있다. 그러나 애플리케이션을 위해 역사 공부에 매달려야 하는 경우가 아니라면(대부분의 경우 그럴 필요가 없음) 루아의 소소한 여러 기벽을 굳이 헤아리지 않더라도 사는 데 지장은 없다. 

- 줄리아(Julia)
줄리아는 수치 계산에 초점을 둔 고성능 프로그래밍 언어인 만큼 수학 천지인 AI 세계와 잘 맞는다. 지금은 크게 인기 있는 언어는 아니지만 TensorFlow.jl, 모카(Mocha – 카페(Caffe)의 영향을 크게 받음)와 같은 래퍼는 딥 러닝을 충실하게 지원한다. 비교적 작은 생태계에 개의치 않으며 쉽고 빠르게 고성능 계산을 수행하는 특성을 이용하고 싶다면 줄리아를 살펴볼 가치는 있다. editor@itworld.co.kr 



X