카테고리 보관물: News

TensorFlow Eager Execution

오늘 다이나믹 그래프를 지원하는 텐서플로의 Eager Execution 기능이 소개되었습니다. 올해 초에 명령형imperative 스타일의 기능이 텐서플로에 추가되었습니다(TensorFlow 1.1.0 RC2 and Imperative Style). 다음 버전인 1.5.0에서 이 기능이 빠지고 새롭게 Eager Execution으로 추가되는 것 같습니다.

텐서플로의 텐서는 연산 노드를 가리키는 핸들과 같았습니다(TF의 텐서와 상수, 변수, 플레이스홀더). Eager Execution에서 텐서는 데이터를 직접 포인팅합니다. 그래서 tf.Session을 시작하지 않고 직접 값을 얻을 수 있습니다.

>>> import tensorflow.contrib.eager as tfe
>>> tfe.enable_eager_execution()
>>> c = tf.constant(1)
>>> c
<tf.Tensor: id=0, shape=(), dtype=int32, numpy=1>

텐서 c를 확인해 보면 numpy 속성이 생긴 것을 알 수 있습니다.

>>> c.numpy()
1
>>> type(c)
EagerTensor
>>> type(c.numpy())
numpy.int32

Eager Execution은 NumPy와 호환성을 크게 높인 것 같습니다. 계산 그래프의 생성과 실행 단계가 구분되지 않으므로 파이썬의 조건문으로 계산 그래프를 동적으로 조직할 수 있습니다. 이외에도 그래디언트 계산과 동적 모델에 관한 기능들이 많이 추가되었습니다.

Eager Execution은 한번 설정하면 취소할 수 없어서 파이썬 세션을 새로 시작해야 합니다. 또 tf.data와 tf.layers 밑의 클래스를 사용해야 합니다. 아직 파이토치PyTorch 만큼은 자유도가 높아 보이지는 않지만 점점 다른 프레임워크의 장점을 흡수하는 모습은 기대가 됩니다. 텐서플로에 비하면 파이토치 사용자가 극히 적을 텐데도 상당히 의식하는 것 같습니다. 🙂

… we’re looking for feedback from the community to guide our direction.

텐서플로의 종전 API가 그랬듯이 Eager Execution도 향후에 상당히 변화가 많이 있을 것으로 예상됩니다. 좀 더 자세한 내용은 깃허브의 가이드 문서예제를 참고하세요.

Eager Execution을 사용해 보려면 다음 명령으로 텐서플로의 Nightly 빌드를 설치하면 됩니다.

$ pip install tf-nightly
$ pip install tf-nightly-gpu

New Jupyter Environment: Colaboratory

구글이 회사 내부에서 사용하고 있던 주피터 노트북의 커스텀 버전인 Colaboratory를 공개하였습니다. Colaboratory는 연구와 교육의 목적으로 개발되었다고 합니다. https://colab.research.google.com에 접속하면 샘플 노트북이 로드되는데요. 주피터 커널이 연결되어 있지 않은 상태입니다. 커널을 연결하기 위해서 권한을 요청하면 하루 정도 지나서 메일로 승인이 되었다는 안내를 받을 수 있습니다.

Colab에서 노트북을 생성한 후에 구글 드라이브에 저장을 할 수가 있습니다. 또한 구글 드라이브에서 새 문서 버튼을 통해 Colab 노트북을 직접 만들 수도 있습니다. 또 로컬 컴퓨터에 있는 주피터 노트북을 업로드해서 다른 사람과 공유할 수도 있습니다. 막다운markdown과 라텍LaTex도 물론 지원됩니다. 또 좀 더 편리한 텍스트 셀을 제공하고 있습니다.

스크린샷 2017-10-26 오전 11.40.12

Colab 노트북의 최대 크기는 20M까지입니다. Python 2.7만 지원하고 R이나 Scala는 아직 지원하고 있지 않습니다. 재미있는 것은 대부분의 파이썬의 과학 패키지는 최신 버전을 유지하고 있는데 텐서플로와 Scikit-Learn의 버전이 좀 뒤쳐져 있네요. 하지만 스터디나 튜토리얼 세션 등에는 유용하게 사용될 수 있을 것 같습니다. 🙂

스크린샷 2017-10-26 오전 10.58.27

