Slide 1

Slide 1 text

Kaggle役立ちアイテム紹介(入門編) 立松 郁也(@monnu)

Slide 2

Slide 2 text

自己紹介 名前 : 立松 郁也 (@monnu) 仕事 : モビリティ領域でのデータサイエンティスト Kaggle : Kaggle暦5年半 Competitions Grandmaster

Slide 3

Slide 3 text

自己紹介 Kaggleではテーブル、CV、NLPなど雑多に参加してます テーブル 画像 NLP 動画等 テーブル

Slide 4

Slide 4 text

■ 今日はなすこと ■ Kaggleで自分が普段お世話になっているアイテムの雑多な紹介です ■ アイテム = サービス、ツール、Tips、良資料、良Notebook等 ■ 注意事項 ■ 入門者の方向けな内容が多めです ■ 主観が多分に含まれるため一例として見てもらえたらと思います はじめに

Slide 5

Slide 5 text

1. 開発環境編 2. 学習編 3. モデル編 4. その他tips もくじ

Slide 6

Slide 6 text

1. 開発環境編

Slide 7

Slide 7 text

■ なるべく環境構築に時間はかけたくない ■ Kagglerのすべきはモデルの性能向上 ■ さっさと環境は準備して精度向上に集中したい ■ 一方、実装の効率化に役立つツールは活用したい ■ ChatGPTなどを使って開発を効率化できたら嬉しい ■ 特にKaggleは試行錯誤のスピードが大事なので効率化は正義 開発環境の基本方針

Slide 8

Slide 8 text

■ Google Cloud ■ Kaggleとの親和性高いのが嬉しい ■ Kaggle Notebookから簡単に移行可 ■ KaggleとGoogle Cloud Storageの連携 ■ Kaggleやる上でのGoogle Cloudでよく使う機能 ■ Cloud Storage FUSE : https://cloud.google.com/storage/docs/gcs-fuse?hl=ja ■ マシンからCloud Storageをマウントできるツール ■ データ管理、集約が楽になる ■ スナップショット : https://cloud.google.com/compute/docs/disks/snapshots?hl=ja ■ 一度作った環境を保存でき、別コンペでも再利用可 マシン

Slide 9

Slide 9 text

■ Kaggle Docker image(& Nvidia Docker) ■ 自分は全コンペでKaggle公式Dockerイメージを利用 ■ https://github.com/Kaggle/docker-python ■ 豊富なライブラリ ■ コンペで使いそうなライブラリが十分すぎるほど入ってる ■ 新たに環境を構築する際の時間と労力を大幅に削減 ■ 一貫性のある環境 ■ Kaggle Notebook環境と同じ環境を再現できる ■ コードコンペで学習と推論の環境差分に苦しむことがない 環境構築

Slide 10

Slide 10 text

■ 個人的にはCursorがおすすめ ■ VSCodeの派生エディタでChatGPT等のLLM搭載 ■ コードの自動生成、質疑応答が可能 → 実装が大幅に効率化 ■ 参考資料 : AI搭載エディタCursorの紹介と機械学習コンペでの使用レビュー エディタ https://speakerdeck.com/k951286/aida-zai-eteitacursornoshao-jie-toji-jie-xue-xi-konhetenoshi-yong-rehiyu

Slide 11

Slide 11 text

2. 学習編

Slide 12

Slide 12 text

■ PyTorch + PyTorch Lightning ■ なぜPyTorch? ■ 公開コードや論文はPyTorchが多いため取り入れやすい ■ なぜPyTorch Lightning? ■ ゼロからPyTorchの学習ループを毎回書くのはきつい ■ Lightningでは学習ループ周りラップしてくれる ■ WandB等の実験管理ツールを簡単に組み込める ■ Mixed PrecisionやマルチGPU等が簡単に設定可能 パイプライン

Slide 13

Slide 13 text

■ val_check_intervalオプション ■ valを計算する頻度の設定 ■ デフォルト1epoch毎 ■ 例えば過学習しやすいデータ等で、0.1epoch毎にval評価などが可 ■ 過学習前のチェックポイントを保存 ■ 下記のようにtrainerで指定するだけ Pytorch Lightningのちょっと細かい話①

Slide 14

Slide 14 text

■ ModelCheckpoint機能 ■ 学習中のモデルのcheckpointを最良の評価指標等で保存する機能 ■ 複数評価指標がある場合も下記のように各指標のベストモデルを保存可 Pytorch Lightningのちょっと細かい話②

