태그 보관물: TensorFlow

Caffe2: Mobile first DL Framework

스크린샷 2017-04-19 오후 4.57.55

페이스북이 딥러닝 프레임워크 카페(Caffe)의 새로운 포크인 카페2(Caffe2)를 오늘 공개하였습니다. 카페2는 페이스북과 NVidia를 비롯해 많은 회사들과 협력한 결과라고 합니다. 특별히 NVidia에서도 블로그를 통해 카페2 소식을 알렸습니다. 카페를 개발한 양칭 지아Yangqing Jia가 버클리를 나와서 구글 브레인으로 갔었는데 어느새 페이스북으로 옮겼군요. 이미 작년에 카페2의 개발 소식이 흘러나왔던 것 같습니다. 카페2는 파이토치와는 다르게 모바일과 대용량 스케일의 상용 제품을 위한 프레임워크로 촛점을 맞추고 있다고 합니다. 그렇다고 파이토치와 명확하게 선을 그을 수는 없지만, 파이토치 보다는 더 성능과 다양한 디바이스 포팅에 중점을 두고 있습니다. 파이토치는 연구자들이 다양한 네트워크를 실험할 수 있는 높은 자유도가 장점입니다. 하지만 카페2와 파이토치의 저수준 라이브러리들은 앞으로 계속 머지되거나 아이디어를 공유할 것 같습니다. 바이두가 텐서플로우의 패치를 보냈는데 구글이 이를 거부했다는 소식에서 부터 구글이 사용하는 텐서플로우와 오픈소스 텐서플로우에는 차이가 있다는 것이 카페2와 함께 레딧해커뉴스에서 회자되고 있습니다.

현재 카페2가 안정화된 상태는 아닙니다. 양칭에 의하면 페이스북이 먼저 개밥먹기를 하고 있답니다. 파이썬 바이너리 패키지가 준비되어 있지 않아 설치도 번거롭습니다. 하지만 카페의 Model zoo를 이용할 수 있다는 것과 모바일 퍼스트 정책은 많은 사람들의 관심을 끌것 같습니다. OpenCL와 iOS의 Metal을 지원하려고 준비 중에 있다고 합니다.

누가 Caffe가 죽었다고 했던가요? 🙂

(업데이트) 구글 브레인의 리더 Rajat Monga 가 바로 댓글로 의견을 냈네요. 구글이 텐서플로우에 대해 감추고 있는 것은 없답니다.

또 페이스북에서 F8 행상 이후에 몇몇 대학 교수를 초빙해서 카페2에 대한 워크샵을 열 예정이라고 밝혔습니다. 이미 많은 대학의 딥러닝 커리큘럼이 텐서플로우로 가고 있어서 더 늦기전에 변화가 필요하다고 생각했을 것 같습니다.

TensorFlow 1.1.0 RC2 and Imperative Style

텐서플로우 1.1.0 버전의 RC2 가 릴리즈 되었습니다. 1.1.0 RC2 의 CPU, GPU 버전이 PYPI에 등록되어 있으므로 pip 명령으로 간단하게 설치할 수 있습니다. 텐서플로우 바이너리는 64bit 용이며 윈도우즈(파이썬 3.5)를 제외하고는 대부분의 파이썬 버전을 지원합니다. 만약 안정적인 버전의 텐서플로우를 설치하시려면 tensorflow==1.0.1 와 같이 텐서플로우 패키지 이름 뒤에 버전을 명시하면 됩니다.

$ pip install --upgrade tensorflow

$ pip install --upgrade tensorflow-gpu

텐서플로우 1.1.0 버전의 릴리즈 노트에는 없지만 contrib 폴더에 텐서플로우의 명령형(imperative) 스타일을 지원하는 라이브러리가 추가되어 있습니다. 요즘 많은 관심을 끌고 있는 파이토치(PyTorch)나 MXNet 등을 의식한 것일까요? 선언적(declarative)인 계산 그래프의 생성이 수면 아래로 내려가 샘플 코드를 보면 깔끔해진 것을 볼 수 있습니다.