New libraries: PlaidML & Coach

block_diagram

올해 4월 OpenCL 기반의 딥러닝 라이브러리를 개발하기 시작한 Vertex.AI에서 어제 Nvidia, AMD, Intel의 OpenGL 호환 GPU를 지원하는 PlaidML공개하였습니다. PlaidML은 단독으로 사용되기 보다는 케라스Keras의 백엔드backend로 고안되었습니다. 딥러닝 라이브러리 후발 주자이고 벤처 회사 입장에서 새로운 API를 전파하는 것보다 케라스의 백엔드가 더 나은 선택일지 모르겠습니다.  PlaidML은 현재 0.1 RC 버전으로 리눅스와 파이썬 2.x를 지원합니다. 하지만 앞으로 macOS, 윈도우즈Windows 운영체제를 지원한다고 합니다. 또 텐서플로TensorFlow와 파이토치PyTorch, 딥러닝4jdeeplearning4j와 호환되게 한다고 하는데 구체적으로 어떤 의미인지 확인되지 않았습니다. 아직까지는 CNN만을 지원하고 있고 곧 RNN도 추가될 예정입니다. PlaidML은 pip 명령으로 설치 가능합니다.

$ pip install plaidml plaidml-keras

PlaidML을 사용하는 간단한 예는 깃허브 README 파일을 참고하세요.

인텔 너바나NervanaNNP 발표가 채 잊혀지기도 전에 이번에는 새로운 강화학습 라이브러리 Coach발표하였습니다. Coach는 강화학습 분야의 여러 SOTA 알고리즘을 구현했으며  OpenAI Gym, RoboschoolViZDoom 환경을 지원합니다. 그리고 시각화와 디버깅을 위한 대시보드dashboard를 함께 제공합니다.

PlaidML와 Coach 모두 깃허브에 소스가 공개되어 있습니다. 요즘은 오픈소스 xxx를 발표했습니다란 말이 무색합니다. 오픈소스가 아니면 뭐하러 발표를 하냐는 말을 할 정도이니까요. 🙂

Intel Nervana Neural Network Processors(NNP)

intel-nervana-chip-2-showcase

인텔에서 인수한 너바나Nervana와 함께 새로운 딥러닝 칩을 연말에 공개한다고 발표하였습니다. 일명 너바나 뉴럴 네트워크 프로세서(NNP)입니다. 이 칩은 온전히 딥러닝을 위하여 고안되었으며 아직 어떤식으로 공개될지는 미지수입니다. 하지만 글의 마지막 코멘트로 미루어 보아 페이스북과 함께 협업을 하고 있는 것으로 보입니다. 그렇다면 파이토치PyTorch나 카페2Caffe2에서 이 칩을 지원하지 않을까 생각이 듭니다. 적절한 가격으로 좋은 성능을 낸다면 텐서플로에서 지원할지가 큰 화두가 될 것 같습니다.

TensorFlow 1.4.0 RC0 Release

텐서플로 1.4.0 RC0 버전이 릴리즈되었습니다. 1.4.0 버전에서 tf.contrib.data가 tf.data로 바뀌면서 텐서플로 코어로 들어왔습니다. 좀 자세한 내용은 릴리즈 노트를 참고해 주세요.

$ pip install --upgrade --pre tensorflow

$ pip install --upgrade --pre tensorflow-gpu

또 이제부터는 nightly 빌드가 PyPI로 제공됩니다! 깃허브 소스를 직접 컴파일하지 않아도 최신 패치의 텐서플로를 사용해 볼 수 있습니다.

$ pip install --upgrade tf-nightly 
$ pip install --upgrade tf-nightly-gpu

Theano 1.0 and No More

몬트리올 대학 밀라MILA 연구소의 요수아 벤지오Yoshua Bengio 교수가 씨아노Theano 구글 유저 그룹에 씨아노 1.0이 몇 주내로 릴리즈된 다는 것과 그 이후에 더 이상 개발이 지속되지 않는다는 내용을 공개하였습니다. 뉴럴 네트워크와 딥러닝의 온라인 강좌로 유명한 neuralnetworksanddeeplearning.com은 씨아노 라이브러리로 예제가 만들어져 있는데 씨아노의 래퍼인 Lasagne와 함께 한 풀 인기가 줄어들 것 같습니다.

