掲題の通り、GCPのVMインスタンスにKaggleの公式Dockerイメージをデプロイし、ローカルマシンからJupyter Notebookに接続するまでの手順を記述しています。
gcloudの設定
gcloudをインストールしていない場合は、インストールしておいてください。
以下のように、認証と設定が済んでいる想定で進みます。ゾーンはasia-northeast1-b
以外でも構いません。
$ gcloud auth login
$ gcloud config set project PROJECT_ID
$ gcloud config set compute/zone asia-northeast1-b
インスタンス作成
以下のコマンドでインスタンスを作成します。
$ gcloud compute instances create kaggle-compute \
--image-family=ubuntu-1804-lts \
--image-project=gce-uefi-images \
--boot-disk-size="100" \
--custom-cpu 24 \
--custom-memory 22GB \
--maintenance-policy="TERMINATE" \
--no-restart-on-failure \
--preemptible
主な仕様は以下の通りです。
- インスタンス名: kaggle-compute
- OS: Ubuntu 18.04
- CPU: 24コア
- メモリ: 22GB
- ストレージ: 100GB
CPUのコア数を更に増やす場合は、別途割り当て上限の変更を申請する必要があります。
--preemptible
を付けることでプリエンプティブル VM インスタンスとしてインスタンスを作成できます。
これにより、可用性を犠牲にして大幅なコストカットが可能となります。
少し経つと以下のコマンドでssh接続できるようになります。
$ gcloud compute ssh kaggle-compute
sshできたら、インスタンスの初期設定をするため、以下のスクリプトを作成し、実行します。
このスクリプトによりdocker
、docker-compose
、pip
、Kaggle API
、unzip
がインストールされます。
unzipは必須ではないのですが、Kaggleのデータセットはzip形式で配布される場合もあるので、解凍するためにインストールしておきます。
#! /bin/bash
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
sudo curl -L https://github.com/docker/compose/releases/download//1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo apt-get install -y python3-pip
pip3 install kaggle
sudo apt-get -y install unzip
$ sh ./set_up.sh
kaggle.jsonを配置
つぎにkaggle API
を使用できるようにします。インストールは前述のスクリプトによって完了しているので、kaggle.jsonを置くだけです。
お好きな方法で~/.kaggle/kaggle.json
を配置してください。
$ vim ~/.kaggle/kaggle.json # put your kaggle.json
$ chmod 600 ~/.kaggle/kaggle.json
$ kaggle --version
Kaggle API 1.5.6
コンテナ起動
必要なファイルを以下のリポジトリにcommitしています。
https://github.com/shinsuke27/kaggle-docker
これをcloneしてdocker-compose up --build
します。
このとき、to login with a token:
というステートメントのあとにNotebookのURLがトークン付きで吐かれるのでこちらを控えておきます。
$ git clone https://github.com/shinsuke27/kaggle-docker.git kaggle
$ cd ./kaggle
$ mkdir ./input
$ sudo docker-compose up --build
なお、ここで作成したinputというディレクトリ内にコンペのデータを配置することで、KaggleのNotebookと同じパスでデータを読み込むことができます。
Jupyter Notebookに接続
$ gcloud compute ssh kaggle-compute -- -L 8080:localhost:8080
ブラウザから http://loocalhost:8080/ に接続します。
GPU対応させるには
こちらをご参照ください
https://qiita.com/shin27/items/50bf1df1b2bae3dba032