import tensorflow.contrib.imperative as tf
x = tf.Variable(np.random.normal(size=[2, 2]), dtype=tf.float32)
y = tf.constant([[1, 2.]])
z = tf.matmul(y, x)
print(z)
array([[-1.231673  ,  3.14744973]], dtype=float32)

NumPy 사용하듯 텐서 계산을 할 수 있고 파이썬의 while, for, if 문을 사용해 계산 그래프를 만들 수 있습니다. 단점은 기본 텐서플로우보다 속도가 느려진다는 것과 모델을 훈련 시킬때 파이썬 반복문에 의해 그래프가 계속 자라나지 않도록 tf.step() 을 사용해야 합니다. 조금 더 자세한 예제는 깃허브를 참고하세요.

tf-seq2seq: open-source seq2seq framework in TF

68747470733a2f2f332e62702e626c6f6773706f742e636f6d2f2d3350626a5f64767430566f2f562d71652d4e6c365035492f41414141414141414251632f7a305f365774565774764152744d6b3069395f41744c6579794779563641

구글에서 이번주 신경망 기계번역, 즉 NMTneural machine translation를 위한 seq2seq 모델을 오픈소스로 공개하였습니다. 이 소스는 텐서플로우로 작성되어 있으며 깃허브에 공개되어 있습니다. 이 소스는 같이 공개된 ‘Massive Exploration of Neural Machine Translation Architectures‘ 페이퍼에서 사용된 코드입니다. 이 페이퍼에서 25만 GPU 시간을 들여 다양한 하이퍼파라미터 튜닝을 한 결과를 공유하고 있습니다. 어쩌면 많은 애플리케이션들이 연이어 나오는 뛰어난 알고리즘보다 이런 실험 결과를 더 목말라하고 있을지 모르겠습니다. 깃허브에 있는 tf-seq2seq 코드는 마치 일반 애플리케이션처럼 다운로드 받아 yaml로 모델을 정의하고 학습시킬 수 있습니다. 딥러닝 라이브러리들이 설정 방식에서 코딩 방식으로 빠르게 전환되더니 도메인 특화된 모델은 다시 패키지화될 수 있는것 아닌가 예상해 봅니다. 자세한 사용법은 도큐먼트를 참고하세요. 비록 한글 데이터는 없지만 구글의 선빵은 놀랍습니다. 🙂

Sonnet: DeepMind’s New TF Wrapper

sonnet-logo-blogpost-170330-r01-width-1500

딥마인드가 새로운 텐서플로우 래퍼 라이브러리 소네트Sonnet오픈소스로 공개했습니다. 이로써 텐서플로우 래퍼 라이브러리가 또 하나 늘었네요. 소네트는 객체지향(OOP) 스타일을 따르고 있어 파이토치와 같이 개발의 편의와 재미를 줄 수 있을 것 같습니다. 소네트의 핵심은 텐서플로우의 그래프 정의를 파이썬 오브젝트화시킨 모듈입니다. 소네트의 모듈을 이용해 파이썬 오브젝트를 만들어 계산 그래프 정의 부분을 객체화시킨 효과를 가집니다. 그리고 자신만의 모듈을 정의해서 사용할 수도 있습니다. 자세한 내막은 다르겠으나 겉 모양새는 씨아노의 래퍼인 라자냐lasagne와 흡사해 보입니다.

아직은 초기 버전이라 직접 컴파일하여 설치해야 하고 맥/리눅스의 파이썬 2.7 만 지원합니다(구글 내부에서는 아직 파이썬 2.7의 레거시가 상당하다는 소문입니다). 소네트도 배워야할지 아직 잘 모르겠습니다. 딥마인드가 단발성의 릴리즈는 아니라고 하는 것을 보아서는 제대로된 릴리즈를 계획하고 있을 것 같습니다. pip 설치나 파이썬 3.5, 윈도우즈 지원등이 된다면 케라스Keras와 자주 비교될 것 같습니다. 가장 인기있는 텐서플로우 래퍼 라이브러리인 케라스를 만든 구글의 프랑소와 숄레는 소네트에 대해 아직 아무런 반응을 보이진 않고 있습니다. 🙂