구글, 페이스북이 서포팅하는 텐서플로TensorFlow나 파이토치PyTorch 같은 프레임워크와 경쟁한다는 것은 쉽지 않은 일입니다. 그렇지만 씨아노의 개발 중단은 아쉬워할 수 밖에 없습니다. 하지만 씨아노가 딥러닝과 연구 커뮤니티에 미친 영향은 오랫동안 기억될 것 같습니다.

Thanks Theano!

(업데이트) 역시 Lasagne도 씨아노와 함께 역사속에 남을 것 같습니다. Lasagne의 백엔드를 다른 씨아노말고 다른 것으로 대체할 수도 있겠지마 다른 라이브러리들은 이미 고수준 API를 갖추고 있고 기존의 Lasagne의 API도 일관성을 유지하기 힘들 거라고 하네요. Lasagne의 개발자 Jan Schlüter가 구글 그룹에 남긴 포스트를 참고하세요.

홍대 머신러닝 스터디 후기

파이썬 라이브러리를 활용한 머신러닝” 도서를 출간하고 나서 진작부터 생각하고 있던 머신러닝 스터디를 7월말 부터 시작했습니다. 상대적으로 강남 인근에는 스터디 그룹이나 모임이 활성화되어 있지만 홍대나 신촌 근처에는 많지 않다는 생각도 들었습니다. 예상외로 많은 분들이 관심을 보여 주셨고 첫 모임부터 성공적(!)이었다고 자평하고 있습니다. 🙂

이 모임은 번역서의 내용을 프리젠테이션으로 만들어 설명하고 자유스럽게 질문, 대답을 하는 형식을 가집니다. 전문 강사가 아니다 보니 어눌함이 많을텐데도 격려해 주시는 덕분에 아직까지 무사히 진행되고 있습니다.

스터디를 진행하다 보니 이런 저런 우여곡절도 많은 것 같습니다.  1회부터 4회까지는 홍대역 2번 출구 근처에 있는 토즈에서 진행했었습니다. 원래 주 활동 범위가 홍대 근처였는데 갑자기 직장을 삼성역 근처로 다니게 되었습니다. 그래서 4회 모임 부터는 삼성역에서 6시반 퇴근과 함께 지하철을 타고 간신히 모임에 참석하고 있습니다(다이어트가 절로 되는 듯 합니다). 보통 20명 이상 늘 참석하고 있습니다. 토즈에서 가장 큰 부스는 26명까지 수용이 가능한데 매번 no-show가 있는 바람에 다른 분이 도와 주시기도 하고 사비를 좀 대기도 했습니다. ㅎㅎ

그런데 다행히(!) 한빛미디어 출판사가 홍대역 인근으로 사옥을 이전하면서 스터디 그룹을 위한 강의장을 무료로 대여해 주시기로 했습니다. 지난 5회 모임에서 처음 방문한 한빛미디어 강의장은 정말 좋았습니다. 완벽에 가까운 마이크 음향, 깨끗한 책상, 고급 의자, 정수기, 화장실, 잘 마감된 강의장 실내, 뭐하나 흠잡을 데가 없었구요. 또 일부러 강의 시간에 맞추어 기다려 주시고 안내까지 해주셨습니다. 제 맥북이 강의장에 있는 HDMI 연결선을 잘 인식하지 못하자 뛰어가서(!) HDMI-썬더볼트 어댑터를 가져오신 송경석 팀장님의 민첩함에 한번 더 놀랬습니다. 🙂

강의장도 좁고 작지만 비용이 드는 토즈에서 보다 깨끗하고 무료로 맘 편히 사용할 수 있는 공간을 얻게되어 저는 물론 모임에 참여하시는 분들 모두 기뻐했습니다. 책을 읽고, 글을 옮기고, 이해한 것을 나누는 이 선순환이 오랫동안 지속되었으면 좋겠습니다. 다음 모임에는 파이썬 라이브러리를 활용한 머신러닝의 마지막 시간입니다. 이 책을 마치면 누군가 한 번 혹은 두 번쯤 새로운 주제에 대해 발표해 주시기를 기다리고 있습니다. 하지만 여의치 않으면 이전 강의를 재탕해 보려고 합니다. ㅎㅎ

