Kaggleへの投稿をGithub Actionsを使って自動化する
リスペクト元
Kaggleの学習から投稿までをAWS, GitHub Actionsを使って自動化する
はじめに
この記事は、Kaggle Advent Calendar 2020のアドベントカレンダー6日目の記事です。
去年のKaggle-part2 Advent Calendar 2019のアドベントカレンダーに書いた記事の続きの内容になります。続きの記事ですがなるべくこの記事で完結できるような内容になるよう書きました。
この記事を読むとできるようになること
git pushしてmergeするとGithub Actionsが走り、Kaggle Notebookが生成・動作するという流れの自動化。
この記事で説明すること
上記のKaggleへのサブミット自動化までの実現方法を主に記事で取り扱います。
逆に説明しないこととして、設定するパラメータの仕様等は参照URLを紹介するレベルに留めます。
なぜやるのか
「Gitでコード管理しているのに、KaggleのNotebook提出用に別のコードを用意するのが面倒だ」、KaggleのCode Competitionというルールの場合に発生する悩みだと思います。
Code Competitionについて簡単に説明すると、CSVなどのファイルを直接アップロードするのではなく、Notebookを利用してそこにファイル提出するまでのソースコードを書きそれを提出するという形式のコンペのことです。
これらの悩みを解消したのが前回の記事でしたが、今回はさらにサブミットも自動化すれば楽になるなということで思いつきました。
本題
自動化までに必要なこと
提出するコードを用意する
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してください。
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を紹介します。
具体的な修正点はGithub - wakamezake/kaggle_submission_pipeline_template#github-actionuploadymlにも記載しているので参考にしてください。
説明は以上になります。
最後に
今回作ったKaggleへのサブミット自動化を実際に適用した例を紹介します。検証に使ったコンペはKaggle - petfinder-adoption-predictionになります。以下それぞれGithubのリポジトリ、生成されたKaggleNotebookになります。
Github - wakamezake/kaggle_petfinder
Kaggle - wakamezake/petfinder-sample-pipeline
サブミットが自動化されたKaggle Lifeを楽しんでください!
参考
Github - harupy/push-kaggle-kernel
Github - lopuhin/kaggle-script-template
Kaggle CodeCompetitions