The detailed results are described at GitHub (in English):
https://github.com/jkatsuta/exp-18-1q
(maddpg/experiments/my_notes/のexp1 ~ exp6)
立教大学のセミナー資料(前篇)です。
資料後篇:
https://www.slideshare.net/JunichiroKatsuta/ss-108099542
ブログ(動画あり):
https://recruit.gmo.jp/engineer/jisedai/blog/multi-agent-reinforcement-learning/
The detailed results are described at GitHub (in English):
https://github.com/jkatsuta/exp-18-1q
(maddpg/experiments/my_notes/のexp1 ~ exp6)
立教大学のセミナー資料(前篇)です。
資料後篇:
https://www.slideshare.net/JunichiroKatsuta/ss-108099542
ブログ(動画あり):
https://recruit.gmo.jp/engineer/jisedai/blog/multi-agent-reinforcement-learning/
IMAX3: Amazing Dataflow-Centric CGRA and its Applications
I present this slide to all hungry engineers who are tired of CPU, GPU, FPGA, tensor core, AI core, who want some challenging one with no black box inside, and who want to improve by themselves.
36. 関数の次元数
è 最大4次元までの関数を定義可能
f は3次元の関数(e.g. 3D空間、カラー画像)
f は4次元の関数
Func f;
Var c, x, y;
f(c, x, y) = c + x + y;
Func f;
Var c, x, y, z;
f(c, x, y, z) = c + x + y + z;
37. 関数の参照
è 関数の右辺に定義された関数への参照
– 関数合成が可能
意味: 関数 f2 は定義域 x, y に対して f1(x+y) を値域に持つ
Var x, y;
Func f1;
f1(x, y) = x + y;
Func f2;
f2(x, y) = f1(x, y);
Var x, y;
Func f2;
f2(x, y) = x + y;
38. 式
è 式はExpr型の変数として表される
– 関数: Func
– 誘導変数: Var
– 式: Expr
組み立てた計算式を、式としてとっておくことが出来る
Var x, y;
Expr e = x + y;
Func f;
f(x, y) = e;
Var x, y;
Func f;
f(x, y) = x + y;
39. RDomと畳み込み関数
è 畳み込みを表すためのプリミティブ
– リダクションドメイン: RDom
– RDom(min, extent)
• 指定された次元で[min, min+extent-1]の領域を畳み込み
等価なC++ソースコード
rxは[-1, 1]を動く誘導変数
Var x;
Func f;
f(x) = x;
RDom rx(-1, 3);
Func g;
g(x) = sum(f(x + rx));
for (int x=0; x<width; x++) {
T sum = 0;
for (int rx=-1; rx<2; rx++) {
sum += x + rx;
}
g[x] = sum;
}
+
58. Convolutional Neural Network
è 画像認識に頻繁に使用されるニューラルネットワーク
– 前段にConvolution層/Pooling層を重ねるのが特徴
– 後段で全結合層による分類や回帰を行う
è 推論時のボトルネック
– Convoluton層: 演算数が膨大
– FC層: 重みの容量が膨大
Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning
applied to document recognition. Proceedings of the IEEE, november 1998.
60. FPGA向けアルゴリズム最適化: Log-based Quantization[2]
è初段・最終段のConv/FC層
– 二値化すると精度の低下が激しい
è初段・最終段のConv/FC層の入力と重みを
対数量子化
– ラインバッファ・重みの容量を削減
– 積算がシフト演算で計算可能
• 今回はlog2-baseで量子化
Dataset Network
Accuracy
fixed-32 2-base log2-base
MNIST LeNet-5 98% 95% 98%
CIFAR-10 NIN 89% 66% 82%
[2] Miyashita, D. et al., “Convolutional Neural Networks using Logarithmic Data Representation”, https://arxiv.org/abs/1603.01025
61. Halide DSLによる量子化MNIST実装
è 各層は適当に融合してモジュール化
– 低レイテンシ化
– 省リソース化
– パフォーマンスとモジュラリティの両立
è モジュール間はコンパイラの最適化によりストリーム化
– シーケンシャルアクセスになるよう
各モジュール内部でウィンドウレジスタ+ラインバッファでバッファリング
Norm&Quant Conv BN ReLU Pooling BN
Conv ReLU Pooling
Scale Active
BN Scale Active FC ReLU FC
M0 M1 M2 M3 M4 M5 M6
62. Halide DSLによる量子化MNIST実装
è パイプライン全体のスループットは?
– モジュールの演算スループット、モジュール間のI/Oス
ループットのもっとも低い部分に引っ張られる
M0
CU
CU
CU
M1
CU
CU
CU
M2
CU
CU
CU
M3
CU
CU
CU
M4
CU
CU
CU
M5
CU
CU
CU
M6
CU
CU
CU
CU=Computing Unit
63. Halide DSLによる量子化MNIST実装
è 量子化MNISTの場合(バッチサイズ=1)
– デフォルト(スループット未調整)の状態では、
第2層目のConvolutionの演算(M3)がボトルネック
M0
CU
M1
CU
M2
CU
M3
CU
M4
CU
M5
CU
M6
CU
28x28
=784
5x5x20x28x28
=392000
2x2x20x24x24
=46080
20x5x5x50x12x12
=3600000
2x2x50x8x8
=12800
50x4x4x500
=400000
500x10
=5000
3600000cycle=40FPS(150MHz)
(単位:iteration)
64. Halide DSLによる量子化MNIST実装
è 量子化MNISTの場合(バッチサイズ=1)
– 畳み込みの入力チャネル層を2unrollすると
全体性能も倍になる
M0
CU
M1
CU
M2
CU
M3 M4
CU
M5
CU
M6
CU
28x28
=784
5x5x20x28x28
=392000
2x2x20x24x24
=46080
10x5x5x50x12x12
=1800000
2x2x50x8x8
=12800
50x4x4x500
=400000
500x10
=5000
CU
CU
conv2_sum.update().unroll(rc, 2);
1800000cycle=80FPS(150MHz)
(単位:iteration)