はじめに
以下のことをやります。
- 最低限動作するコンテナを作成
- docker-composeでコンテナ内のボリュームをマウント
- Jupyter Notebookで実行できるように
- ブラウザで上記の環境が動作するように
- PyCharmで上記の環境が動作するように
補足
Jupyter Notebookって?
http://jupyter.org/
ブラウザ経由で動作して、対話的にコマンドを実行できるツール。
実行したコマンドや実行結果を保存することができる。
PyCharmって?
https://www.jetbrains.com/pycharm/
JetBrains社が提供するPython用のIDE。
最強のPython開発環境 PyCharmのすゝめを見れば、何ができるかはだいたい理解できる。Emacs派だが、利用する言語が増えるにつれ設定が面倒になってきたので、試しに利用中。
なぜPyCharm上で操作したいのか
- オートサジェストの機能が優秀
- デバッガが優秀
- Jupyter Notebookと連携できる
実行レポジトリ
- ブラウザ用ブランチ
- PyCharm用ブランチ
2つのブランチの違いとしては、PyCharmは絶対パスで読み込むのに対し、ブラウザ利用は相対パスでimportします。そのため、PyCharmバージョンは↓のシェルスクリプトを利用して、各ファイルのimport部分を変えています。
https://github.com/tomoyamachi/deep-learning-from-scratch-2/blob/for_pycharm/sed_path_to_pycharm.sh
起動方法
すでにdocker, docker-composeの環境がある前提で話をすすめると、
$ docker build -t deeplearning .
で、deeplearningという名前のイメージをビルドして、そのイメージをdocker-compose内で呼んでます。あとはボリュームマウントした、りポートフォワードしたり程度。
PyCharmでの利用手順
Interpreterの設定
オートサジェストを賢く使うために、Interpreterを指定します。
ここで指定したいのは先程作成した、deeplearningというコンテナのruntimeです。
Preference > Project: python > Project Interpreterから設定できます。
歯車のマーク > Add... > Docker と選んでいくと先程作成したdeeplearningというのが出ていると思いますので、それを選びましょう。
JupyterNotebookプロセスへの接続
$ docker-compose up
deeplearning_1 | Copy/paste this URL into your browser when you connect for the first time,
deeplearning_1 | to login with a token:
deeplearning_1 | http://(コンテナID or 127.0.0.1):8888/?token=トークン
PyCharmで新しくJupyterNotebookファイルを作成して、処理を実行しようとするとJupyterNotebookのプロセスが表示されるので、localhost:8888?token=<トークン>
と入力されればdocker内で走っているプロセスに繋がります。
注意点
PyCharmでの注意点として、どのフォルダ内にいても実行元パスがルートディレクトリになります。 ※設定次第でどうにかできそうですが、設定方法がわかりませんでした。
そのため、importするときはルートディレクトリからの階層でimportします。/python/ch01/train.pyを利用したい場合は import ch01.train
です。
読み込むと計算結果とグラフが出てくるのが分かります。
https://github.com/tomoyamachi/deep-learning-from-scratch-2/blob/for_pycharm/python/ch01/sample.ipynb
最後に
2ヶ月ほど前からPythonを触り始めていて、Word2Vecの概念や、ライブラリの利用方法はわかっていたけど、内部で何をやっているかわかっていないというレベルでした。
そのレベルの自分にとっては、丁寧に、誤解が起こらないように書いてある本だと感じました。