O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

6

Compartilhar

みんなが知らない pytorch-pfn-extras

[第2回分析コンペLT会 & 雑談会、オンライン開催](https://kaggle-friends.connpass.com/event/214854/) での発表資料です。

認知度の低い pytorch-pfn-extras と、知られざる Config System を大ぱっざに紹介しました。

みんなが知らない pytorch-pfn-extras

  1. 1. みんなが知らない pytorh-pfn-extras 2021/06/18 第二回分析コンペLT会 オンライン @tawatawara
  2. 2. 自己紹介 JTC Kaggler(絶滅危惧種) ◦ 研究開発(?)職 ◦ 社会人からMLを始める Kaggle Master ◦ GMになりたい. . . 最近の活動 ◦ 宇宙人と discommunication
  3. 3. Q. PyTorch の Training で 何を使ってますか?
  4. 4. Q. PyTorch の Training で何を使ってますか? 選択肢 得票数 Lightning 56 Ignite 2 pfn-extras 4 Catalyst 7 自作ライブラリ 38 その他 36 合計 143 Lightning さんの僅か 1/14! この発表の意味…
  5. 5. Q. PyTorch の Training で何を使ってますか? 選択肢 投票数 Lightning 56 Ignite 2 pfn-extras 4 Catalyst 7 自作ライブラリ 38 その他 36 合計 143 自作 + その他 が半分 この人たちを pfn-extras 勢に…
  6. 6. pytorch-pfn-extras? “Supplementary components to accelerate research and development in PyTorch.” (公式レポジトリより) ◦ 独自の Trainer を持たない ◦ 基本的に training loop は自前で書く(Ignite との連携は可能) ◦ 主な機能: 学習停止の制御(Early Stopping など), ログ出力, モデルの保存 ◦ 各機能を Extensions と呼ばれる Classとして実装 ◦ Extensions を管理する Extensions Manager を training loop に組み込むだけで利用可 「過度な抽象化はNG」「今まで Training Tool を使ったことが無い」 という方に向いてるかも
  7. 7. おことわり どういう機能があるかといったイメージだけお伝えします ◦ 詳細な使い方については説明しません PyTorch による NN の training の基本は既知とします ◦ 生の Training Loop を書いたことがあれば問題ないです 使用例は最後に紹介する Notebook で勘弁してください ◦ GitHub に examples を用意しようと思っていた時もありました...
  8. 8. Start from Basic Training Loop 必要最小限 の code ◦ max_epoch だけ mini batch training を行う ◦ 重みの更新と言う意味でこれが最小限 色々足りない . . . ◦ validation set での性能確認 (+Early Stopping) ◦ 学習の経過の確認 (標準出力, log ファイル) ◦ 学習途中の model の保存 ◦ validation set に対する loss/metric が良いもの これらを自分で書くと結構大変… -> ライブラリに頼ろう!
  9. 9. Basic Training Loop w/ ExtensionsManager とりあえず組み込んでみた形 Training Loop に対する変更点 ① 一番外側の loop ◦ 学習の停止を manager が管理 ② mini batch loop 内の with 文 ◦ 基本的に 1 iteration 毎に処理を行う ◦ iteration, epoch のカウント ③ loss の reporting ◦ 内部的に値を保持 ◦ 後ほど紹介する Extensions で確認できる
  10. 10. Basic Training Loop w/ ExtensionsManager この時点では Extensions 無し ◦ 各 Epoch での loss が(内部的に)保持さ れてるくらいしか違いが無い この後 ◦ Manager に Extensions を追加すること で様々な機能を使用する ◦ Training Loop の形には基本影響しない ◦ 複雑な学習方法を loop 内で実装したりする 際にやりやすい
  11. 11. Extensions の追加(一例) ◦ manger.extend で追加 ◦ ※manager の初期化時に渡すや り方もあります ◦ Trigger を指定することも可能 ◦ Training Loop はいじらない
  12. 12. Trigger: Extensions のタイミング制御 ◦ 基本: IntervalTrigger ◦ N epoch 毎, N iterations 毎 を指定 ◦ 多くのものは 1 epoch 毎がデフォルト ◦ 例で挙げたもの(右) もそう ◦ よく使う:値を参照する Trigger ◦ MinValueTrigger, MaxValueTrigger など ◦ 主に Model の保存(右)で活躍 ◦ EarlyStoppingTrigger ◦ 文字通り Early Stopping のためのもの ◦ Manager に紐づく少し例外的な Trigger
  13. 13. Evaluator: validation data に対する推論 ◦ eval_func を定義する必要あり ◦ unpack した mini batch を引数に 取り推論を実行する ◦ eval_func を返す関数を実装するの がおすすめ ◦ 注意点:loss/metric の集計 ◦ LogReport の起動時に集計される ◦ macro 平均になってしまう ◦ AUCなど全体で計算するものが困る ◦ 解決方法はありますが割愛
  14. 14. Extensions for Standard Output ◦ PrintReport : 学習過程を標準出力 ◦ これが見たくて使ってるところある ◦ ProgressBar: 学習の進捗を出力 ◦ 所要時間が分かりやすい ◦ 注意:Evaluator の時間を無視して 残り時間を計算している ◦ TensorBoard 使えばいいのでは
  15. 15. Extensions for Logging ◦ LogReport : ログファイルを Json で出力 ◦ 因みに TensorBoard にも対応できる(らしい) ◦ PlotReport: loss 等のグラフを .png で出力 ◦ TensorBoard とかで(略)
  16. 16. Extensions for snapshot ◦ 任意の object を指定して途中経過を保存 ◦ Trigger を指定しない場合は 1 epoch 毎 ◦ 基本的には val metric[loss] を指定した Max[Min]ValueTrigger を併用 ◦ loss と metric の両方を見て保存したいなら両方追加すれば良い(以下)
  17. 17. 色々追加した結果 Code 量がそれなりに嵩む ◦ eval_func 含めて Basic Training Loop の 5~6倍ぐらい? ◦ Training Loop そのものは短い ◦ 量は嵩むが、Manager, Extensions, Trigger の概念で機能拡張がされるの で全体としてまとまる ◦ 自前で書くと Loop 内がゴチャゴチャ するのが容易に想像出来る
  18. 18. ここまで pytorch-pfn-extras とは? ◦ PyTorch の開発を促進するための補助ツール ◦ 主な機能:学習の制御、ログの出力、model の保存など ◦ 初歩的な Training Loop から乖離の少ない形で導入が出来る ◦ Extensions とそれらを統制する Manager によって実現 ◦ code 量は嵩むが、様々な機能を統一概念で追加できるので全体がまとまる ◦ 細かい書き方については実例を見た方が早いかも ◦ 公式レポジトリの example ◦ pytorch-pfn-extrasが便利という話 - deoxy’s diary ◦ 【pytorch-pfn-extras+Ignite】画像分類のワークフロー解説 - ころがる狸
  19. 19. みんなが更に知らない Config Systems
  20. 20. Config Systems? Config File のための拡張機能 pfn-extras 使いですら知らない可能性がある ◦ そもそも公式の examples で使われていない ◦ docs も非常に簡素 (どう使うの?) ◦ LT にあたって調査したところ予想以上に便利 自己流ですが使用例をちょっとだけ紹介します
  21. 21. 基本的な使い方(公式 docs より) dict と list がネストしたオブジェクトを引数として初期化 ◦ 例えば読み込んだ YAML ファイルを入れる(左) ◦ 格納された値には path 形式でアクセス出来る(右)
  22. 22. 根幹機能1:別の値の参照 ◦ ”@” で path を指定することで、アクセス 時に指定先の値に置換される ◦ 右の例も公式 docs より ◦ config file 内で同じ値を書くことはしばしば あるので、地味に嬉しい機能 ◦ 例:augmentation のために同じ画像サイズを 複数の場所に書く ◦ 相対パスも指定可能(右下)
  23. 23. 根幹機能2:callable な object での置換 ◦ str -> callable object の辞書を用意することで object の置換ができる ◦ 該当する `type` と同階層にあるものを引数として call される ◦ types の辞書は必要だが、get_XXX 系の関数が必要なくなる ◦ ※この例には top level のものしか入ってませんが nest した構造の中でも適用されます
  24. 24. 二つを組み合わせると. . .? 例えば model -> optimizer -> scheduler を cfg から直に呼べる ◦ optimizer は model.parameters(), scheduler は optimizer を引数にとるが、 置換機能を組み合わせることで置換後の object を引数に取れる
  25. 25. 他の使用例 ◦ dataset -> dataloader もほぼ同様 ◦ ※dataset に工夫が必要かも ◦ config file 内に albumentations による data augmentation をそのまま書ける ◦ もうオレオレ parser は要らない ◦ 前半で紹介した extensions なども全部 config にぶち込める ◦ types の 辞書が膨れ上がるけど… ◦ ほぼ定型なので、どこかに固めておけばあま り気にならない
  26. 26. Kaggle Notebooks での使用例 以下を Config 内で閉じ、cfg[“XXX”] でインスタンス取得 ◦ Model, Optimizer, Scheduler ◦ Dataset(albumentations 込み), DataLoader ◦ Loss, Metric ◦ ExtensionsManager, Extensions(Evaluator 以外) https://www.kaggle.com/ttahara/seti-e-t-resnet18d-baseline
  27. 27. Kaggle Notebook での使用例 ◦ 前半の例でかなり場所を取っていた Manager, Extensions は全て config file 内に ◦ 別の場所の記述が増えるもののスッキリ ◦ ※ここには記載してませんが、config_types や config file(YAML) はかなり記述量が増えます
  28. 28. まとめ pytorch-pfn-extras を紹介 ◦ 様々な機能を manager と extensions の枠組みで追加できる ◦ 素の Training Loop をほぼ崩さないので、初学者には優しい? 知られざる Config Systems の紹介 ◦ get_XXX 関数を撲滅し、Training を行う関数が更にスッキリ 一見良さそうだが…? ◦ システム的に複雑なことをするのは自前で頑張る必要あり ◦ 複数のGPUでの並列学習, AMP Training, Gradient Accumulation …
  • YuSaito

    Aug. 11, 2021
  • ReoOno

    Jul. 23, 2021
  • ssuser534098

    Jul. 11, 2021
  • KazukiHosoya1

    Jul. 6, 2021
  • kenthosono

    Jun. 18, 2021
  • HironobuKawaguchi

    Jun. 18, 2021

[第2回分析コンペLT会 & 雑談会、オンライン開催](https://kaggle-friends.connpass.com/event/214854/) での発表資料です。 認知度の低い pytorch-pfn-extras と、知られざる Config System を大ぱっざに紹介しました。

Vistos

Vistos totais

1.950

No Slideshare

0

De incorporações

0

Número de incorporações

658

Ações

Baixados

0

Compartilhados

0

Comentários

0

Curtir

6

×