KaggleへのサブミットをGithub Actionsを使って自動化する
はじめに
この記事は Kaggle Advent Calendar 2020のアドベントカレンダー6日目の記事です。
去年のKaggle-part2 Advent Calendar 2019のアドベントカレンダーに書いた記事の続きの内容になります。続きの記事ですがなるべくこの記事で完結できるような内容になるよう書きました。
また、こちらKaggleの学習から投稿までをAWS, GitHub Actionsを使って自動化する本記事のリスペクト元になります。この記事を書くにあたり大きく影響を受けております。
この記事を読むとできるようになること
-
git push
してmerge
するとGithub Actionsが走り、Kaggle Notebookが生成・動作するという流れの自動化。
この記事で説明すること
- 上記のKaggleへのサブミット自動化までの方法を主に記事で取り扱います。
- 逆に説明しないこととして、設定するパラメータの仕様等は参照URLを紹介するレベルに留めます。
なぜやるのか
- 「Gitでコード管理しているのに、KaggleのNotebook提出用に別のコードを用意するのが面倒だ」、Kaggleの
Code Competition
というルールの場合に発生する悩みだと思います。-
Code Competition
について簡単に説明すると、CSVなどのファイルを直接アップロードするのではなく、Notebookを利用してそこにファイル提出するまでのソースコードを書きそれを提出するという形式のコンペのことです。 -
Code Competition
について詳しく知りたい方は以前の記事に説明を書きましたのでそちらを読んでもらえると嬉しいです。(記事)
-
- これらの悩みを解消したのが前回の記事でしたが、今回はさらにサブミットも自動化すれば楽になるなということで試してみました。
自動化までに必要なこと
以降は具体的にどうやって解決するのか、方法の部分の説明になります。
作業の流れはこのような形になっております。
- 提出するコードを用意する
- Github SecretsにAPI Tokenを設定
- Github TemplateをCloneする
- Github Templateのデフォルト設定を修正
- Github Actionsのデフォルト設定を修正
各項目について説明します。
提出するコードを用意する
参考としてKaggle - petfinder-adoption-predictionへの提出自動化したリポジトリを作成しておきました。Github - wakamezake/kaggle_petfinder参考に見てもらえればと思います。
Github Actions動作確認のため、はじめに提出するコードは簡単なアルゴリズムにしておくとすぐ結果が確認できます。
Github TemplateをCloneする
Github TemplateのURLはGithub - wakamezake/kaggle_submission_pipeline_templateになります。こちらをCloneしてください。
以降Cloneしたリポジトリの中身を修正してゆきます。
Github SecretsにAPI Tokenを設定
CloneしたリポジトリのGithub SecretsにKaggleAPIを利用するためのAPI Tokenを設定します。
Github Actionsで参照しているGithub Secretsをそれぞれ、KAGGLE_USERNAME、KAGGLE_KEYとしているのでそれに合うようにユーザ名とKeyを設定してください。具体的な設定の方法は次のURLを参照してください。
Github Templateの設定を修正
修正部分を下記にまとめましたのでそれに従って設定を修正します。
- 修正点
- easy_goldというフォルダ名を適当な名前に変更してください。またこのフォルダに提出用のコードを置いてください。
- script_template.py内のeasy_goldの部分を変更した名前に修正してください。
run('python easy_gold/main.py')
となっていますが実行して欲しいpythonファイルを設定してください。 - setup.py内のeasy_goldの部分を変更した名前に修正してください。
具体的な修正点はGithub - wakamezake/kaggle_submission_pipeline_template#correctional-pointにも記載しているので参考にしてください。
Github Actionsのデフォルト設定を修正
修正部分を下記にまとめましたのでそれに従って設定を修正します。
- 修正点
-
upload.yml内の
with
以下の値に、提出に使うNotebook名等を設定して下さい。 - 各パラメータの仕様についてはKaggleAPI - Kernel-Metadataを参照して下さい。
- 例としてKaggle - petfinder-adoption-predictionに提出する場合のupload.ymlを紹介します。
-
upload.yml内の
具体的な修正点はGithub - wakamezake/kaggle_submission_pipeline_template#github-actionuploadymlにも記載しているので参考にしてください。
push
作業用リポジトリへのCloneしてきたリポジトリのGithub Actionsには「pull_request
がされたらKaggle Notebookを生成する」というワークフローを設定してあります、適当なbranchを切ってpush
、merge
してみてください。Github Actionsが正しく動作していればKaggle Notebookが生成されているはずです。
説明は以上になります。
おわりに
今回はKaggleへのサブミットをGithub Actionsを使って自動化してみました。前回の記事に書いた課題を解決できたのでとても満足しています。
今回の記事を実践してみてサブミットが自動化されたKaggle Lifeを是非楽しんでください!
最後に、今回作ったKaggleへのサブミット自動化を実際に適用した例を紹介します。検証に使ったコンペはKaggle - petfinder-adoption-predictionで、以下それぞれGithubのリポジトリ、生成されたKaggle Notebookになります。
以上です、最後まで読んで頂きありがとうございました。
Discussion
有益なTipsの共有ありがとうございます。
Cloneというとローカルにgit cloneするように取れますが、正しくはテンプレートを元に新しいリポジトリを作成するということでしょうか?
ご指摘頂いた方法が正しい方法になります、指摘頂きありがとうございます。