PFN で開発している深層学習
コンパイラスタックについて
浜地慎一郎
MLSE夏合宿2021
自己紹介
Agenda
Preferred Networks
Preferred Networks
Founded | March 2014 |
Directors | CEO Toru Nishikawa COO Daisuke Okanohara CTO Ryosuke Okuta |
Located | Tokyo, Japan (HQ) Burlingame, CA., US (Preferred Networks America, Inc.) |
Number of Employees | Over 300 Engineers & Researchers (April, 2021) |
Manufacturing
Logistics
Transportation
Bio & Healthcare
Personal Robot
Entertainment
PFN のおもしろポイント
Founded | March 2014 |
Directors | CEO Toru Nishikawa COO Daisuke Okanohara CTO Ryosuke Okuta |
Located | Tokyo, Japan (HQ) Burlingame, CA., US (Preferred Networks America, Inc.) |
Number of Employees | Over 300 Engineers & Researchers (April, 2021) |
Manufacturing
Logistics
Transportation
Bio & Healthcare
Personal Robot
Entertainment
決して小さな会社ではない
PFN のおもしろポイント
Founded | March 2014 |
Directors | CEO Toru Nishikawa COO Daisuke Okanohara CTO Ryosuke Okuta |
Located | Tokyo, Japan (HQ) Burlingame, CA., US (Preferred Networks America, Inc.) |
Number of Employees | Over 300 Engineers & Researchers (April, 2021) |
Manufacturing
Logistics
Transportation
Bio & Healthcare
Personal Robot
Entertainment
そうは言っても
事業が多すぎる!
PFN のおもしろポイント
PFVM
PFVM: Versatile graph compiler
PFVM architecture
Torch
JIT
PFVM Runtime
pytorch
ONNX
inference
PFVM IR
ONNX+
training
Compiler�code gen
MN-Core�IR
Compiler
middle
end
libtorch
+α
OpenVINO
TensorRT
etc.
torch.onnx を使って Python を ONNX に変換
PFVM architecture
Torch
JIT
PFVM Runtime
pytorch
ONNX
inference
PFVM IR
ONNX+
training
Compiler�code gen
MN-Core�IR
Compiler
middle
end
libtorch
+α
OpenVINO
TensorRT
etc.
PFVM が最適化/グラフ変換をする
PFVM architecture
Torch
JIT
PFVM Runtime
pytorch
ONNX
inference
PFVM IR
ONNX+
training
Compiler�code gen
MN-Core�IR
Compiler
middle
end
libtorch
+α
OpenVINO
TensorRT
etc.
ここを切り離して Python 無しでデプロイ
PFVM architecture
Torch
JIT
PFVM Runtime
pytorch
ONNX
inference
PFVM IR
ONNX+
training
Compiler�code gen
MN-Core�IR
Compiler
middle
end
libtorch
+α
OpenVINO
TensorRT
etc.
ここを切り離して Python 無しでデプロイ
Philosophy
PFVM のおもしろポイント
MN-Core
PFVM architecture
Torch
JIT
PFVM Runtime
pytorch
ONNX
inference
PFVM IR
ONNX+
training
Compiler�code gen
MN-Core�IR
Compiler
middle
end
libtorch
+α
OpenVINO
TensorRT
etc.
MN-Core とは
Green 500 にて1位!
3つのワークロードで優位性を確認
発表にエンコードされてる気持ち
発表にエンコードされてる気持ち
MN-Core のおもしろポイント
MN-Core のおもしろポイント
PFVM architecture
Torch
JIT
PFVM Runtime
pytorch
ONNX
inference
PFVM IR
ONNX+
training
Compiler�code gen
MN-Core�IR
Compiler
middle
end
libtorch
+α
OpenVINO
TensorRT
etc.
この箱に PFVM の3倍くらいのコード量があったりする
l1ir
l2ir
l3ir
PFVM
PyTorch Code
l3ir graph
MN-Core�(executable)
ONNX
ONNX+training
Generic Conv
MNTensor
Generic Move
PEVector
Layers
MN-Core�Instructions
Graph simplification
Backprop generation
Code generation for MN-Core
Graph-to-instruction conversion
Instruction scheduling
Memory allocation
l1ir graph
Layout
Planner
l3ir Scheduler
scheduler
l1merge
Address
Planner
l1ir
l2ir
l3ir
PFVM
PyTorch Code
l3ir graph
MN-Core�(executable)
ONNX
ONNX+training
Generic Conv
MNTensor
Generic Move
PEVector
Layers
MN-Core�Instructions
Graph simplification
Backprop generation
Code generation for MN-Core
Graph-to-instruction conversion
Instruction scheduling
Memory allocation
l1ir graph
Layout
Planner
l3ir Scheduler
scheduler
l1merge
Address
Planner
謎の独自用語が
発明されまくっている!
自社開発部分が非常に多い
レイアウトの話
レイアウトの話の例
shape=(12) を 4 分割の 1 階層に配置する例
PE0 | PE1 | PE2 | PE3 |
0 1 2 | 3 4 5 | 6 7 8 | 9 10 11 |
PE0 | PE1 | PE2 | PE3 |
0 4 8 | 1 5 9 | 2 6 10 | 3 7 11 |
レイアウトの話の例
shape=(4, 6) を 4 分割の 1 階層に配置する例
2軸を2分割ずつする、こういう分割もありえる
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) … (0,5) | (1,0) (1,1) … (1,5) | (2,0) (2,1) … (2,5) | (3,0) (3,1) … (3,5) |
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) (0,2) (1,0) (1,1) (1,2) | (0,3) (0,4) (0,5) (1,3) (1,4) (1,5) | (2,0) (2,1) (2,2) (3,0) (3,1) (3,2) | (2,3) (2,4) (2,5) (3,3) (3,4) (3,5) |
レイアウトの話の例
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) … (0,5) | (1,0) (1,1) … (1,5) | (2,0) (2,1) … (2,5) | (3,0) (3,1) … (3,5) |
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) (0,2) (1,0) (1,1) (1,2) | (0,3) (0,4) (0,5) (1,3) (1,4) (1,5) | (2,0) (2,1) (2,2) (3,0) (3,1) (3,2) | (2,3) (2,4) (2,5) (3,3) (3,4) (3,5) |
レイアウトの話の例
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) (0,2) (1,0) (1,1) (1,2) | (0,3) (0,4) (0,5) (1,3) (1,4) (1,5) | (2,0) (2,1) (2,2) (3,0) (3,1) (3,2) | (2,3) (2,4) (2,5) (3,3) (3,4) (3,5) |
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) … (0,5) | (1,0) (1,1) … (1,5) | (2,0) (2,1) … (2,5) | (3,0) (3,1) … (3,5) |
A
B
レイアウトの話の例
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) (0,2) (1,0) (1,1) (1,2) | (0,3) (0,4) (0,5) (1,3) (1,4) (1,5) | (2,0) (2,1) (2,2) (3,0) (3,1) (3,2) | (2,3) (2,4) (2,5) (3,3) (3,4) (3,5) |
PE0 | PE1 | PE2 | PE3 |
(0,0) (0,1) … (0,5) | (1,0) (1,1) … (1,5) | (2,0) (2,1) … (2,5) | (3,0) (3,1) … (3,5) |
A
B
レイアウトの話の例
レイアウトの話の例
他にも難しいソフトウェア課題がもりだくさん
このあたりは実装が大変
このあたりはアルゴリズム的に難しい
まとめ