Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MLコンペ実験テンプレートを作ろう!

kami
March 13, 2025
430

 MLコンペ実験テンプレートを作ろう!

Kaggle GMに学ぶ実験管理 ~2025 spring~ での登壇資料です

kami

March 13, 2025
Tweet

Transcript

  1. © DeNA Co., Ltd. 2 村上(murakami) 直輝 @634kami © DeNA

    Co., Ltd. 自己紹介 引用:https://www.kaggle.com/kami634 Kaggle @kami634 • データサイエンティスト • Kaggle Competitions Grandmaster ◦ 色々なタスクやります ▪ レコメンド ▪ 鳥の音声認識 ▪ 自然言語処理 ▪ 系列データ処理 … • 最近は強化学習をやってます
  2. © DeNA Co., Ltd. 4 コンペに参加していて感じた悩み • 「環境構築に時間がかかって新しいコンペに参加するまで時間がかかる」 • 「コードを上書きしてしまったから前の結果を再現できない!」

    • 「再現のための実験スクリプトが無駄にできてリポジトリが散乱...」 • 「configに書いたハイパラをタイポしたせいで数時間の実験が無駄に...」
  3. © DeNA Co., Ltd. 6 1 完成品がこちら • GitHubのテンプレートリポジトリでMLコンペ用実験テンプレートを用意  →

    コンペのたびに、これを元に新しいリポジトリを作ってベースラインを作成 100スターありがとうございます https://github.com/unonao/kaggle-template
  4. © DeNA Co., Ltd. 7 完成品がこちら • {major_exp_name} と {minor_exp_name}

    の 組み合わせで実験が再現できるようにする 1 • 実験結果は W&B に保存 実験コード本体 パラメータ設定
  5. © DeNA Co., Ltd. 9 • 同一の環境を素早く構築をしたい! ◦ 違うマシンでも動くように素早く環境構築をしたい (GCPでインスタンスを複数立てる事があるため)

    ◦ 特にKaggle Notebook と実験環境の差異がなるべく小さくしたい • 実験の記録を簡単に取りたい! ◦ 実験ごとの評価結果から、マシンのメモリやCPU使用率まで簡単に記録したい • 実験を再現可能にしたい • コードを整理したい • Configを利用する時にタイポしたくない! (私が個人的に ) 満たしたい実験コードの条件
  6. © DeNA Co., Ltd. 10 1 • Dockerを利用して同一の環境を素早く構築 ◦ Dockerfile,

    compuse.yaml ファイルに定義することができ、環境自体 の再現が容易に ◦ a a で実行可能 • Kaggle Notebook に近い環境を構築可能 ◦ Kaggle 公式 Docker image が利用できる 同一の環境を素早く構築をしたい! → Docker で実現 https://github.com/Kaggle/docker-python
  7. © DeNA Co., Ltd. 11 同一の環境を素早く構築をしたい! → Docker で実現 •

    Docker 環境内ならディレクトリ構成も Kaggle環境と似た形に ◦ データを /kaggle/input に ◦ 作業ディレクトリを /kaggle/working に • compose.yaml をうまく設定 ◦ リポジトリをいい感じにマウントする 1 compose.yaml
  8. © DeNA Co., Ltd. 12 実験の記録を簡単に取りたい!→ W&B で実験を記録 • Configで設定したパラメータも含めて実験開始時にW&Bに保存

    • 細かいTips ◦ debug 中はわざわざ記録したくない → debug中はmode="disabled"に ◦ コンテナに入り直すたびにW&Bのログインが必要 → $NETRCで指定したファイルにkeyが保存されるので破棄されない位置に指定 2
  9. © DeNA Co., Ltd. 13 3 • hydraを用いてコードとconfigの組み合わせで実験可能に ◦ 例:python

    experiments/exp000_sample/run.py exp=001 ◦ 実験のまとまりを一つのディレクトリ・コードに ▪ 例:exp000_sample/run.py ◦ ハイパーパラメータなどの変更は yaml から読み込む ▪ 例:exp000_sample/exp/001.yaml → 設定ファイルなどをコードの近くに配置することで 認知負荷が抑えられる 実験を再現可能にしたい&コードを整理したい!→ ファイルで実験管理
  10. © DeNA Co., Ltd. 14 Configを利用する時にタイポしたくない!→dataclassの利用 • ハイパラなどの設定を辞書で定義するとタイポしや すいので dataclass

    で定義してやる ◦ エディタは辞書の中まで見て補完してくれない... 4 間違い探し... dataclassでconfigを事前定義 ※ 細かい事言うとhydraで上書きするために omegaconf.DictConfig クラスを利用 (Duck Typing) https://hydra.cc/docs/tutorials/structured_config/minimal_example/