🤔

KaggleへのサブミットをGithub Actionsを使って自動化する

2020/12/03に公開2

はじめに

この記事は 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のデフォルト設定を修正

修正部分を下記にまとめましたのでそれに従って設定を修正します。

具体的な修正点はGithub - wakamezake/kaggle_submission_pipeline_template#github-actionuploadymlにも記載しているので参考にしてください。

作業用リポジトリへのpush

CloneしてきたリポジトリのGithub Actionsには「pull_requestがされたらKaggle Notebookを生成する」というワークフローを設定してあります、適当なbranchを切ってpushmergeしてみてください。Github Actionsが正しく動作していればKaggle Notebookが生成されているはずです。

説明は以上になります。

おわりに

今回はKaggleへのサブミットをGithub Actionsを使って自動化してみました。前回の記事に書いた課題を解決できたのでとても満足しています。
今回の記事を実践してみてサブミットが自動化されたKaggle Lifeを是非楽しんでください!

最後に、今回作ったKaggleへのサブミット自動化を実際に適用した例を紹介します。検証に使ったコンペはKaggle - petfinder-adoption-predictionで、以下それぞれGithubのリポジトリ、生成されたKaggle Notebookになります。

以上です、最後まで読んで頂きありがとうございました。

参考

GitHubで編集を提案

Discussion

Shinsuke KatsumataShinsuke Katsumata

有益なTipsの共有ありがとうございます。

Github TemplateのURLはGithub - wakamezake/kaggle_submission_pipeline_templateになります。こちらをCloneしてください。
以降Cloneしたリポジトリの中身を修正してゆきます。

Cloneというとローカルにgit cloneするように取れますが、正しくはテンプレートを元に新しいリポジトリを作成するということでしょうか?

wakamewakame

ご指摘頂いた方法が正しい方法になります、指摘頂きありがとうございます。