いくつかの機械学習の環境が知られていますが、今回はtensorflow https://www.tensorflow.org/ を使用することにします。
使用環境はUbuntuなので、 https://www.tensorflow.org/install/install_linux に従ってインストールを進めます。
開発機は以下の条件です。Ubuntu 18.04.1 LTS / Intel Core i7-6850K / 64GB memory / GeForce GTX 1080Ti 11GB
システムに入れてもいいのですが、virtualenvを用いてインストールすることにします。
python3.5のインストール
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3-pip python3.5-dev python-virtualenv
virtualenvの作成
$ mkdir -p ~/virtualenv/tensorflow
$ virtualenv -p python3.5 ~/virtualenv/tensorflow
$ source ~/virtualenv/tensorflow/bin/activate
プロンプトの左に(tensorflow)と出ている状態でインストールを進めます。
CUDA driverおよびCUDA Toolkitをインストールします。現在のバージョンは9.2ですが、9.0が必要です。 https://developer.nvidia.com/cuda-90-download-archive からインストールします。
$ sudo apt-get install build-essential
$ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run
$ sudo bash cuda_9.0.176_384.81_linux-run
$ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/1/cuda_9.0.176.1_linux-run
$ sudo bash cuda_9.0.176.1_linux-run
$ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/2/cuda_9.0.176.2_linux-run
$ sudo bash cuda_9.0.176.2_linux-run
$ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/3/cuda_9.0.176.3_linux-run
$ sudo bash cuda_9.0.176.3_linux-run
$ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/4/cuda_9.0.176.4_linux-run
$ sudo bash cuda_9.0.176.4_linux-run
~/.bashrcに以下の行がなければ追記しておきます。
export PATH=${PATH}:/usr/local/cuda/bin
/etc/ld.so.conf.d/cuda.confがなければ以下の内容で作成します。
/usr/local/cuda/lib64
/usr/local/cuda/extras/CUPTI/lib64/
ライブラリのキャッシュを更新しておきます。
$ sudo ldconfig
https://developer.nvidia.com/cudnnからダウンロードします。無料のユーザー登録が必要です。
適当な場所(ホームディレクトリなど)に展開したあと、cudaライブラリに一緒に入れておきます。
$ tar xvf cudnn-9.0-linux-x64-v7.2.1.38.tgz
$ sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
virtualenv仮想環境にtensorflowをインストールします。
(tensorflow)$ pip install -U tensorflow-gpu
インストールできたか確認します。ライブラリが足りてないとエラーになります。
(tensorflow)$ python -c "import tensorflow as tf; print(tf.__version__)"
1.10.1
オプションパッケージのTensorRTをインストールします。あれば高速化されるようです。 https://developer.nvidia.com/tensorrt からダウンロードします。
$ tar xvf TensorRT-4.0.1.6.Ubuntu-16.04.4.x86_64-gnu.cuda-9.0.cudnn7.1.tar.gz
$ ls TensorRT-4.0.1.6
bin data doc graphsurgeon include lib python samples targets TensorRT-Release-Notes.pdf uff
ライブラリのパスを通します。 ~/.bashrcに以下の行がなければ追記しておきます。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-4.0.1.6/lib
ライブラリのキャッシュを更新しておきます。
$ source ~/.bashrc
$ sudo ldconfig
pythonパッケージをインストールします。
$ source ~/virtualenv/tensorflow/bin/activate
(tensorflow)$ cd TensorRT-4.0.1.6/python
(tensorflow)$ pip3 install tensorrt-4.0.1.6-cp35-cp35m-linux_x86_64.whl
(tensorflow)$ cd ../uff
(tensorflow)$ pip3 install uff-0.4.0-py2.py3-none-any.whl
(tensorflow)$ cd ../graphsurgeon
(tensorflow)$ pip3 install graphsurgeon-0.2.0-py2.py3-none-any.whl
インストールできたら、正常に動くかmnistでテストします。
#!/usr/bin/env python3
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
mnist.pyとして保存し、実行します。
(tensorflow)$ ./mnist.py
Epoch 1/5
2018-08-27 07:07:01.266395: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-08-27 07:07:01.396855: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1405] Found device 0 with properties:
name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.6575
pciBusID: 0000:02:00.0
totalMemory: 10.91GiB freeMemory: 10.02GiB
2018-08-27 07:07:01.396884: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1484] Adding visible gpu devices: 0
2018-08-27 07:07:01.589693: I tensorflow/core/common_runtime/gpu/gpu_device.cc:965] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-08-27 07:07:01.589729: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0
2018-08-27 07:07:01.589734: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] 0: N
2018-08-27 07:07:01.589923: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1097] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 9690 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:02:00.0, compute capability: 6.1)
60000/60000 [==============================] - 8s 135us/step - loss: 0.2180 - acc: 0.9357
Epoch 2/5
60000/60000 [==============================] - 7s 115us/step - loss: 0.0974 - acc: 0.9698
Epoch 3/5
60000/60000 [==============================] - 7s 115us/step - loss: 0.0695 - acc: 0.9789
Epoch 4/5
60000/60000 [==============================] - 7s 116us/step - loss: 0.0535 - acc: 0.9827
Epoch 5/5
60000/60000 [==============================] - 7s 115us/step - loss: 0.0428 - acc: 0.9859
10000/10000 [==============================] - 0s 45us/step