Deep Learning環境はKeras + Docker + Jupyter Notebook + GPUがいいカンジ

はじめに

  • ポチポチKeras動かすのにどのような環境がいいのか考えてみました
  • Keras + Docker + Jupyter Notebook + GPUの環境構築作業ログを紹介します

Keras

GitHub - fchollet/keras: Deep Learning library for Python. Convnets, recurrent neural networks, and more. Runs on Theano or TensorFlow.

  • わかりやすいインターフェースがかなり好き

Docker

  • TensorFlowで学ぶディープラーニング入門~畳み込みニューラルネットワーク徹底解説 を参考にしました
    • この本ではDockerを使用してます
    • 当初はvirtualenv使用して環境作る予定だったので、勉強になりました
  • 環境の移植性いいね
  • GPU使用できるのいいね

Jupyter Notebook

  • 言わずもがな

GPU

  • 速いは正義

所感

  • GCPのDatalabでBigQuery, GCS, 分散TensorFlow使用できるようになると最高
  • AWSでもボタンポチで環境構築できるようになって欲しい

Keras + Docker + Jupyter Notebook + GPUの環境構築

前提

GPUでTensorFlowを動かす - もょもとの技術ノート

  • GPU環境 + NVIDIAまわりのもろもろがインストールされていること
  • GPUでTensorFlowが稼働すること

NVIDIAドライバ入れ直す

上記ではNVIDIAドライバを手動でインストールしましたが、バージョンの相性もあり(またこれか)、apt-getでインストールし直しました。ところがNVIDIAドライバをインストールし直すとOSが起動しなくなったので、結局OSから再インストールしました。

$ sudo add-apt-repository ppa:graphics-drivers/ppa 
$ sudo apt-cache search nvidia-\d+

nvidia-352 - Transitional package for nvidia-361
mate-sensors-applet-nvidia-dbg - Display readings from hardware sensors in your MATE panel (NVIDIA, dbg package)
nvidia-304 - NVIDIA legacy binary driver - version 304.132
nvidia-304-updates - Transitional package for nvidia-304
nvidia-340 - NVIDIA binary driver - version 340.98
nvidia-355 - NVIDIA binary driver - version 355.11
nvidia-358 - NVIDIA binary driver - version 358.16
nvidia-361 - NVIDIA binary driver - version 361.45.18
nvidia-364 - NVIDIA binary driver - version 364.19
nvidia-367 - NVIDIA binary driver - version 367.44
nvidia-370 - NVIDIA binary driver - version 370.28

$ sudo apt-get install nvidia-370

Docker

docs.docker.com

  • 公式サイト通りに実施
    • 全く躓かなかった
    • Ubuntu 16.04 (LTS)を使用

nvidia-docker

github.com

  • DockerからGPU操作できるようにこれも導入
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0-rc.3/nvidia-docker_1.0.0.rc.3-1_amd64.deb
$ sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

# Test nvidia-smi
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi

注意

  • 今回はDockerグループ作成しなかったので、docker, nvidia-dockerコマンドのまえにすべてsudoつけました

ファイアウォール開放

$ sudo ufw enable
$ sudo ufw allow 8888
$ sudo ufw status
$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
8888                       ALLOW       Anywhere                  
8888 (v6)                  ALLOW       Anywhere (v6)     

Docker起動

$ sudo nvidia-docker run -m 10g -it -p 8888:8888 gcr.io/tensorflow/tensorflow:0.10.0-gpu
  • 0.11はKerasとの相性が悪かったため、0.10を使用
  • out of memoryエラー出るので、 -m で多めにメモリ確保
    • 2GBあれば十分かな
$ sudo docker stats
CONTAINER           CPU %               MEM USAGE / LIMIT    MEM %               NET I/O               BLOCK I/O           PIDS
8661fc7f4cea        1.42%               1.345 GiB / 10 GiB   13.45%              11.97 MB / 599.6 kB   0 B / 26.95 MB      44

MNISTサンプルコード動かす

CPU使用時

  • 10分ちょっと f:id:moyomot:20161016221353p:plain

GPU使用時

  • 1分弱
  • いいかんじ! f:id:moyomot:20161016221101p:plain

お世話になったサイト

ubuntu14.04にnvidia-dockerをインストールする - Qiita

今回やってないこと

  • Dockerイメージの作成
    • Docker再起動するとKeras消えちゃうよ
  • データボリュームを接続
    • Docker再起動すると書いたコード消えちゃうよ
    • -vオプションつければOK