ぐぐりながら見様見真似でdockerを使ってみました。
目的
PyTorchによる発展ディープラーニングができる環境を作る
やるならJupyterLabを使いたい
Dockerでのコンテナ化もやってみたい
結果
初めはjupyterのdocker-stacksのベースを書き換えたりして試行錯誤してましたが、公式のpytorch/pytorchをベースにjupyterlabなど必要なライブラリをインストールすることで目的のものができました。
環境
Dockerやnvidia-container-toolkitはインストール済みとします。
– GPU: GTX1080
– OS: Ubuntu 18.04.3 LTS
– Nvidia driver: 440.48.02 CUDA Version: 10.2
– Docker: 19.03.5
手順
適当な作業用フォルダを作成し移動
$ mkdir pytorch-lab[なんでも良い]
$ cd pytorch-lab
Dockerfileを作成
$ vim Dockerfile
FROM pytorch/pytorch:latest
# Install required libraries
RUN conda config --add channels pytorch \
&& conda config --append channels conda-forge \
&& conda update --all --yes --quiet \
&& conda install --yes --quiet \
ipywidgets \
jupyterlab \
matplotlib \
nodejs \
opencv \
pandas \
scikit-learn \
seaborn \
sympy \
&& conda clean --all -f -y
# Install jupyter extensions
RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension \
&& jupyter labextension install @jupyter-widgets/jupyterlab-manager
COPY jupyter_notebook_config.py /root/.jupyter/
やっていることは
-
- base imageとしてpytorch/pytorchを使用。
-
- そのままconda updateを行うとpytorchがダウングレードされてしまうので、conda config –add channels pytorchでpytorchのライブラリを高優先度で追加。
-
- condaのライブラリだけだと足りないことがあるのでconda config –append channels conda-forgeでconda-forgeのライブラリを低優先度で登録。
-
- 必要なライブラリのインストール。
-
- jupyterlabでtqdmでの進捗バー表示が行えるようにjupyterlabの拡張機能をインストール。
- 後述するjupyterの設定ファイルをコピー。
jupyterの設定ファイルを作成。
Dockerfileと同じ場所にjupyter_notebook_config.pyを作成。
私は試行錯誤していた際に使用したjupyter/docker-stacks/base-notebook/jupyter_notebook_config.pyをコピーして設定を書き加えています。
追加した設定は
-
- c.NotebookApp.allow_root = True : rootでの起動を許可
- c.NotebookApp.password = ‘パスワードのハッシュ値’ : ログインパスワードを設定
パスワードのハッシュ値はローカルのpythonにipythonがインストールされていれば、以下のコマンドで生成できます。
$ ipython
In [1]: from IPython.lib import passwd
In [2]: passwd()
パスワードを設定して表示される’sha1:~’をコピーしておいてください。
c.NotebookApp.allow_root = True
c.NotebookApp.password = 'sha1:~'
これらをc.NotebookApp.open_browser = Falseの後ろあたりに打ち込んでください。
imageのビルド
上記のDockerfileおよびJupiter_notebook_configのあるフォルダでビルドを行います。
pytorch-labのところはわかりやすい任意の名前をつけてください。
初回はベースのpytorch/pytorchのダウンロードが行われるのでしばらく時間がかかります。
$ docker build -t pytorch-lab ./
docker imagesで作成したイメージが追加されていたら成功です。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pytorch-lab latest bd952fdf9b43 12 seconds ago 6.15GB
pytorch/pytorch latest 37b81722dadc 9 days ago 4.16GB
起動方法
/home/[ユーザー名]/ML/にデータを保存するとします。
$ docker run -d --rm --gpus all -v ~/ML:/workspace -p 8888:8888 --name pytorch pytorch-lab jupyter lab
オプション
-d バックグラウンドで実行
–rm コンテナ終了時にコンテナを削除
–gpus all コンテナでGPUを使用可能にする
-v ~/ML:/workspace ローカルの~/MLをコンテナの/workspaceにマウントして作成したファイルが保存されるようにする。
-p 8888:8888 ローカルのポート8888への接続をコンテナの8888(jupyterlab)へ送る。
–name pytorch コンテナに任意の名前をつける。
使い方
ブラウザからhttp://localhost:8888/に接続、ログインページが表示されるので設定したパスワードでログインする。
![スクリーンショット 2020-01-26 2.53.24.png](https://cdn.silicloud.com/blog-img/blog/img/657d648e37434c4406d04bb6/35-0.png)
問題点
-
- pytorchのイメージもライブラリもバージョンを指定せずビルドの度に最新のものがインストールされるので、今後のアップデート次第では作ったイメージがうまく動作しない可能性がある。
-
- rootでjupyterlabを起動するのはセキュリティ的にどうなんだろう(SSHポートフォワードを前提にはしている)。
- tqdmの表示はうまくいくが、torch vision.datasets.MNISTなどのダウンロード時の進捗バーは正常に表示されない。