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

Takumi Karasawa

April 26, 2021
Tweet

More Decks by Takumi Karasawa

Other Decks in Research

Transcript

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

    View full-size slide

  2. confidential
    Mobility Technologies Co.,
    PyTorch Lightning [Docs]
    ■ 3月にPLデビューしていい感じだったので共有。
    タイトル通り「今日から始める」人向け、な気がします。
    ■ ちなみにですが、こういう系の他フレームワークも使ったことない人です。
    そのため他フレームワークに比べて、とかはわからず。
    はじめに

    View full-size slide

  3. confidential
    Mobility Technologies Co.,
    「さっくり使用機能の豊富さ+不要な頑張りコード排除」 w/ 移行のしやすさ
    ■ 形式に則って実装しておけば、引数与えるだけ、とかで豊富な機能を使用できる。
    ■ ターミナル表示やロギングなど、毎回書くコードの排除。メイン部分だけ実装すれば良い
    ■ (個人的には)楽さだけでなく、不要な頑張りコードがないと(=フォーマット整う
    と)本質部分のコード見やすい
    ■ 移行が簡単だった
    ■ 移行すること自体に重きが置かれており、それ系の説明わりと整ってる
    よかったところ

    View full-size slide

  4. confidential
    Mobility Technologies Co.,
    あまりないが、
    ■ 自動化されているぶん、
    「これって結局どう実行されてるんだっけ、コードの中まで見て確認しないと」
    みたいなことは個人的には最初わりとあった
    ■ (バージョン更新まだ多い。)
    Q. 柔軟性に欠けるかどうか?  A. 今のところ、そう感じたことはなし。
    ■ 用途に合わせて自動更新止めたりも
    ■ こういう実装に困った、みたいな話あったら聞きたい
    不便だったところ

    View full-size slide

  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.
    基本的な使い方

    View full-size slide

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

    View full-size slide

  7. confidential
    Mobility Technologies Co.,
    データ周りは LightningDataModule 推奨(前スライドのように、DataLoaderのままでも可)
    基本的には、
    今までの内容を移すだけ
    ■ prepare_data (download, etc)
    ■ setup (split, etc)
    ■ train_dataloader
    ■ val_dataloader
    ■ test_dataloader
    データ周り:LightningDataModule 
    クラス名揃ってないのすいません笑
    基本三点セット:Trainer・LightningModule・LightningDataModule

    View full-size slide

  8. LightningModule
    Trainer

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. confidential
    Mobility Technologies Co.,
    LightningModule の基本実装(基本関数)
    モデル定義など。
    training loop。
    batchを受け取ってロスを返す。
    optimizerの設定。
    schedulerもここ。
    inference用。
    Minimal Example
    LightningModuleを継承して自分のクラスを実装
    必須なのは training_step だが、
    training/validation/testループそれぞれに3つのhook

    View full-size slide

  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の擬似コードはこう

    View full-size slide

  14. confidential
    Mobility Technologies Co.,
    loggerの種類によらず共通の書き方。(どのlogger使うかとかはTrainerで)
    いつloggingするか、も引数で与えるだけ。
    ■ self.log()
    ■ self.log_dict():まとめてdictで。
    *他にも引数はあり(docs)
    logging の仕方
    logの記載場所ごとのデフォルト設定

    View full-size slide

  15. confidential
    Mobility Technologies Co.,
    https://github.com/karasawatakumi/monodepth-dev/blob/master/src/plmodel.py
    サンプル

    View full-size slide

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

    View full-size slide

  17. LightningModule
    Trainer

    View full-size slide

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

    View full-size slide

  19. confidential
    Mobility Technologies Co.,
    どのgpu使用するかはTrainerの引数で。
    ■ 学習コードからは、`.cuda()` などのコードは削除
    ■ 新たなtensorを定義するときは `.type_as()`
    Device
    LightningModule側の扱い
    to(self.device) 使ってもよいかと

    View full-size slide

  20. confidential
    Mobility Technologies Co.,
    precision=16指定するだけで使用可能
    amp_level でレベル指定(参考:nvidia/apex amp level)
    ■ pytorchネイティブのamp機能使うのであれば torch >= 1.6
    AMP

    View full-size slide

  21. confidential
    Mobility Technologies Co.,
    Checkpoint周り、デフォルトでは最後のエポックを保存。
    カスタマイズするならcallbackのひとつである ModelCheckpointを使用
    ■ ディレクトリ名やファイル名
    `epoch`とloggingしているメトリック名使える
    ■ スコアが良いときのみ保存、とかするのであれば
    monitorでメトリックを指定
    ■ etc.
    Trainerにcallback引数として与える
    Callback - ModelCheckpoint

    View full-size slide

  22. confidential
    Mobility Technologies Co.,
    Callbackを継承して、使用するhookを実装
    Callback - Custom
    使用可能なhook一覧
    ModelCheckpointの例

    View full-size slide

  23. confidential
    Mobility Technologies Co.,
    学習コードは変えずにTrainerへの引数変えるだけ
    ■ tensorboard (default)
    ■ wandb
    ■ …
    Logger
    サポートされているLogger
    コード変えなくていいのは導入簡単でやはり嬉しい
    (selfからアクセス可能なので明示的に使用も可能)

    View full-size slide

  24. confidential
    Mobility Technologies Co.,
    データセットサイズに応じて、気軽にValのタイミングやデータセットの使用量を決めたい
    Validation settings
    また、デバッグしたいときとかは
    何エポックごとにvalするか
    1エポック以下の場合や、
    batch数で決めたり
    使用するデータセットの割合
    *shuffle=Trueだと
    毎回違うサブセットになる

    View full-size slide

  25. confidential
    Mobility Technologies Co.,
    引数指定で簡単にプロファイリング
    ■ ”simple” と ”advanced” 選べる
    ■ ”advanced”は、テキスト出力選ばないと
    長すぎてきつかった
    Profiler
    ”simple” profilerの結果例
    ↓ %の上位から並べてくれるが、ちょっと包含関係とかが分かりづらかったり

    View full-size slide

  26. confidential
    Mobility Technologies Co.,
    おまけ:Time comparison
    +3%くらい
    [引用元]

    View full-size slide

  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
    基本三点セット

    View full-size slide