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

Más contenido relacionado

La actualidad más candente

Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西Keigo Nishida
 
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...Deep Learning JP
 
モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化Yusuke Uchida
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理Taiji Suzuki
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual FeaturesARISE analytics
 
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs 【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs Deep Learning JP
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイcvpaper. challenge
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜Jun Okumura
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)RyuichiKanoh
 
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...Deep Learning JP
 
[DL輪読会]End-to-End Object Detection with Transformers
[DL輪読会]End-to-End Object Detection with Transformers[DL輪読会]End-to-End Object Detection with Transformers
[DL輪読会]End-to-End Object Detection with TransformersDeep Learning JP
 
【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)Deep Learning JP
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?hoxo_m
 
Transformerを雰囲気で理解する
Transformerを雰囲気で理解するTransformerを雰囲気で理解する
Transformerを雰囲気で理解するAtsukiYamaguchi1
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep LearningSeiya Tokui
 
ドメイン適応の原理と応用
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用Yoshitaka Ushiku
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some PreliminaryDeep Learning JP
 

La actualidad más candente (20)

Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西
 
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
 
モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
 
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs 【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイ
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
 
[DL輪読会]End-to-End Object Detection with Transformers
[DL輪読会]End-to-End Object Detection with Transformers[DL輪読会]End-to-End Object Detection with Transformers
[DL輪読会]End-to-End Object Detection with Transformers
 
AlphaGoのしくみ
AlphaGoのしくみAlphaGoのしくみ
AlphaGoのしくみ
 
【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)【DL輪読会】Patches Are All You Need? (ConvMixer)
【DL輪読会】Patches Are All You Need? (ConvMixer)
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
Transformerを雰囲気で理解する
Transformerを雰囲気で理解するTransformerを雰囲気で理解する
Transformerを雰囲気で理解する
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep Learning
 
ドメイン適応の原理と応用
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
 

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

Introductionof taskflow
Introductionof taskflowIntroductionof taskflow
Introductionof taskflowharubelle
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」ManaMurakami1
 
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたAnaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたYosuke Onoue
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さんAkira Shibata
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」ManaMurakami1
 
grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015s5yata
 
TensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたTensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたYuya Kato
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Yusuke Fujimoto
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafKenta Oono
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようKenji NAKAGAKI
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門kashew_nuts
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LTKohei KaiGai
 

Similar a みんなが知らない pytorch-pfn-extras (20)

Introductionof taskflow
Introductionof taskflowIntroductionof taskflow
Introductionof taskflow
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
 
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたAnaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみた
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
Runtime c++editing
Runtime c++editingRuntime c++editing
Runtime c++editing
 
Zenkoku78
Zenkoku78Zenkoku78
Zenkoku78
 
grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015
 
TensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたTensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみた
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
Tests and bugreports
Tests and bugreportsTests and bugreports
Tests and bugreports
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
TripleO Deep Dive
TripleO Deep DiveTripleO Deep Dive
TripleO Deep Dive
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
 
Tuning, etc.
Tuning, etc.Tuning, etc.
Tuning, etc.
 

Último

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Último (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

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

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