Dockerでデータ分析環境を手軽に作る方法この広告は、90日以上更新していないブログに表示しています。Python何かデータ分析を行わなければいけないとき、手軽に分析環境を用意したいというニーズがあります。Notebook上でnumpy、pandas、matplotlib、scikit-learnあたりが使えれば十分でしょうか。XGBoostやLightGBMといったライブラリも使えるようにしておきたいという人もいるかと思います。ローカルにいろいろなライブラリをインストールしていくと、次第に環境が汚れていってライブラリの衝突などが起こりやすくなってしまいます。KaggleにはKernelという計算環境があり、そこには主要な機械学習ライブラリが予めインストールされています。データ分析をやっていく上で不自由はありません。Kernelを手元に再現し、ポータブルな分析環境として使う方法を紹介します。データ分析界隈には、なんとなくDockerを敬遠しているような人もいるかと思いますので、この機会に入門してしまいましょう。解説はMacOSで行いますが、Dockerとdocker-composeがインストールできれば同じ方法が使えるかと思います。登場する用語の説明Dockerは、まっさらな環境を簡単に作るツールです。Dockerfileというファイルに環境の設定を書けば、そのとおりの環境を作ることができます。他人が作ったDockerfileに自分なりのカスタマイズを加えることも可能です。今回は、Kaggle公式が公開しているpython環境をもとにカスタマイズを行っていきます。加えてコンテナ(container)とイメージ(image)という用語も覚えましょう。イメージはDockerfileをビルドして作ります。イメージはDockerfileという設計図を元に作られた「型」だと考えて良いと思います。イメージを元にコンテナを起動し、そのコンテナ上でJupyterを立ち上げます。利用する際はコンテナにアクセスします。イメージができていればコンテナは数秒で起動できますし、どれだけ環境を汚してもイメージから起動しなおせばまた使うことができます。同じイメージから何個もコンテナを起動することも可能です。Registryは便利なイメージが多く登録されているサイトです。今回はKaggleが提供しているPythonイメージを利用します。docker-composeはDockerfileのビルドと起動を管理するツールです。Dockerコンテナを起動する際、いろいろなオプションをつけることができます。それをいちいちコマンドラインで打つのは煩雑です。docker-composeを使えば、様々なオプションをdocker-compose.ymlというYAMLファイルで設定することができます。docker-composeは本来は複数のコンテナを連携して使うために作られたツールですが、今回はコンテナを簡単に立ち上げるためだけに使いたいと思います。Dockerとdocker-composeのインストールそれでは、Dockerとdocker-composeをインストールしていきましょう。インストール済みの方はこの節は読み飛ばしてください。Macをインストールします。インストールが終わったら、アプリケーションからDocker.appを起動します。(起動にはしばらく時間がかかるかもしれません)Dockerが起動されたら以下のコマンドを打ち、dockerとdocker-composeのバージョンが表示されるか確認してください。Kernelを元に分析環境を作るそれでは、Kaggleが提供しているDockerfileを元に、データ分析の環境を作っていきます。今回は以下のようなフォルダ構成で解析を進めていくとします。スクリプトこのうち、以下の3つのファイルは新しく作成します。Dockerfiledocker-compose.yml.dockerignoreDockerfileDockerfileは、イメージの定義です。いうOSを使って、どういうライブラリをインストールするのか、という内容を書きます。japanize-matplotlib内容はこれだけです。Registry(gcr.io)上にあるKaggle公式Dockerイメージを出発点にしてイメージを定義する、という意味です。numpyやpandasを始めとして、データ分析に必要な多くのライブラリが含まれています。:v56はタグの指定です。KaggleのDockerイメージは日々改善されているので、今の時点での最新版を書いておくと良いでしょう。タグの一覧はgcr.io/kaggle-images/pythonにアクセスすると見ることができます。:latestと指定して最新版を入れることもできますが、イメージが更新されるたびにダウンロードが走ってしまいますし、環境がころころ変わるのは望ましいことではないので、バージョンを特定しておくことをおすすめします。docker-compose.ymldocker-compose.ymlにはコンテナを起動する際の設定を書きます。--no-browserversionはdocker-compose.ymlの書き方のバージョンです。3を指定しておけばよいかと思います。services以下に起動するコンテナの設定を書いていきます。jupyterはコンテナを管理するための名前です。.は同じフォルダにあるDockerfileをビルドする、という意味です。先程作成したDockerfileがビルドされます。volumesはマウントするフォルダの設定です。$PWD:/tmp/workingとすることにより、現在のディレクトリを、Dockerコンテナ上の/tmp/workingに紐付けることができます。これにより、Dockerコンテナの中からでも現在のディレクトリ(とその中のデータとか)にアクセスすることができます。working_dirはコンテナ内の初期ディレクトリの設定です。今回は/tmp/workingに設定しています。portsはポートフォワードの設定です。手元のポート:コンテナのポートの形式で書きます。Notebookを起動するとき、localhost:8888からアクセスすることになるかと思います。今回はDockerコンテナ上でJupyterを起動するため、Dockerコンテナ内のlocalhost:8888にアクセスしないとJupyterを見ることができません。localhost:8888を手元のlocalhost:8888につなぐことができます。commandはDockerコンテナを起動したときに走るコマンドの内容です。Notebookを起動しています。いくつか見慣れないオプションがついているかと思います。Notebookにコンテナ外からアクセスできるようにするオプションです。--allow-rootはルートでの実行を許可するオプションです。Dockerコンテナはデフォルトでルート権限で起動するので、このオプションが必要です。Notebook起動時にブラウザを立ち上げないオプションです。.dockerignore.dockerignoreは、Dockerfileをビルドする際に無視するファイルを列挙するものです。今回の場合、データやノートブックはDockerfileのビルドの瞬間は必要ありませんから、.dockerignoreに書いておきましょう。(コンテナとのデータの共有は、ビルドを行った後にマウントで対応します)inputnotebookscriptinput/などに大容量のデータが入っていて、かつ.dockerignoreに記述もしなかった場合、Dockerのビルドの際に時間がかかるようになってしまいます。ビルドに必要の無いファイルやフォルダは、.dockerignoreに書くように心がけましょう。起動してみるそれでは、実際に分析環境を起動してみましょう。ここで注意ですが、この操作は初回時に限りめちゃめちゃ重いデータをダウンロードする必要があります。実は、Kaggleの公式イメージは便利なライブラリがたくさん入っている反面、とても重いDockerイメージになっています。その容量、なんと18GB!学校や職場など、WiFi環境が整っている場所で行ってください。間違ってもテザリング中なんかにやらないようにしてくださいね。Notebookが起動されます。Notebookが起動するところはだいたいこんな感じのログになるかと思います。Notebookにアクセスできます。ローカルにあるファイルにもアクセスできることを確認してください。まとめ今回はDockerとdocker-composeを使い、Kaggleの環境をベースにした分析環境の立ち上げを行いました。自分なりにカスタマイズしたDockerfileを持っておけば、新しいデータが来たときも迅速に解析に取り掛かることができます。みなさんもぜひ試してみてください。(2019/05/13)Twitterでmhiro2さんにいただいた指摘を元に記事を修正しました。使った方がより現行カーネルの環境に近くライブラリも新しいと思います。使うのがベターですね。(2019/07/12)Dockerのメモリ上限を大きくする方法についてu++さんが書いてくださいました。メニューバーのDockerマークから設定に飛び、メモリ上限を拡張してください。17:00Dockerでデータ分析環境を手軽に作る方法Tweet広告を非表示にする関連記事2019-09-25初めて技術書典に出展して、新刊を300部売るまで9/22の技術書典7で『ハマって覚えるデータ分析・機械学習の罠』...2018-12-20コピペで使える。2018の20日目の記事です。»プロフィールえじといいます。渋谷でデータサイエンティストとして働いています。Masterになりました。