個人でKaggleをやるにあたって、毎回0から環境を構築するのは面倒だなと思っていたので、対策を色々考えていたところ、ちょうど適したものがありました。
CookieCutter とは
「cookie cutter」は日本語でいうと、クッキーの型のことを指しているんだと思います。
CookieCutterはPythonプロジェクトの雛形を自動生成してくれるパッケージです。
今は名前だけ紹介しますが、派生に以下のものがあり、タスクに応じて使い分けられているようです*1。
- CookieCutter-Django
- CookieCutter-flask
- CookieCutter-Pypackage
- CookieCutter-DataScence
そして、今回目をつけたのはデータサイエンス特化の「CookieCutter-DockerScience」です。
CookieCutter-DockerScience とは
データサイエンス用の雛形を生成するCookiecutterの派生です。
データサイエンスにおいて、開発の序盤は似たようなファイル構成になりがちです。 CookieCutter-DockerScienceでは、共通の部分がひな形になっているため、序盤の開発コストを下げることができます。
デフォルトでdockerやjupyter notebookなどの雛形が完成しているため、スムーズな環境構築を行うことができます。 また、基本的な動作をMakefileで行うため、コードを使いやすくなります。
環境構築
以下の手順で環境構築を行います。
(1) cookiecutterをインストールし、CookieCutter-DockerScienceを入れる
sudo apt install cookiecutter cookiecutter git@github.com:docker-science/cookiecutter-docker-science.git
(2) 質問に答えてプロジェクトの作成
公式のREADMEにもある通り、project_name
などを回答していきます。空になっている部分はデフォルトで補完されます。
project_name [project_name]: プロジェクト名 project_slug [プロジェクト名]: jupyter_host_port [8888]: description [Please Input a short description]: プロジェクトの説明 Select data_source_type: 1 - s3 2 - nfs 3 - url data_source [Please Input data source]: データソース。決めてない場合 3 にしておけばOK(?)
project_slug
というのが最初何を指しているのかわからなかったのですが、プロジェクト名を整えたもののようです。以下のやりとりが分かりやすかったです。
今回、特に何かデータがあるわけではなかったので、データソースを聞かれて困りました。 一応、3のURLを選択するとURLを聞かれますが、適当にあしらって問題ないと思います。
(3) Makefileの修正
nvidia-docker
用に書かれているので、NVIDIA container Toolkitを使っている場合、書き換えなければなりません。
- 47行目:
nvidia-docker
→docker
export DOCKER=docker
- 96行目:
--gpus all
を追記$(DOCKER) run -it --gpus all -v $(PWD):/work -p $(JUPYTER_HOST_PORT):$(JUPYTER_CONTAINER_PORT) --name $(CONTAINER_NAME) $(IMAGE_NAME)
場合によって行が前後するかもしれませんが、検索機能から探せば問題ないはずです。
(4) requirements.txt
に追記
これだけでOK
tensorflow-gpu==2.3
(5) Makeコマンドでコンテナの作成〜実行
Makefileに色々書かれているので、めんどくさい引数とかを考えなくて済みます。
make init-container #コンテナのbuild等 make create-container #コンテナのrun等 # コンテナ内 python3 > import tensorflow as tf > print(tf.reduce_sum(tf.random.normal([1000, 1000])))
以上でTensorFlow(GPU)を動かすことができるはずです。
おわりに
本当はKaggle APIまでひっくるめて環境構築したかったのですが、権限周りでモタついてしまったのでまた今度解説します。
(具体的に書くと、~/.kaggle/kaggle.json
の権限を600にするとコンテナ内で読み込めなくなる。userをsudoにすることで解決できるはずだが、そうするとCookieCutter側で不都合が起きるかもしれず、不明瞭だったので今回はパス。)
これからCookieCutter-DockerScienceを活用してKaggleに挑戦してみようと思います!
環境構築に関する補足
CookieCutter-DockerScienceを動かすには、前提として「Docker」「NVIDIA Container Toolkit」「NVIDIA-driver」 をマシンに入れておく必要があります。
DockerとNVIDIA Container Toolkitのインストール方法に関しては、以前、以下の記事で説明しました。
NVIDIA-driverのインストールは以下の方法でいいはずです(418以上のものが入る可能性あり)。
sudo apt -y install nvidia-driver-418 # チェック sudo reboot modinfo nvidia | grep version
また、TensorFlowに関しては、GPUアーキテクチャ、CUDA、cuDNNとのバージョン相性があり、決まった組合せ以外は環境構築できないので注意が必要です。
古いバージョン(2.1以前)のTensorFlowと環境の互換性は、以下のページで確認するのが確実です。