TensorFlow 1.1.0 RC1

텐서플로우 1.1.0 RC1 버전이 릴리즈 되었습니다. 1.1.0 RC1 의 CPU, GPU 버전이 이미 PYPI에 등록되어 있으므로 pip 명령으로 간단하게 설치할 수 있습니다. 아마 근시일내에 1.1.0 정식 버전이 출시될 것 같습니다.

$ pip install --upgrade tensorflow

$ pip install --upgrade tensorflow-gpu

TensorFlow 1.1.0 RC0

텐서플로우 1.1.0 RC0 버전이 릴리즈 되었습니다. 이전에 예고되었던 대로 몇가지 주요한 변화가 반영되었습니다. tensorflow.contrib.learn.Estimator 가 tensorflow.estimator.Estimator로 옮겨졌습니다. 그리고 Keras 2 가 tensorflow.contrib 아래에 들어왔습니다. 앞으로는 맥 GPU 용 바이너리는 릴리즈하지 않는다고 합니다(어쩌면 맥에 Nvidia GPU가 다시 탑재될 가능성은 전혀 없다는 반증일지 모르겠습니다). Nvidia GPU가 있는 맥 사용자는 직접 빌드를 해서 설치해야 할 것 같습니다. 1.1.0 RC0은 PYPI에 등록되어 있으므로 pip 명령으로 간단하게 설치할 수 있습니다. 다만 아직 GPU 버전은 준비되어 있지 않습니다.

$ pip install --upgrade tensorflow

TensorFlow 1.0.1 Release

텐서플로우 1.0.1 버전이 릴리즈 되었습니다. 마이너한 릴리즈로 몇몇 버그가 수정되었습니다. 맥, 리눅스, 윈도우 버전 모두 PyPI 에서 손쉽게 설치할 수 있습니다.

  • 리눅스: 파이썬 2.7, 3.3, 3.4, 3.5, 3.6
  • 맥: 파이썬 2.7, 3.3, 3.4, 3.5
  • 윈도우: 파이썬 3.5
##### CPU 버전
$ sudo pip install --upgrade tensorflow

##### GPU 버전
$ sudo pip install --upgrade tensorflow_gpu

TensorFlow v1.0.0 Release

텐서플로우 Dev Summit 에 맞추어 1.0 버전이 릴리즈되었습니다. 특별히 1.0 버전은 리서치 블로그에도 소개가 되었습니다. 텐서플로우 홈페이지에는 퍼포먼스 가이드 페이지가 새로 생성이 되었습니다.

맥, 리눅스, 윈도우 버전 모두 PyPI 에서 손쉽게 설치할 수 있습니다.(사실 코드는 며칠전에 이미 프리징된 것 같습니다. 릴리즈와 패키지 등록까지 서밋과 때를 맞추었네요:)

##### CPU 버전
$ sudo pip install --upgrade tensorflow

##### GPU 버전
$ sudo pip install --upgrade tensorflow_gpu

Chainer, MXNet, CNTK, TF benchmarking

체이너(Chainer)는 일본에서 만들어져 널리 사용되는 딥러닝 프레임워크입니다. 지난 1월 샌프란시스코에서 열린 딥러닝 서밋을 통해 발표한 체이너의 분산버전의 체이너(Chainer Multi-Node)를 이용해 다른 프레임워크와 비교를 한 결과가 체이너 블로그에 올려졌습니다. 블로그에서도 언급했지만 이는 완벽하게 공정한 벤치마킹이 아닐 수 있습니다. 비교적 체이너가 실험 환경에 최적화되어 있고 다른 프레임워크는 그러지 못했을 수도 있습니다. 그렇더라도 GPU가 증가함에 따라 거의 선형적으로 퍼포먼스가 증가하는 그래프는 대단한 것 같습니다. 이 벤치마킹의 결과는 텐서플로우가 CNTK나 MXNet 과 비교해도 많이 성능이 뒤쳐진 것을 보여 줍니다.

