카테고리 보관물: TensorFlow

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

YouTube AudioSet

youtube-audioset

유투브에서 YouTube-8M, YouTube-BB에 이어 또 새로운 데이터셋을 공개하였습니다. 이번 데이터셋은 오디오 데이터인 YouTube AudioSet 입니다. 유투브 동영상에서 추출한 10초 가량의 오디오에 사람이 직접 레이블을 붙였습니다. 무려 2,084,320개 데이터에 632개의 클래스가 있습니다. 클래스 중 명확하지 105개의 클래스는 blacklist 로 구분되어 있어 훈련에 사용되는 레이블은 527개입니다. 오디오 데이터를 웹에서 직접 확인해 볼 수 있으며 다운로드 받을 수도 있습니다. 샘플링 오디오에서 추출한 특성과 텐서플로우 포맷에 대한 자세한 내용은 다운로드 페이지를 확인하세요. 클래스 레이블의 전체 리스트는 깃허브에서 확인할 수 있습니다. 이 데이터셋에 관한 페이퍼도 공개되었습니다. 아마 공개된 오디오 데이터셋으로는 최대일 것 같습니다. Urban Sound 데이터셋과 비교가 안됩니다. AudioSet이 오디오 데이터셋의 표준으로 자리잡지 않을까 예상해 봅니다.

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

TensorFlow Fold: DL With Dynamic Batching

image00

최근에 나온 동적인 계산 그래프(dynamic computation graph)를 만들어주는 DyNet이나 PyTorch와 같은 프레임워크에 대응하는 텐서플로우 폴드(TensorFlow Fold)가 오늘 구글 리서치 블로그를 통해 공개되었습니다. 텐서플로우 폴드는 텐서플로우에 동적인 배치(dynamic batching) 기능을 제공하기 위한 라이브러리입니다. 이미지에서 볼 수 있듯이 자연어 처리 등의 분야에서 서로 다른 길이의 배치 사이즈를 처리하기 위해 고안되었습니다. 텐서플로우 폴드의 소스 코드는 텐서플로우 레파지토리와 구분되어 있습니다.

그런데 레딧의 포스트를 보면 폴드에 대해 그다지 호의적이지 않은 것 같습니다. 다이넷이나 파이토치와 같은 동적 그래프 스타일에 대한 궁여지책 같아 보이고(텐서플로우 자체를 동적으로 만드는 것은 어렵다는 의견을 어디선가 읽은 것 같습니다), 특히 리서치 블로그에 다른 구현보다 10배에서 100배 빠르다고 언급한 것이 지적을 받고 있습니다. 텐서플로우 폴드(동적 배치)를 텐서플로우(정적 그래프)와 성능을 비교하는 것은 적절치 않다는 의견입니다. 그렇다고 파이토치와 같은 라이브러리와 비교하는 것도 곤란한 것 같습니다. 텐서플로우는 그래프 생성 속도가 느리다고 하니 파이토치 등과 비교해서 이득을 볼 게 없거든요. 🙂

현재는 리눅스용 바이너리만 제공하고 있습니다. 그리고 텐서플로우 폴드는 텐서플로우 1.0 이전 버전과는 호환되지 않습니다(API 변경 때문에). 따라서 폴드를 사용하려면 텐서플로우 1.0 rc0 이나 rc1 버전을 설치해야 합니다.

### python 2.7
pip install https://storage.googleapis.com/tensorflow_fold/tensorflow_fold-0.0.1-cp27-none-linux_x86_64.whl

### python 3
pip install https://storage.googleapis.com/tensorflow_fold/tensorflow_fold-0.0.1-py3-none-linux_x86_64.whl

TensorFlow Dev Summit 2017

tensorflow_devsummit-email-001

텐서플로우 Dev Summit이 다음 주로 다가 왔습니다. 전체 아젠다를 보면 텐서플로우 컴파일 XLA, 케라스(Kears), 분산 처리, 음악/미술에 접목 등 다양한 주제에 대해서 발표가 있을 예정입니다. 15일 오전9:30 분부터 열리며 우리 시각으로는 16일 오전 2시 30분 부터입니다. 아쉽게도 국내 구글 디벨로퍼 그룹(GDG)에서는 라이브 스트림 이벤트가 열리지는 않습니다만, 집에서 온라인으로 생중계를 볼 수 있고 다음날 녹화된 것을 볼 수도 있습니다. 🙂

(업데이트) GDG 서울에서 한주 뒤인 22일에 Dev Summit 의 내용을 정리해서 소개할 예정이라고 합니다. 섭외된 강사 분들이 Dev Summit 의 내용을 듣고 재 전달하는 방식이라 기대가 많이 됩니다. 자세한 소식이 생기면 다시 공유하겠습니다.

(2017.02.14) 22일에 열리는 GDG 서울의 텐서플로우 Dev Summit 참가 신청이 시작되었습니다. 조기 마감이 예상되니 관심있다면 서둘러야 할 것 같습니다.

Wasserstein GAN [1701.07875]

wgan

아마 지난 주에 가장 많이 회자된 페이퍼 중 하나가 페이스북 AI 팀에서 내놓은 Wasserstein GAN(WGAN)일 것 같습니다. 이 페이퍼에 대한 레딧의 포스팅 열기를 봐서는 GAN에 관심있다면 꼭 살펴봐야할 것 같습니다. 주요한 요점은 GAN 의 Jensen-Shannon 발산을 Wasserstein 거리로 바꿈으로 해서 조금 더 구현이 간소화되었다고 합니다. 페이퍼의 그림을 보면 왼쪽 WGAN으로 만든 샘플은 배치 정규화 등을 하지 않아도 좋은 품질의 이미지를 만들어 내었습니다. WGAN의 구현은 파이토치케라스 버전으로 공개되었습니다. 파이토치 버전은 페이스북의 팀에서 직접 만든 것으로 앞으로 계속 파이토치 코드로 페이퍼를 낼지 기대가 됩니다.

(업데이트) 이 페이퍼를 요약한 드롭박스 문서와 쿠오라에서 이안 굿펠로우의 답변도 함께 참고하세요.

(2017.02.14) WGAN의 텐서플로우 구현이 공개되었습니다.

TensorFlow 1.0 RC1 & Serving 0.5 Release

텐서플로우 1.0 RC1서빙 0.5 버전이 릴리즈되었습니다. 이 속도라면 다음주 텐서플로우 Dev Summit 에 맞추어 1.0 버전 정식 릴리즈를 기대해봐도 좋을 것 같습니다. 텐서플로우 1.0 RC1 버전은 RC0 처럼 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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-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.0rc1-cp35-cp35m-win_amd64.whl

윈도우즈 GPU:

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