Keras の環境構築をした その2
ArchLinux で Keras をやるための環境構築をして、ちょっと使ってみる。
Kerasの環境構築をしたの続きである。
前回の記事では、TensorFlow, KerasをDockerで動かしてみた。 NVIDIAのGPUを使いたかったので、NVIDIA Dockerというものを使った。
細かい環境は次の通りだった。
OS:
% uname -a
Linux fg-arch 4.9.11-1-ARCH #1 SMP PREEMPT Sun Feb 19 13:45:52 UTC 2017 x86_64 GNU/Linux
GPU:
vv% lspci -v | grep GeForce -A3
02:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1) (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. Device 85c5
Flags: bus master, fast devsel, latency 0, IRQ 42
Memory at f6000000 (32-bit, non-prefetchable) [size=16M]
すぐに使えるDockerイメージの作成
前回の記事でKerasは使えるようになった。 しかし、毎回Kerasのインストールをしなければならず面倒くさい。
また今回、NVIDIA搭載マシンにはSSHで繋ぐので、 プロットは画像で出力してデスクトップPCから見たい。 このためにはマウントボリュームが有用である。 マウントボリュームを使うと、ホスト側のディレクトリを Docker上のマシンからマウントできる。 すなわち、Docker上のPythonで生成する画像データをマウントしたディレクトリへ出力すれば、ホスト側でもその画像を参照できる。
ということで、すぐに使える状態のDockerイメージを作成しておくことにする。
イメージの名前は keras-tf
とした。
$ mkdir keras-tf
$ cd keras-tf
Dockerファイルには下記のように記述する。
$ cat <<EOF > Dockerfile
FROM gcr.io/tensorflow/tensorflow:latest-gpu
RUN apt-get update
RUN apt-get install -y graphviz
RUN pip install keras
RUN pip install pydot
VOLUME ["/mnt"]
EOF
イメージの生成は次のようにする。
$ docker build -t keras-tf .
すると、なんかいろいろ処理が走るが、 問題が無ければ次のようにイメージが確認できるはずである。
$ docker images | grep keras-tf
keras-tf latest 227585b4d6fc 7 minutes ago 2.76 GB
Docker イメージの作り直し
Docker イメージをあとで修正したい場合が必ずあるだろう。 そのときには一旦イメージを削除してから作り直す。
$ docker rmi keras-tf
$ docker build -t keras-tf .
起動スクリプトの作成
Dockerの起動
NVIDIA SMIとかの起動も面倒なので、適当にスクリプトにまとめた。 たぶんまだ直すと思う。
$ cat <<EOF > start.sh
if [ `ps ax | grep nvidia-docker-plugin | grep -v grep | wc -l` == 0 ]; then
sudo -b nohup nvidia-docker-plugin > /tmp/nvidia-docker.log
fi
nvidia-docker run --rm nvidia/cuda nvidia-smi
nvidia-docker run -it --rm -v /ローカルの/共有したい/ディレクトリ:/mnt keras-tf bash
EOF
最後に実行してみる。
$ sh start.sh
Fri Jul 28 12:35:49 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 378.13 Driver Version: 378.13 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 106... Off | 0000:02:00.0 Off | N/A |
| 2% 50C P8 10W / 120W | 8MiB / 6072MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
root@83948db74ee2:/notebooks# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
>>>
これでKerasを使うまでの手続きのストレスが大幅に減った。
線形回帰
せっかくなので線形回帰をやってみる。 と言いたいところだが、次の記事 Kerasではじめての線形回帰に続く。