WandB を活用して Kaggle に挑戦する!
はじめに
- 本記事は関東 Kaggler 会の LT で使用したものです。
- 最近はスライドよりマークダウンの方がお気に入りのため、 Zenn を使って発表します。
- 実際の Notebook や WandB の結果も公開しており、 LT ではそちらも参照します。
- 10 分程度の発表を想定していますので、 WandB の機能など詳細については触れません。
- Kaggle に関しては完全に初心者です。
- これまで獲得したのは Competitions の銅メダルひとつのみです。
- 本業ではデータ事業の立ち上げをしていますが、コードを書く機会はあまりありません。
WandB と実務
自分は普段、エンジニアの作った WandB の Report をいつも「すごいですね!」などと言いながら読んでいますが、そのなかで便利だなと感じる点がいくつかあります(実験管理のサービス全般に言えることかもしれません)。
- Notebook と Report とを分離できること
- 複数の実験結果をひとつのドキュメントとして表示できること
なお、 Weights & Biases Docs では以下のようなものが紹介されています。
- Report: SafeLife Benchmark Experiments
担当者以外の人間が Notebook を 1 件ずつ見て内容を理解し、さらにそれらを比較するのはかなり大変です。実務では基本的にチームでナレッジを共有するために利用していますが、今回はその WandB を Kaggle で利用するとどうなるのかを見てゆきたいと思います!
WandB と Kaggle
ここでは作業内容と簡単なポイントのみをまとめます。実験と結果については実物を見ながら確認してゆきましょう。
- Notebook: Kaggle with WandB
- Project: GLRet2021
0. 対象を決める
すでに WandB を組み込んだ Notebook がいくつか公開されているので、今回は以下をベースにして議論を進めます。 WandB と Kaggle との関係性を見るのが目的のため、込み入ったことはせず、最低限の変更で動きを確認します。
- Competition: Google Landmark Retrieval 2021
- Baseline: [Pytorch + W&B] GLRet 2021 by Debarshi Chanda
1. Baseline を確かめる
上記の Baseline をコピーして実行してみます(Version 1)。ただし、そのままではうまく動かないライブラリがあったため、設定を「Always use latest environment」としました。
ここでは Visualization と Train のふたつの情報を記録していますが、両者とも run = wandb.init()
で初期化し、 wandb.log()
でログを残したのち、 run.finish()
で終了するという流れは変わらず、とてもシンプルです。
2. パラメータを変更して実行する
比較のために learning_rate
を何度か変更して実行します(Version 2 / Version 3)。 Visualization は最初だけできればよいので、該当箇所をコメントアウトしました。
通常、それぞれの実行結果(WandB 上の Run)は kind-eon-1
のような名前が勝手につきますが、今回はわかりやすいように名称を変更しています。 Workspace を見ればわかるとおり、特に WandB の設定をいじらなくとも同じフォーマットでログが記録されるので便利です。
3. 実験結果を比較する
さらに細かい情報を見るために Runs を確認してみます。ここには wandb.init()
の config
で指定した内容が記録されています。また、実行時間なども一覧でチェックできます。
実は学習の関数のなかに run.summary["Best Accuracy"] = best_epoch_acc
という行がありますが、その値もこのテーブルに含まれています。たとえば、 learning_rate
と best_epoch_acc
の関係を見ながら細かくチューニングするようなことが可能です。
挑戦して(試して)みた結果
時間の制約もあり、かなり限定的な使い方しかご紹介できなかったかと思いますが、今回の所感を簡単にまとめておきます。
- スプレッドシートを使っての管理と比較すると、非常に体験がよかったです。パラメータ等を転記する必要がないですし、何より視覚的に結果を比べることができます。
- 実務においては Report まで書いてあると情報共有がしやすいですが、管理コストがかかりすぎるため、 Kaggle では Run 単位で実験を見るのが有効になりそうです。
- どのようなツールを使うにせよ、 LB の管理には工夫がいると感じました。 Submit 後に得られる情報なので、 CV などと対応させるためには結局転記が必要となるからです。
- WandB を使うのであれば、それぞれの Run の Notes にその情報を記載するのが最適なのかなと現時点では考えています。
その他の活用方法や別の実験管理サービスなど、ご存知の方は今日この会場にもたくさんいらっしゃると思うので、機会があればぜひ教えていただけるとうれしいです。ご清聴ありがとうございました!
Discussion