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

社内CV輪講資料 / PyTorch Lightning

社内CV輪講資料 / PyTorch Lightning

社内のCV輪講で PyTorch Lightningについて共有したときの資料です

「今日から始める PyTorch Lightning」
サンプルレポ:https://github.com/karasawatakumi/monodepth-dev

C31b5afbe1ffb5588b2fe5a9e39b357b?s=128

Takumi Karasawa

April 26, 2021
Tweet

Transcript

  1. 今日から始める PyTorch Lightning 2021.4.23 カラサワ 社内のCV輪講で使用した資料です

  2. confidential Mobility Technologies Co., PyTorch Lightning [Docs] ▪ 3月にPLデビューしていい感じだったので共有。 タイトル通り「今日から始める」人向け、な気がします。 ▪

    ちなみにですが、こういう系の他フレームワークも使ったことない人です。 そのため他フレームワークに比べて、とかはわからず。 はじめに
  3. confidential Mobility Technologies Co., 「さっくり使用機能の豊富さ+不要な頑張りコード排除」 w/ 移行のしやすさ ▪ 形式に則って実装しておけば、引数与えるだけ、とかで豊富な機能を使用できる。 ▪

    ターミナル表示やロギングなど、毎回書くコードの排除。メイン部分だけ実装すれば良い ▪ (個人的には)楽さだけでなく、不要な頑張りコードがないと(=フォーマット整う と)本質部分のコード見やすい ▪ 移行が簡単だった ▪ 移行すること自体に重きが置かれており、それ系の説明わりと整ってる よかったところ
  4. confidential Mobility Technologies Co., あまりないが、 ▪ 自動化されているぶん、 「これって結局どう実行されてるんだっけ、コードの中まで見て確認しないと」 みたいなことは個人的には最初わりとあった ▪

    (バージョン更新まだ多い。) Q. 柔軟性に欠けるかどうか?  A. 今のところ、そう感じたことはなし。 ▪ 用途に合わせて自動更新止めたりも ▪ こういう実装に困った、みたいな話あったら聞きたい 不便だったところ
  5. confidential Mobility Technologies Co., “decoupling the research code from the

    engineering”  (docsより) PLの基本:LightningModule と Trainer LightningModule 基本的にこちらを実装 • init(__init__) • Train loop (training_step) • Validation loop (validation_step) • Test loop (test_step) • Optimizers (configure_optimizers) Trainer こちらはほぼ引数与えるだけ 今までのコードは消してよし • device設定 • logging設定 • profiler設定 • etc. 基本的な使い方
  6. confidential Mobility Technologies Co., データ周りは LightningDataModule 推奨(前スライドのように、DataLoaderのままでも可) 基本的には、 今までの内容を移すだけ ▪

    prepare_data (download, etc) ▪ setup (split, etc) ▪ train_dataloader ▪ val_dataloader ▪ test_dataloader データ周り:LightningDataModule  継承して自分のクラスを実装
  7. confidential Mobility Technologies Co., データ周りは LightningDataModule 推奨(前スライドのように、DataLoaderのままでも可) 基本的には、 今までの内容を移すだけ ▪

    prepare_data (download, etc) ▪ setup (split, etc) ▪ train_dataloader ▪ val_dataloader ▪ test_dataloader データ周り:LightningDataModule  クラス名揃ってないのすいません笑 基本三点セット:Trainer・LightningModule・LightningDataModule
  8. LightningModule Trainer

  9. ・・・ 元々書いてたコード

  10. ・・・ LightningModuleで書くコード ざっくりですが。

  11. confidential Mobility Technologies Co., LightningModule の基本実装(基本関数) モデル定義など。 training loop。 batchを受け取ってロスを返す。

    optimizerの設定。 schedulerもここ。 inference用。 Minimal Example これだけ書けば、学習開始 LightningModuleを継承して自分のクラスを実装
  12. confidential Mobility Technologies Co., LightningModule の基本実装(基本関数) モデル定義など。 training loop。 batchを受け取ってロスを返す。

    optimizerの設定。 schedulerもここ。 inference用。 Minimal Example LightningModuleを継承して自分のクラスを実装 必須なのは training_step だが、 training/validation/testループそれぞれに3つのhook
  13. confidential Mobility Technologies Co., 各ループはそれぞれ3つのhook関数が定義できる *X=traning/validataion/test ▪ X_step ▪ X_step_end

    ▪ X_epoch_end *X_step_endは data parallelのときとか training/validation/test ループとデータフロー 擬似コード。X=trainの場合。 backwardとか含めると trainingの擬似コードはこう
  14. confidential Mobility Technologies Co., loggerの種類によらず共通の書き方。(どのlogger使うかとかはTrainerで) いつloggingするか、も引数で与えるだけ。 ▪ self.log() ▪ self.log_dict():まとめてdictで。

    *他にも引数はあり(docs) logging の仕方 logの記載場所ごとのデフォルト設定
  15. confidential Mobility Technologies Co., https://github.com/karasawatakumi/monodepth-dev/blob/master/src/plmodel.py サンプル

  16. confidential Mobility Technologies Co., (+α)Manual optimization Manual Optimization 自分はまだ使ったことないです

  17. LightningModule Trainer

  18. とりあえず先に、 使ってるコード こうした方がいいとかあれば教えて下さい !

  19. confidential Mobility Technologies Co., どのgpu使用するかはTrainerの引数で。 ▪ 学習コードからは、`.cuda()` などのコードは削除 ▪ 新たなtensorを定義するときは

    `.type_as()` Device LightningModule側の扱い to(self.device) 使ってもよいかと
  20. confidential Mobility Technologies Co., precision=16指定するだけで使用可能 amp_level でレベル指定(参考:nvidia/apex amp level) ▪

    pytorchネイティブのamp機能使うのであれば torch >= 1.6 AMP
  21. confidential Mobility Technologies Co., Checkpoint周り、デフォルトでは最後のエポックを保存。 カスタマイズするならcallbackのひとつである ModelCheckpointを使用 ▪ ディレクトリ名やファイル名 `epoch`とloggingしているメトリック名使える

    ▪ スコアが良いときのみ保存、とかするのであれば monitorでメトリックを指定 ▪ etc. Trainerにcallback引数として与える Callback - ModelCheckpoint
  22. confidential Mobility Technologies Co., Callbackを継承して、使用するhookを実装 Callback - Custom 使用可能なhook一覧 ModelCheckpointの例

  23. confidential Mobility Technologies Co., 学習コードは変えずにTrainerへの引数変えるだけ ▪ tensorboard (default) ▪ wandb

    ▪ … Logger サポートされているLogger コード変えなくていいのは導入簡単でやはり嬉しい (selfからアクセス可能なので明示的に使用も可能)
  24. confidential Mobility Technologies Co., データセットサイズに応じて、気軽にValのタイミングやデータセットの使用量を決めたい Validation settings また、デバッグしたいときとかは 何エポックごとにvalするか 1エポック以下の場合や、

    batch数で決めたり 使用するデータセットの割合 *shuffle=Trueだと 毎回違うサブセットになる
  25. confidential Mobility Technologies Co., 引数指定で簡単にプロファイリング ▪ ”simple” と ”advanced” 選べる

    ▪ ”advanced”は、テキスト出力選ばないと 長すぎてきつかった Profiler ”simple” profilerの結果例 ↓ %の上位から並べてくれるが、ちょっと包含関係とかが分かりづらかったり
  26. confidential Mobility Technologies Co., おまけ:Time comparison +3%くらい [引用元]

  27. confidential Mobility Technologies Co., よかったところ:「さっくり使用機能の豊富さ+不要な頑張りコード排除」 w/ 移行のしやすさ まとめ LightningModule 基本的にこちらを実装

    • init(__init__) • Train loop (training_step) • Validation loop (validation_step) • Test loop (test_step) • Optimizers (configure_optimizers) Trainer こちらはほぼ引数与えるだけ 今までのコードは消してよし • device設定 • logging設定 • profiler設定 • etc. LightningDataModule 基本三点セット