これまでプライベートの分析環境については、
- アドホックな分析は、ローカル端末上のpyenvで仮想環境として管理
- 深層学習などは、クラウド上で環境構築手順を管理しておいて実行
といったやり方で管理・運用していました。
これを今回、Dockerのコンテナとして分析環境を管理するようにしてみました。
加えて、GitHubもなんだかリポジトリがごちゃごちゃ置いてある状態となっていましたので、新しく1つのリポジトリにまとめてみました。
しばらく勉強してきたコード等は、コンテナ&新リポジトリで管理していこうかと思いますので、簡単に構成などを紹介しようと思います。
Dockerについて
Dockerは、コンテナ型の仮想化環境を提供するオープンソースのソフトウェアです。
Docker公式: https://www.docker.com/
Dockerに関する知識やメリットについては、例えば下記などの解説ページがすでに揃っていますので、ここでは省略します。
また、下記のような書籍も参考になりますので、辞書として持っておくと便利です。
データ分析などの仕事をする側としては、分析環境、特に機械学習を用いたアプリケーションを起動するコンテナを予め用意しておくことで、後のシステム統合をスムーズに行うことが可能となります。
また、コンテナ上で動作させることで、分析や予測モデルに再現性を持たせて管理できることも利点かと思いますね。
納品された分析スクリプトの検収の際にイメージごと納品してもらえれば、Dockerさえ入れておけば、環境構築から実行しなくても再現が可能かと思います。
今回改めて自分のソースコードを整理してみた結果、大まかに以下の3つの用途の環境が必要そうでした。
- 分析用のコンテナ
- kaggle用のコンテナ
- 深層学習用のコンテナ
これらをベースとして、さらに使うデータだったり分析手法だったりで細かくコンテナの内容に調整を加えて、リポジトリ管理するようにしてみました。
それぞれ、どういったイメージをベースとしているのか、基本的な構成などを以下に記します。
分析用コンテナの管理
jupyter notebookで保存できれば十分なので、jupyter/datascience-notebook
イメージをベースに使っています。
また個人的にはPythonをよく使いますので、Pythonでは様々なライブラリも使いたいため、こちらは kaggle/python
をベースとしました。
- https://hub.docker.com/u/kaggle/
あとはちょいちょいとイメージに入っていない、欲しいライブラリなどが増えた時に調整を加えていっています。
Rなども最初からkaggleのイメージを使えばとも思いますが、今のところは不要なので、また色々なライブラリが必要になった際に検討することにしました。
kaggle用コンテナの管理
Kaggleのコンペやデータセットに対して、何かごにょごにょしたい時の環境です。
だいたいPythonで実行しますので、基本的には分析用コンテナの時と同じように、 kaggle/python
から作成しています。
また、kaggleの場合はデータセットの利用が必須となるので、これを kaggle-api
で取得するようにしました。
詳しくは、後述の自分のリポジトリのkaggle関連のコードのREADMEを参照して下さい。
本当は、コンテナをビルドするときに、一緒にAPIも叩いてデータセットを準備するイメージ構成にした方が良いかなーと思います。
しかし、 kaggle/python
などのイメージってkaggleなのに、デフォルトで kaggle-api
が入っていないんですよねー、不思議。
深層学習用コンテナの管理
深層学習を行う場合の環境です。
この場合は他の環境と違ってGPUを使いますので、基本的に nvidia-docker
を使います。
nvidia-docker: https://github.com/NVIDIA/nvidia-docker
GPUはコンテナ内で完結するようなライブラリどうこうの話ではありませんので、上記の仕組みが必要になります。
また、自分の場合は様々な深層学習ライブラリをGPUで利用できるようにしたいので、環境構築が面倒です。
これについては、主に以下のイメージを利用しています。
Deepo: https://github.com/ufoym/deepo
様々な深層学習ライブラリをGPUで利用できるイメージが提供されており、以下のライブラリがGPU実行可能です。(右列)
使えすぎい笑
このあたりも詳しくは、後述の自分のリポジトリの samples_deeplearning_python
あたりのREADMEを参考にしていただければと思います。
GitHubのリポジトリについて
新しくまとめたリポジトリが以下になります。
- https://github.com/Gin04gh/datascience
冒頭で述べたように、リポジトリが少しごちゃごちゃしてきたため、これについて整理を考えた結果、リポジトリは1つにして、ディレクトリ+コンテナのセットでテーマを変えるのが良いかなと思いました。
これのデメリットとしてはやはり、クローンしたときに全てのソースを落としてきてしまうといった点だと思いましたが、結局は自分の備忘録として使っていますので、1つ落としてくれば、すべて再実行可能の状態となり、それでも良いかと思いました。
まぁ、某Gのアプリだってリポジトリ1個で管理してるって言いますし笑
そこまで大きくなるものでもないですし、issueやwikiも1つのページにまとめられるので、スッキリして良い気がしました。
備忘録なので、あとで見返したい時の検索もしやすいと思います。
まとめ
以上、コンテナを使った分析環境の管理について、記しました。
といっても今回は完全に自己流かつプライベート用ですので、実際に分析プロジェクトなどの仕事で、品質や生産性を向上させられるような構成を考える場合には、別途検討する必要があると思います。
ひとまず、これまでの投稿でリンクしてきているものも順次更新していって、最終的には古いリポジトリは消去すると思います。
コメント