SlideShare uma empresa 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 …

Mais conteúdo relacionado

Mais procurados

DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)Takuji Tahara
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてSho Takase
 
ドメイン適応の原理と応用
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用Yoshitaka Ushiku
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門joisino
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)RyuichiKanoh
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情Yuta Kikuchi
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリングmlm_kansai
 
モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化Yusuke Uchida
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜Preferred Networks
 
Introduction to Prioritized Experience Replay
Introduction to Prioritized Experience ReplayIntroduction to Prioritized Experience Replay
Introduction to Prioritized Experience ReplayWEBFARMER. ltd.
 
[DL輪読会]Pay Attention to MLPs (gMLP)
[DL輪読会]Pay Attention to MLPs	(gMLP)[DL輪読会]Pay Attention to MLPs	(gMLP)
[DL輪読会]Pay Attention to MLPs (gMLP)Deep Learning JP
 
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII
 
GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)Masahiro Suzuki
 
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究についてMasahiro Suzuki
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門Takuji Tahara
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?Fumihiko Takahashi
 

Mais procurados (20)

DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
 
coordinate descent 法について
coordinate descent 法についてcoordinate descent 法について
coordinate descent 法について
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
 
ドメイン適応の原理と応用
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
研究効率化Tips Ver.2
研究効率化Tips Ver.2研究効率化Tips Ver.2
研究効率化Tips Ver.2
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
 
モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化モデルアーキテクチャ観点からのDeep Neural Network高速化
モデルアーキテクチャ観点からのDeep Neural Network高速化
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
Introduction to Prioritized Experience Replay
Introduction to Prioritized Experience ReplayIntroduction to Prioritized Experience Replay
Introduction to Prioritized Experience Replay
 
[DL輪読会]Pay Attention to MLPs (gMLP)
[DL輪読会]Pay Attention to MLPs	(gMLP)[DL輪読会]Pay Attention to MLPs	(gMLP)
[DL輪読会]Pay Attention to MLPs (gMLP)
 
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
 
GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)
 
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究について
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
 

Semelhante 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
 

Semelhante 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.
 

みんなが知らない 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 …