Slide 15

Slide 15 text

■ 実験管理ツールとは? ■ 学習曲線や評価指標など学習結果を記録、可視化するツール ■ WandBやMlflowなどが有名 ■ なぜ必要? ■ どの実験が良かった、悪かったを振り返りが手軽に可能 ■ ロスの推移を見ることで、過学習等に気づきやすい ■ GitのCommit hash等も記録されるため、実験の再現性が向上 実験管理ツール

Slide 16

Slide 16 text

実験管理ツールで過学習に気づけた例(BELKAコンペ) 実験管理ツール val lossが1epoch目で最小!? →1epoch未満で既に過学習しているのでは? →valのチェック頻度を増やすことでスコア向上

Slide 17

Slide 17 text

3. モデル編

Slide 18

Slide 18 text

■ timm : https://github.com/huggingface/pytorch-image-models ■ PyTorch用の画像認識モデル等を提供するライブラリ ■ 幅広い事前学習済モデルをサポートし、手軽に試すことが可能 ■ よく使うバックボーン ■ ViT系 : MaxVit,SwinTransformer ■ CNN系 : EfficientNet系,ConvNeXt系 ■ 使い方のおすすめ資料 ■ Tawaraさんの「backbone としての timm 入門」がおすすめ ■ https://www.slideshare.net/TakujiTahara/20210817-lt-introduction-to-pytorch- image-models-as-backbone-tawara-249996209#2 画像コンペ

Slide 19

Slide 19 text

■ 他の用途別ライブラリ ■ オーグメンテーション : albumentations ■ https://github.com/albumentations-team/albumentations ■ 物体検出 : YOLOX ■ https://github.com/Megvii-BaseDetection/YOLOX ■ セグメンテーション : segmentation_models.pytorch ■ https://github.com/qubvel-org/segmentation_models.pytorch 画像コンペ

Slide 20

Slide 20 text

■ Huggingface Transformer : https://huggingface.co/docs/transformers/ja/index ■ NLPタスクのための事前学習済みモデル等を提供するライブラリ ■ 多様なNLPタスクに対し、最新のモデルを簡単に試せる ■ よく使われるバックボーン ■ DeBERTaV3系 ■ ここ数年のNLPコンペでは一強な気がする ■ 直近のコンペとかはLLM系も使われてる? ■ 詳しい人教えてください🙇 NLPコンペ

Slide 21

Slide 21 text

■ Trainingツールとしてのtransformers ■ モデルだけでなくNLPタスクのTrainingツールも提供 ■ https://huggingface.co/docs/transformers/ja/main_classes/trainer ■ データローディング、学習、評価などの主要機能を自動化できる ■ 実装例 : k_sさんのPPPMコンペのNotebookがシンプルでわかりやい NLPコンペ https://www.kaggle.com/code/ksork6s4/uspppm-bert-for-patents-baseline-train

Slide 22

Slide 22 text

■ 系列データコンペとは? ■ 時系列データ、センサーデータ、分子データなどのコンペ ■ 系列データはTransformer系、1DCNN系などのモデルがよく使われる印象 ■ 基本的には自前実装になるが、参考になりそうな公開Notebook等の紹介 系列データ

Slide 23

Slide 23 text

Transformer : https://www.kaggle.com/code/iafoss/rna-starter-0-186-lb ■ Stanford Ribonanza コンペのIafossさんのNotebook ■ シンプルなTransformerモデルの実装 系列データ

Slide 24

Slide 24 text

1DCNN : https://www.kaggle.com/code/ahmedelfazouan/belka-1dcnn-starter-with-all-data ■ BELKAコンペのAHさんのNotebook ■ TensorFlow + TPUでのシンプルな1DCONVの実装 ■ 構造がシンプルなのでTorch移行も容易。Torch版の公開Notebookもある ■ https://www.kaggle.com/code/yyyu54/pytorch-version-belka-1dcnn-starter-with-all-data 系列データ

Slide 25

Slide 25 text

LSTM : https://www.kaggle.com/code/yasufuminakama/ventilator-pressure-lstm-starter ■ Ventilator Pressure PredictionコンペのY.NakamaさんのNotebook ■ TorchによるLSTMモデル、WandB連携等を含めたpipeline周りも参考になる 系列データ

Slide 26

Slide 26 text

