Kaggleのサイト上でKernel (Pythonプログラム) を実行する方法


はじめに

Kaggleのサイト上でGPU(NVIDIA Tesla K80)を用いてKernelを実行するとが出来ることが分かったので方法を記載しておきます。
Kaggleのアカウント作成やコンペの参加方法がわからない方は、Kaggle事始めで分かりやすく説明されていますので参照してください。

Kernelを作成する

Kernelを作成する方法は新規に作成する方法と既にあるKernelをFork(コピー)することで作成することができます。他の人が公開しているKernelからもForkすることが出来るので便利です。

Kernelを新規作成作成する方法

コンペティションのサイトからKernelを選択し、New Kernelを押すことで作成することができます。作成できるKernelのタイプはScrip(py)またはNotebook形式(.ipynb)

既にあるKernelをFork(コピー)する方法

他の人が公開しているKernelもForkすることができます。やり方はKernelを表示したときに右上に出てくるForkボタンを押すだけです。以下はTitanic: Machine Learning from Disasterの初心者向け解説 KernelであるTitanic Data Science SolutionsをForkして実行してみます。

Kernelの操作

Jupyter Notebookと同じようにセルを選択して再生ボタンを押すかShift+Enterを押すことでプログラムを実行することができます。注意点と私が理解できている操作の方法を記載しておきます。

注意点

・DataFrame.to_csv()等でファイルをする場合には以下の⑤Commitボタンでプログラムを実行する必要があり①~③のボタンではファイルが作成されない。
・KernelをForkした場合には、input file の pathが異なっていたり、scikit-learnのモジュール名が変更になっててエラーが出ることが多い。

操作の方法

①選択しているセルの実行(Shift+Enterでも同じ)
②①と同じく選択しているセルの実行、このボタンは実行時には停止ボタンになる。
③ページの一番上から下まですべて実行される(実行前にイニシャライズはされない)
④Kernelのイニシャライズ。オブジェクトをすべて削除される。
⑤Commitボタン。Kernelのすべてのプログラムが実行され、ファイルも作成される。
⑥Kernelのダウンロードとアップロード。ダウンロードしたKernelはJupyter Notebookで実行できる。
⑦ファイルの追加。 学習済みのニューラルネットの重みなどをアップロードすれば、Kernelで使用可能
⑧GPUのON/OFFボタン。GPUをONにすると使用できるRAMやDisk容量が少し小さくなり、カスタムパッケージも使えくなるがKeras+Tensorflowでニューラルネットワークの重みを学習するならONにしたほうが断然早い。
⑨Kernelのタイトル。ここでタイトルを編集することが出来る。

Kernelから直接submitする方法

Titanic Data Science SolutionsはForkした場合は、そのままCommitするとsubmissionファイルが作成されないため、『submission.to_csv('submission.csv', index=False)』を追加してからsummitしてください。

submission = pd.DataFrame({
        "PassengerId": test_df["PassengerId"],
        "Survived": Y_pred
    })

#submission.to_csv('../output/submission.csv', index=False)
submission.to_csv('submission.csv', index=False)

Submission済みのKernelを開き、Output 、予測結果(この場合はsubmission.csv)の選択、Submit to Competitionを押すことでKernel上から直接Submitすることができます。

おわりに

本格的にKaggleのコンペティションに参加するようになるとRAMやDiskの容量が物足りなくなってくるとは思いますが。初心者のうちはKaggleのサイト上でKernelを実行しながら勉強していくのがよいのではないかと思います。
因みに、NVIDIA Tesla K80はAmazonで価格を見ると約14万円で、Keras+Tensorflowで畳み込みニューラルネットワークの学習をGPU ON/OFFで試してみましたが、10倍程度の速度差がありました。