飽きるまでやります。

私の私による私のためのメモ。内容に一切の責任を負えません。

DockerでMNIST

概要

nvidia-docker2 + Anaconda3で環境を作ってkerasでmnistしました.

環境

ubuntu16.04.5
TITAN V

前準備

dockerとnvidia-docker2をインストールします.
デフォルトランタイムをnvidiaにします.

Dockerfile

FROM nvidia/cuda:9.0-cudnn7-devel

# apt
RUN apt update
RUN apt install -y bzip2 wget git

# install Anaconda3
RUN wget -q https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
RUN touch .bashrc
RUN bash Anaconda3-5.0.1-Linux-x86_64.sh -b
ENV PATH $PATH:/root/anaconda3/bin

# conda install
RUN pip install tensorflow-gpu==1.12.0
RUN pip install keras

# install mnist_sample
RUN wget https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py

CMD ["python", "/mnist_cnn.py"]

proxy問題

proxy環境下で作業を行なっていたのでありとあらゆるところでproxyが邪魔をしてきました.
docker pullaptwgetpip,果てはMNISTのデータダウンロードまで,地獄すぎる…

docker hubから持ってくる際のproxy設定

qiita.com

/etc/systemd/system/docker.service.d/http-proxy.confにプロキシの設定を書きました.
/etc/systemd/system/docker.service.d/docker.confdnsの設定を書きました.

Dockerfileの中で通信する際のproxy設定

qiita.com

--build-argで外から渡す or ~/.docker/config.jsonに書くのが良いようです.
config.jsonに書きました.

aptは小文字のproxy環境変数を見てpipは大文字のproxy環境変数を見るっぽいんですがhttp_proxyにもHTTP_PROXYにも反映してくれるようです.すごい!

CUDA,tensorflow,ドライバあたりの依存関係

いつもの…
ここここを見てなんとかしました.

nvidia/cuda

hub.docker.com リンクからグラボ,ドライバにあった物を使います.

Anaconda3

rf00.hatenablog.com

ubuntu16.04でapt install python3-pipするとpipが古くてpip installできないみたいなエラーが発生しました.
そのほかkerasやらtensorflowやらの兼ね合いもありそうでvanilla pythonを入れるのがしんどそうだったのでAnaconda3を入れることにしました.
2019.6現在python3.7は安定板tensorflow-gpu1.13.1のサポート外で動かないのでAnaconda3でpython3.6の物をインストールしました.

pyenvでAnacondaをインストールするような記事もありましたがDockerでpyenv使うのもなーと思ったのでインストーラから入れました.
インストールの際bash -bにしないとyes or noを入力しろと言われて進まないんですが-b入れたらなぜ動くのかが分かりません.

pip install

tensorflow-gpu1.13.1はCUDA9.0に対応していないため12.0をインストールしています.
CUDA10.0にしろという話ですがグラフィックドライバのアップデートには良い思い出がないので避けました.
conda installだと依存関係を勝手に解決してくれるせいで衝突が起きたのか動かなくなったのでpipにしました.

buildとrun

docker build -t mnist .

でビルドして

docker run --rm -it mnist

で実行できました.

雑感

ただでさえdockerの知識もOSの知識もないのにproxyが絡んできてつらかった…