■ その他おすすめ資料 : https://speakerdeck.com/yu4u/kaggletexue-huxi-lie-tetanotamenoshen-ceng-xue-xi-moterinku ■ yu4uさんの「Kaggleで学ぶ系列データのための深層学習モデリング」がおすすめ ■ Kaggleの最近の系列データコンペの上位解法を振り返りながらモデルリング解説 系列データ

Slide 27

Slide 27 text

■ EMA(Exponential Moving Average) ■ 学習経過とともにモデルweightの加重平均を計算することで学習を安定化 ■ timmのModelEmaV2モジュールなどで実装可能(画像モデルに限らず使用可) ■ https://timm.fast.ai/training_modelEMA ■ Gradient Checkpointing ■ 学習時のGPUメモリ使用量を削減するテクニック ■ 一部の中間層の出力を保存せず必要に応じて再計算することでメモリを節約 ■ 計算コストは増加するものの、小さいGPUメモリでも学習が可能に ■ timmやtransformersで簡単に設定できる(モデルによっては非対応の場合あり) ニューラルネット全般のテクニック timmの実装例 transformersの実装例

Slide 28

Slide 28 text

4. その他tips

Slide 29

Slide 29 text

■ reduce_mem_usage関数 ■ DataFrameのメモリ効率化の有名関数 ■ 低い精度の型で表現できるなら精度を 落とした型を使う ■ home creditコンペのNotebookより https://www.kaggle.com/code/gemar tin/load-data-reduce-memory-usage 大規模データの扱い

Slide 30

Slide 30 text

■ np.memmap & h5py ■ どちらもメモリに乗り切らない大規模データを扱う際に便利 ■ データをディスク上に保持しながら部分的にメモリにロード ■ 個人的な使い分け ■ memmap : 固定長配列の場合 ■ h5py : 固定長以外、複雑な階層データ等の場合 ■ np.packbits ■ 大規模なブール配列を省メモリで扱える ■ ビット配列をバイト配列に圧縮することでメモリ効率化 大規模データの扱い

Slide 31

Slide 31 text

■ 高性能CPUマシンとしてのTPU Notebook ■ CPUコア48, メモリ334 GBであり、CPUマシンとしても高スペック ■ 大規模データの前処理等で非常に役立つ ■ 捕まらないことも多いが、動作確認済みのNotebookをcommitして放置でOK ■ ただしTPU使わない処理だと一定時間で切られるらしい Kaggle Notebook tips

Slide 32

Slide 32 text

■ 無限データセットアップロード? ■ KaggleのDatasetはプライベートの場合、1人あたり214.75Gibの制限ある ■ コードコンペで大量にモデルをアップする場合、制限が問題になる ■ 一方で、Kaggle Notebookの出力ファイルは制限なし ■ そのため以下の手順で無限にアップロード可能 1. Dataset アップロード 2. Notebookで読み込み&出力 3. 元のDataset削除 Kaggle Notebook tips Google Cloud Storageと連携 するとさらにラクに可能

Slide 33

Slide 33 text

■ Papers with code : https://paperswithcode.com/sota ■ 様々なベンチマークでのSOTA論文とその再現実装へのリンクが集約 ■ 参加中のコンペに似たタスクのSOTAの手法、実装を手軽に調査 その他役立ちサイト・ツール https://paperswithcode.com/sota/image-classification-on-imagenet

Slide 34

Slide 34 text

■ Kaggle Notebook Translation Helper : https://github.com/bilzard/kaggle-notebook-translation-helper ■ Kaggle公開Notebookはcrome翻訳がうまくできず英語を読む必要がある ■ bilzardさん開発のcrome拡張ツールを使うとcromeからいい感じに翻訳できる その他役立ちサイト・ツール

Slide 35

Slide 35 text

■ ML contests : https://mlcontests.com/ ■ Kaggle含めた世界中の開催中のMLコンテストの情報がまとまったサイト ■ データの種類、締め切り、賞金、プラットフォーム等が一覧でみれる ■ Kaggle以外のコンペも気になっている方は探してみてもいいかも? その他役立ちサイト・ツール

Slide 36

Slide 36 text

■ Kaggleで自分がお世話になっているツールやtips等を雑多に紹介させて いただきました ■ 他にもみなさんのおすすめツール等あれば教えて頂けたら嬉しいです ■ 便利アイテムはたくさん活用し、快適なKaggle Lifeを過ごしましょう! まとめ