はじめに
- kaggleで使われるkernelと同じ環境を、local上に再現したい。
- kaggle kernelはそれなりの性能をもったインスタンスだが、localマシンの方がより性能が良いので、
localマシン上で試行錯誤した後、kaggle kernel上にコードを持ってきてsubmitする
と言った使い方がしたいからだ。 - kaggle kernelの仕様はDockerイメージとして公開されているので、これをlocalで動かす事により、それが実現できる。
環境
- MacOS
手順の概要
基本的に以下の2つの手順をやれば良い。
- MacにDockerをインストール
- https://qiita.com/nemui_/items/ed753f6b2eb9960845f7
- ちなみにこの手順で
docker-compose
もインストールされる。
- kaggle kernelのDocker imageをセットアップ
私は、 docker-compose
を使うと管理が何かと楽なので、使う。
docker, docker-composeの確認
dockerの確認
$ docker --version
Docker version 19.03.4, build 9013bf5
docker-composeの確認
$ docker-compose --version
docker-compose version 1.24.1, build 4667896b
Dockerfileの作成
Dockerfile
FROM kaggle/python
WORKDIR /kaggle
COPY ./input /kaggle/input
COPY ./kernel /kaggle/kernel
- とりあえずimageとして
kaggle/python
を指定する。 - また、kaggle kernelでは、
/kaggle/input/*
にtrain.csv
などが置かれているケースが多い。- そこで、localの
./input/*
をDockerコンテナ上にCOPY
するようにした。
- そこで、localの
- さらに、localの
./kernel/*
もDockerコンテナ上にCOPY
する。- ここに
.py
を置く事にする。
- ここに
docker-compose.yamlの作成
とりあえず単にDockerfile
を使って build
を行う。
command
でkernel/script.py
を実行させる。
docker-compose.yaml
kaggle-kernel:
build: .
command: python kernel/script.py
動かしてみる
build
$ docker-compose build kaggle-kernel
run
適当なスクリプト
kernel/script.py
import pandas as pd
train = pd.read_csv("/kaggle/input/nfl-big-data-bowl-2020/train.csv")
print(train.shape)
$ docker-compose run kaggle-kernel
(509762, 49)
動いた。
pandasが使えていることから各種packageについても Kaggle/docker-python
に設定されているものが使えていることが分かる。