GoogleからDeepLearningなどを含んだ機械学習ライブラリが公開されたので、早速触ってみました。
http://japanese.engadget.com/2015/11/09/google-tensorflow/
実施した環境
ubuntu 14.04
GeForce GTX 580
CUDA 7.0
Cudaは、こちらの手順でインストール済み
本体のインストール
pipでインストールするだけです。
pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
インストール確認
ちゃんとインストールできているか確認します。
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:77] LD_LIBRARY_PATH: /usr/local/cuda-7.0/lib64:
I tensorflow/stream_executor/cuda/cuda_dnn.cc:1062] Unable to load cuDNN DSO.
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 8
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:888] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:88] Found device 0 with properties:
name: GeForce GTX 580
major: 2 minor: 0 memoryClockRate (GHz) 1.544
pciBusID 0000:01:00.0
Total memory: 1.50GiB
Free memory: 1023.72MiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:112] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:122] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:611] Ignoring gpu device (device: 0, name: GeForce GTX 580, pci bus id: 0000:01:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.5.
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>> exit()
なんか色々言われてますが、一応動くようです。
ここらへんは、GPUサポートの影響みたいです。
Cuda サポートについて
GPUで演算を行うためには、対応GPUの搭載と、Cuda Toolkit 7.0とCUDNN 6.5 V2のインストールが必要です。
chainerインストールの時にCUDAはインストールしていたので、CUDNNだけかと思いきや、手持ちのGPUが対応していませんでした。公式には、
TensorFlow GPU support requires having a GPU card with NVidia Compute Capability >= 3.5. Supported cards include but are not limited to:
と書かれております。Compute Capabilityとはなんぞや?ということは、NVIDIAの質問回答に書かれていました。
Q: Compute Capabilityとは何ですか?
また、GPUのCompute Capabilityの一覧はありますか?
A: まず、Compute Capabilityとは、GPUのアーキテクチャのバージョンとでもいうべきものです。
たとえば、Compute capability 2.0, 2.1はFermi、3.0, 3.5はKepler、5.0はMaxwellとなります。
持っているGeForce GTX 580では、このバージョンが2.0なので, TensorFlowではGPU演算に使えませんでした。したがって、今回はCPUのみでMNISTを動かします。
MNISTを動かす
MNISTの説明については、公式にて、MNISTを知ってる人向けの説明と、知らない人用の説明の2つがあったので、参考にしてください。簡単に言うと、手書き数字の認識です。
ソースをとってきて、MNISTのサンプルを動かします。
MNISTサンプルを動かす手順はこちらです。
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
python tensorflow/models/image/mnist/convolutional.py
これを行うと、MNISTの手書きの数字ファイルを取得し、畳み込みNNによる学習が始まります。学習の状況が都度流れてくるので、眺めます。
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8
Initialized!
Epoch 0.00
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Epoch 0.12
Minibatch loss: 3.285, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.0%
Epoch 0.23
Minibatch loss: 3.473, learning rate: 0.010000
Minibatch error: 10.9%
Validation error: 3.7%
Epoch 0.35
Minibatch loss: 3.221, learning rate: 0.010000
Minibatch error: 4.7%
Validation error: 3.2%
たったこれだけでできてしまったので、拍子抜けしました。
まあCUDAが鬼門なので、次はGPUで動かすようにしたいと思います。