「GCE+Dockerで動くKaggle用開発環境」のプロジェクト雛形を作る!

はじめに

今回は「Kaggle用開発環境の構築手順をひとまとめにしたプロジェクト雛形」を作成したので、ご紹介できればと思います。

「もっと良い方法があるよ」や「ここをこう直したらいいのでは」というご意見がございましたら、ぜひコメントいただけると嬉しいです。よろしくお願いします。

目指しているKaggle用開発環境

今回の雛形を作るにあたり、特に以下の点を重視しました。

  • VSCodeとJupyterLab(ブラウザ)の双方からアクセスできること:
    共通処理を適宜スクリプトに切り出してNotebookを綺麗に保ちたい
  • 複製が用意であること:
    新たにインスタンスを作っても、簡単に同じ環境を作ることができる

作成したプロジェクト雛形

「上記の条件を満たすような環境をスムーズに構築できる」ことを目指して作成したプロジェクト雛形がこちらになります。 github.com

プロジェクト雛形の使い方に関するざっくりとしたイメージがこちらです。

CUDAのインストールやDockerコンテナのビルドも雛形に組み込んでいるため、 コマンド1つで環境構築が完了し、スムーズにJupyterLabの起動まで行えるという想定です。

動作確認したインスタンスの設定

雛形はGPUが導入されている環境を想定しています。 また、雛形内の各種実行コマンドはubuntuで動作させることを前提に記述しておりますので、 異なる環境を利用する場合はMakefileを 適宜読み替えていただければと思います。

設定内容
マシンタイプ n1-highmem-4
GPU 1 x NVIDIA T4
ブートディスク ubuntu-2004-focal-v20240209
ディスクサイズ 100GB
VM プロビジョニング モデル スポット

利用方法

雛形の利用方法を以下に示します。

1. インスタンスにKaggle用開発環境を構築

GCEインスタンスを起動し、VSCode拡張機能:Remote Developmentを経由してインスタンスにアクセスします。

あとは、雛形をクローンして環境構築処理を実行すれば完了です。

git clone https://github.com/tm4roon/my-kaggle-project.git
source ./my-kaggle-project/setup.sh

2. プロジェクト雛形からコンペ用実験ディレクトリの作成

先ほどクローンしたmy-kaggle-projectをベースにコンペの実験ディレクトリを作成していきます。ここではTitanic - Machine Learning from Disasterを例に、実験ディレクトリの作成手順を紹介します。

cookiecutter my-kaggle-project

上記のコマンドを実行すると、各種パラメータを設定するよう求められますので、下記のように設定します。

competition_nameは、Kaggle APIのパラメータ[COMPETITION]に対応しておりますので、参加するコンペ名に対応する値を入力してください。その他の値は任意に設定していただいて問題ありません。

3. ブラウザからJupyterLabへアクセス

下記のコマンドにより、JupyterLabを起動します。

 make up # JupyterLabを起動

permission denied while trying to connect to the Docker daemon socket at ...

とエラーが出る場合はsudoを付けて再度実行してみてください。

次に、VSCodeのポート転送を利用して、インスタンスのポート8888をlocalhostのポート8888に転送します。

あとは、ブラウザからlocalhost:8888にアクセスすれば、JupyterLabが立ち上がっていることが確認できると思います。※ 起動までに少し時間がかかる場合があります。

4. コンテナの停止

下記のコマンドでコンテナを停止できます。GCEのインスタンスも忘れずに停止しておきましょう。

make down

その他の代替案

今回はGCEとDockerを組み合わせてKaggle環境を構築しましたが、GCPには以下のようなNotebookを利用できるサービスが存在します。 手軽にNotebookを利用したり、ランタイムをサクサク切り替えたりと便利ですので、開発環境としてこれらのサービスを検討してみてもいいかもしれません。