Proxyの影響下のUbuntu 18.04でJupyter Notebook with Keras on TensorFlow on Docker
就活が終わってまた研究を再開した。
いままで、研究用のサーバにCentOS7を使っていたが、研究でDeep Learningを使うことにしたので、NVIDIAのドライバが簡単にインストールできるUbuntu 18.04にOSを変えた。
Dockerfileを訂正したものを下記のリンクにのせました
20180804追記
NVIDIA driverのインストール
下記のコマンドで簡単にNVIDIAのGPUを扱うことのできるドライバをインストールできる。
$ sudo ubuntu-drivers autoinstall
ここまでは簡単だった。
しかし、2018/07時点ではまだNVIDIAのCUDAがUbuntu 18.04に対応しておらず、 強引な方法しかなさそうだった。
代替手段: 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 ドキュメント