コーヒーおかわり

データサイエンティストを目指す大学院生の日記。

Proxyの影響下のUbuntu 18.04でJupyter Notebook with Keras on TensorFlow on Docker

就活が終わってまた研究を再開した。

いままで、研究用のサーバにCentOS7を使っていたが、研究でDeep Learningを使うことにしたので、NVIDIAのドライバが簡単にインストールできるUbuntu 18.04にOSを変えた。

Dockerfileを訂正したものを下記のリンクにのせました

20180804追記

qiita.com

NVIDIA driverのインストール

下記のコマンドで簡単にNVIDIAGPUを扱うことのできるドライバをインストールできる。

$ sudo ubuntu-drivers autoinstall

ここまでは簡単だった。

しかし、2018/07時点ではまだNVIDIAのCUDAがUbuntu 18.04に対応しておらず、 強引な方法しかなさそうだった。

qiita.com

代替手段: NVIDIA Docker

簡単で、安心して利用できる方法がどこかにないか... どっかにないか、どっか、Docker... ということで、NVIDIA Dockerを利用することにしたw NVIDIA DockerはDockerのラッパーで、DockerコンテナからGPUを扱うことのできる優れものである。詳しくは下記のリンクを参照してください。

NVIDIA Container Runtime for Docker github.com

DockerコンテナのProxyの問題を回避する策: Docker Hub

これでうまくいくように思えたが、私の環境はProxy下であり、Docker自体は使える(docker pullはできる)が、Dockerコンテナの中から外部に通信ができず、docker build ができなかった。色々試したがどれもうまくいかなかった。

しょうがないのでDocker Hubにdocker imageを作成し、そのレポジトリからダウンロードすることにした。

GitHubにレポジトリを作成し、下記のようなDockerfileをそこに置いた。

FROM tensorflow/tensorflow:latest-gpu-py3
MAINTAINER geotaru

RUN apt-get update -y && apt-get upgrade -y && \
apt-get install -y git \
build-essential \
wget \
curl \
graphviz

RUN pip install keras \
numpy \
scikit-learn \
pandas \
scipy \
seaborn \
matplotlib \
plotly \
jupyter \ 
tqdm \
cython \
jupyter_contrib_nbextensions \
pydot \
graphviz \
pydot3 \
pydot-ng \
folium \
RISE


RUN jupyter contrib nbextension install --user && \
mkdir -p $(jupyter --data-dir)/nbextensions && \
cd $(jupyter --data-dir)/nbextensions && \
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding &&  \
jupyter nbextension enable vim_binding/vim_binding && \
jupyter-nbextension install rise --py --sys-prefix && \
jupyter-nbextension enable rise --py --sys-prefix

WORKDIR /notebooks

Docker HubのAutomated buildという機能を利用して、GitHubのレポジトリとDocker Hubを連携させた。これにより、GitHubのレポジトリにpushするたびにGitHubのレポジトリのDockerfileの内容のDocker imageがDocker Hub上でbuildされる。

$ docker pull "Docker Hubのレポジトリ名"

でKeras on TensorFlow on Dockerな環境を構築することができた。

下記のレポジトリに作成したものを置きました。

https://hub.docker.com/r/geotaru/keras-notebook/

$ docker pull geotaru/keras-notebook

でダウンロードできます。

docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0 --rm -p 8888:8888 -v `pwd`:/notebooks -v `pwd`/data:/notebooks/data -it geotaru/keras-notebook

のようなコード(ご自分の環境に合わせて修正してください)を作成して、 http://localhost:8888/"ターミナルに出力されたtoken"にブラウザでアクセスすれば Keras on TensorFlow on GPUなJupyter notebookを使えます。

感想

現時点20180706でUbuntu 18.04でKeras + GPUの環境構築するのはまだめんどくさい。
ProxyやCUDAの問題が発生したせいで大げさになってしまった気がするが、これはこれで、環境を隔離し持ち運べるという点では良い解決策かなと思う。
Dockerのオーバーヘッドがどれだけあるかわからず、性能がどれだけ低下するか、私、気になります!

参照

How to install the NVIDIA drivers on Ubuntu 18.04 Bionic Beaver Linux linuxconfig.org

Ubuntu 18.04へのCUDAインストール方法 qiita.com

NVIDIA Container Runtime for Docker github.com

Docker Hub の自動構築 Docker Hub の自動構築 — Docker-docs-ja 17.06.Beta ドキュメント