#はじめに
新しくPCを購入したのでDockerを使用してpythonの環境構築してCNNを動かしてみました。
Dockerはほぼ初心者なのでこれを機に勉強していこうと思います。
今回の流れとしては
1.Docker上で公式のanaconda3イメージを取得する
2.anaconda3イメージを基にコンテナを作成
3.anaconda3にtensorflowを導入する
4.JupyterNoteookをブラウザから開く
5.Dockerのメモリを増やす
6.tensorflowを使用してCNNを構築する
となっています。
#環境
-
MacOS Catalina version 10.15.5
-
Docker version 19.03.8
#1.Docker上で公式のanaconda3イメージを取得する
anacondaとは、データサイエンスをする方には必須なパッケージが一通り揃っているオープンソースのプラットフォームです。
こちらは公式からanaconda3のイメージがあるのでありがたく使っていきます。
https://hub.docker.com/r/continuumio/anaconda3/
それでは、Dockerを起動してAnaconda3のイメージを取得します。
% docker pull continuumio/anaconda3
Using default tag: latest
latest: Pulling from continuumio/anaconda3
68ced04f60ab: Pull complete
57047f2400d7: Pull complete
8b26dd278326: Pull complete
Digest: sha256:6502693fd278ba962af34c756ed9a9f0c3b6236a62f1e1fecb41f60c3f536d3c
Status: Downloaded newer image for continuumio/anaconda3:latest
docker.io/continuumio/anaconda3:latest
pull
はDockerイメージを取得するコマンドです。
#2.anaconda3イメージを基にコンテナを作成
次にコンテナを作成していきます。
% docker run --name anaconda -it -p 8888:8888 -v /Users/xxxx/docker/anaconda:/home continuumio/anaconda3 /bin/bash
(base) root@xxxx:/# conda list
各コマンド、オプションの意味は以下です。
-
run
: コンテナを生成します。 -
--name [名前]
: コンテナの名前を設定します。 -
-it
: コンテナ内を操作できます。 -
-p [ホスト側のポート番号:コンテナのポート番号]
: コンテナのポートをホスト側にバインドします。 -
-v [ホスト側のディレクトリ:コンテナ側のディレクトリ]
: ホスト側のディレクトリをコンテナ内に
マウントします。
#3.anaconda3にtensorflowを導入する
anaconda3に事前からインストールされているパッケージを確認してみます。
base) root@xxxx:/# conda list
# packages in environment at /opt/conda:
#
# Name Version Build Channel
_ipyw_jlab_nb_ext_conf 0.1.0 py37_0
_libgcc_mutex 0.1 main
alabaster 0.7.12 py37_0
anaconda 2020.02 py37_0
anaconda-client 1.7.2 py37_0
anaconda-navigator 1.9.12 py37_0
anaconda-project 0.8.4 py_0
argh 0.26.2 py37_0
asn1crypto 1.3.0 py37_0
astroid 2.3.3 py37_0
astropy 4.0 py37h7b6447c_0
atomicwrites 1.3.0 py37_1
attrs 19.3.0 py_0
.
.
.
yaml 0.1.7 had09818_2
yapf 0.28.0 py_0
zeromq 4.3.1 he6710b0_3
zict 1.0.0 py_0
zipp 2.2.0 py_0
zlib 1.2.11 h7b6447c_3
zstd 1.3.7 h0b5b093_0
anaconda3のコンテナに入っているのでdocker
コマンドは使えません。
anaconda terminalで使用できるconda list
でパッケージを見ます。
anaconda3はtensorflowが最初からインストールされていないので、conda install
を用いて
tensorflowとその周辺のパッケージをインストールしてきます。
base) root@xxxx:/# conda install tensorflow
#4.JupyterNotebookをブラウザから開く
大学時代に愛用していたJupyterNotebookをブラウザから開けるようにします。
base) root@xxxx:/# jupyter notebook --port 8888 --ip=0.0.0.0 --allow-root
.
.
.
To access the notebook, open this file in a browser:
file:///root/.local/share/jupyter/runtime/nbserver-12-open.html
Or copy and paste one of these URLs:
http://81127b992594:8888/?token=22ab4d7b42e6629eb76dad08af9c8e6b1d5b59e0f0050f73
or http://127.0.0.1:8888/?token=22ab4d7b42e6629eb76dad08af9c8e6b1d5b59e0f0050f73
末尾のURLをブラウザに入力するとJupyterNotebookが起動します。
#5.Dockerのメモリを増やす
CNNを構築する前にDockerはデフォルトではメモリが2Gまでしか使用できないので、CNNで学習させようとするとオーバーフローします。なので7Gまで使用できるように設定を変更していきます。
- デスクトップの上部にあるDockerアイコンをクリック
- Preferenceをクリック
- Resourcesのタブをクリック
- Memoryを7Gにする
#6.tensorflowを使用してCNNを構築する
最後にCNNを構築していきます。データセットは定番のCIFAR10をダウンロードし、3層の畳み込み層、最適化はadam法、損失関数はクロスエントロピー誤差を使用する至ってシンプルな構築でいきます。
tensorflowを問題なくインポートできて、メモリもオーバーフローしなかったのでこれで環境構築終了です!
#終わりに
Dockerを軽い気持ちで触ってみましたが、奥が深すぎて沼にハマりそうでした...
anaconda3にtensorflowを導入かつJupyterNotebookを開くという、おそらくDocker経験者なら簡単なことにかなり難航しました。Dockerはやっておいて損はないので積極的に使っていきたいです。
とりあえずtensorflowを動かすことができる環境を構築することができたので、これから色々深層学習についてこの環境で試していこうと思います。