오랜만에 직장을 다니니 몸과 마음(!)이 피곤하네요. 하지만 꿋꿋이 잘 버티고 있는 것은 지금 번역하고 있는 ‘Hands-On Machine Learning with Scikit-Learn and TensorFlow‘을 잘 마무리하고 이 선순환에 포함시키고 싶기 때문입니다.

이런 작은 모임이 여기 저기 우후죽순처럼 많이 생겼으면 좋겠습니다. 최근에는 좋은 책들과 블로그들이 많이 생기고 있습니다. 실로 놀랄만한 글과 자료들이 넘쳐납니다. 뜻이 맞는 몇 명만 모인다면 서로에게 배울 수 있는 크기는 몇 백명이 참석하는 컨퍼런스에 뒤지지 않는다고 생각합니다. 시작이 반입니다. 화이팅! 🙂

이 글은 한빛미디어의 ‘책 읽는 프로그래머’ 이벤트를 위한 후기입니다.

홍대 머신러닝 스터디의 자료는 슬라이드쉐어에 공개되어 있습니다. 1장2장3장4장5장

TensorFlow 1.3.0 Release

텐서플로 1.3.0 버전이 릴리즈되었습니다. 1.3.0 버전에 대한 자세한 내용은 릴리즈 노트를 참고해 주세요. 1.4.0 버전부터는 cuDNN 7를 사용해 패키징될 예정입니다. 텐서플로 1.3.0 버전은 이미 PyPI에 등록되어 있어 pip 명령으로 간단하게 설치할 수 있습니다.(tensorflow-gpu에는 macOS 버전이 없습니다)

$ pip install --upgrade tensorflow

$ pip install --upgrade tensorflow-gpu

scikit-learn 0.19 Release

파이썬의 대표적인 머신 러닝 라이브러리인 scikit-learn 0.19 버전이 릴리즈 되었습니다. 0.19 버전에는 여러가지 새로운 기능과 버그 수정들이 포함되었습니다. 대표적으로는 이상치 탐지를 위한 sklearn.neighbors.LocalOutlierFactor, 분위 값을 사용하는 sklearn.preprocessing.QuantileTransformer, 이진 분류기를 엮어 앙상블 시킬 수 있는 sklearn.multioutput.ClassifierChain,  교차 검증에서 훈련 세트와 테스트 세트의 점수를 모두 리턴해 주는 sklearn.model_selection.cross_validate가 추가되었습니다.

sklearn.decomposition.NMF의 solver 매개변수에 ‘mu'(Multiplicative Update)가 추가 되었고 sklearn.linear_model.LogisticRegression에 L1 규제를 사용한 SAGA 알고리즘의 구현인 ‘saga’ 옵션이 solver 매개변수에 추가되었습니다. 또 cross_val_score와 GridSearchCV, RandomizedSearchCV의 scoring 매개변수에 복수개의 스코어 함수를 지정할 수 있게 되었고 Pipeline 클래스에 memory 매개변수가 추가되어 그리드 서치 안에서 반복적으로 수행될 때 전처리 작업을 캐싱할 수 있게 되었습니다. 이 외에도 많은 버그가 수정되고 기능이 향상되었습니다. 자세한 내용은 릴리즈 노트를 참고하세요.

scikit-learn 0.19 버전은 pip 나 conda 를 이용하여 손쉽게 설치가 가능합니다.

$ conda install scikit-learn

$ pip install --upgrade scikit-learn

PyTorch 0.2.0 Release

파이토치PyTorch 0.2.0 버전이 드디어 릴리즈 되었습니다. 3개월이 넘게 걸렸지만 ICML 2017에 때를 맞추었네요.^^ 넘파이NumPy 스타일의 브로드캐스팅broadcasting, 분산처리, 강화된 배열 인덱싱, 2계 도함수 그래디언트second order gradient 등 많은 기능이 포함되었습니다. 추가된 기능에 대한 자세한 설명은 릴리즈 노트를 참고하세요. conda를 사용하면 비교적 편리하게 파이토치를 설치할 수 있습니다.

# Linux CUDA 7.5, macOS for Python 2.7/3.5/3.6
$ conda install pytorch torchvision -c soumith
# Linux CUDA 8.0
$ conda install pytorch torchvision cuda80 -c soumith