dlsummit_06_framework-samples-per-second

체이너 멀티 노드 프레임워크는 Nvidia 의 니켈(NCCL) 라이브러리를 사용하여 GPU간 데이터 전송을 직접 처리합니다. MXNet과 CNTK가 단일 서버(4 코어까지는 단일 서버입니다)에서 조금 더 높은 성능을 내는 이유는 C++ 구현이기 때문이고 체이너는 파이썬 구현이라는 차이 때문으로 보고 있습니다. CNTK는 체이너 멀티노드처럼 니켈 라이브러리를 사용하지만 서버가 늘어남에 따라 MXNet과 성능 차이가 엇갈리고 있습니다. 텐서플로우가 느린 주된 요인으로는 분산 모드에서 파라미터 서버와 워커 서버간의 gRPC 통신의 오버헤드로 추측하고 있습니다. 스탠드얼론(standalone)일 경우엔 이와 다른 결과가 나올 수 있습니다. 이 벤치마킹에는 분산 기능이 내장되지 않은 씨아노(Theano)나 토치(Torch)는 포함되지 않았습니다.

최근에 나온 또 다른 벤치바킹 자료들에서도 텐서플로우의 성능은 그다지 뛰어나게 평가되지는 못하고 있습니다. 하나는 DyNet 의 페이퍼 ‘DyNet: The Dynamic Neural Network Toolkit‘ 이고 또 다른 하나는 ‘Benchmarking State-of-the-Art Deep Learning Software Tools‘ 입니다. 파이토치를 포함한 더 광범위한 벤치마킹이 진행되길 기대해 봅니다.

TensorFlow 1.0 RC2 Release & Keras 2

텐서플로우 1.0 RC2 버전이 릴리즈되었습니다. 다음주 텐서플로우 Dev Summit 위해 달리는 것 같습니다. 그리고 케라스(Keras)의 버전 2가 준비되고 있습니다. 케라스도 버전 2에서 API 변화가 있다고 합니다. 버전 1의 API 를 그대로 쓸 수 있지만 deprecated 경고가 뜨니 바꾸긴 해야할 것 같습니다. 그리고 마이크로 소프트의 CNTK도 케라스의 백엔드로 들어올 예정입니다.

또 프랑소와 숄레가 직접 예고한 대로 케라스가 텐서플로우 코드 베이스로 들어 갑니다. 다만 기존 케라스 깃허브는 그대로 유지되며 이로 인해 미치는 영향은 없을 것이라고 합니다. 텐서플로우로 들어간 케라스는 처음에는 tf.contrib 에 있다가 tf.keras 로 바뀔 것이라 합니다. 프랑소와가 케라스 코드를 4번째 재작성하고 있다는데 몇주만에 끝낼 모양입니다. @.@

텐서플로우 1.0 RC2 버전은 pip에 패키지 명을 직접 입력하여 설치할 수 있습니다.

##### 파이썬 2.7
# Ubuntu/Linux 64-bit, CPU only, Python 2.7
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp27-none-linux_x86_64.whl

# Mac OS X, CPU only, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0rc2-py2-none-any.whl

# Mac OS X, GPU enabled, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-1.0.0rc2-py2-none-any.whl

##### 파이썬 3.x
# Ubuntu/Linux 64-bit, CPU only, Python 3.3
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp33-cp33m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.3
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp33-cp33m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.4
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.5
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.6
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp36-cp36m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.6
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp36-cp36m-linux_x86_64.whl

# Mac OS X, CPU only, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0rc2-py3-none-any.whl

# Mac OS X, GPU enabled, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-1.0.0rc2-py3-none-any.whl

#### 설치
$ sudo pip install --upgrade $TF_BINARY_URL

윈도우즈 CPU:

C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.0.0rc2-cp35-cp35m-win_amd64.whl

윈도우즈 GPU:

C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.0.0rc2-cp35-cp35m-win_amd64.whl