最近DeepLearning的なことをやることが少なくないですが、環境についてまとめてなかったので備忘録として記事にしておきます。
求めている開発環境の要件
- GPUが利用できる
- Jupyter Notebook + Labが動作
- 最低限の機械学習用のライブラリはインストールされている
- Dockerで可搬性を高める
上記を満たすには選択肢が殆ど無いです。
特にGPUを利用できてDockerを利用するとなると、nvidia-dockerを使うしか選択肢はほぼ無いです。
Dockerfileとか
githubのリポジトリにして公開しました。
dockerhubにも公開しているので、docker pullしてもOKです。
docker pull lambdasakura/data-science-env
なお、nvidia-dockerで動作させるにはオプションなどを指定する必要があるので、docker-composeを使って起動するほうが便利なのでrestartをalwaysにして常時起動しています。
利点と欠点とか
概ね満足な環境が出来ています。適当にブラウザを開いてモデルを書いて訓練して評価する程度のタスクであればJupyter上で快適に生活できます。自宅の鯖に構築しているのでどのマシンから入っても続きを常に書くことが出来るのも良い点ですね。環境が壊れても思い切って作り直すのも手軽なので、システムを思いっきり壊すような感じで弄っても気にしないで済むのは良いです。
ただ、dockerを使っているせいでもあるのですが、jupyterを介さないでデータを操作したい場合やエディタは別のものを利用する場合はホストのvolume共有で上手くやりくりしています。この方法だと実行時とデバッグの際にどうしてもdockerの中に入らなければならなくて今ひとつです。
なので、DeepLearningをバリバリに使うアプリみたいなものを書く場合やバグで大ハマリしたときはホストの環境に構築してしまって、そっちを使う運用にしてしまっています。その時はEmacsかVSCodeで適当にやっています。
また、jupyterのカーネルでGPUを初期化してしまうと開放されなくて別のプロセスでGPUを利用しているつもりが実は使えてなかったとかあるためハマることもあったりします。