2値化cnn on fpgaでgpuとガチンコバトル(公開版)

79
2値化CNN on FPGAで GPUとガチンコバトル 中原 啓貴 (東京⼯業⼤学) 2017年2⽉27⽇, TFUG HW部 @Google Japan オフィス

Upload: hiroki-nakahara

Post on 12-Apr-2017

4.631 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化CNN on FPGAでGPUとガチンコバトル中原 啓貴 (東京⼯業⼤学)

2017年2⽉27⽇, TFUG HW部@Google Japan オフィス

Page 2: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

⾃⼰紹介• Hiroki Nakahara (中原 啓貴)• 36歳 (若⼿…︖)• JK@⽇本⼀モテない⼤学の教員• FPGA/ディープラーニングは⽣活の糧• FPGAは専⾨ではありません

(HDLを書くようになったのは学位を取ってから, ⾼位合成を始めたのはʼ15年)• 多値論理と論理関数の複雑度が専⾨

2

Page 3: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Custom Computing Machine

3

Multi‐valued logic Pattern matching circuit• Regular expressionmatching circuit

• Packet classifier• IP address look‐up

40m

Radio telescopeDeep neural network

Page 4: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

内容• エッジでディープラーニング• FPGAとは︖• CNN (Convolutional Neural Network)の復習• 2値化CNN (Convolutional Neural Network)• ⾼位合成を使った2値化CNNの実現• 2値化CNNの性能評価• まとめ

4

Page 5: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

エッジでディープラーニング

5

Page 6: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

AIはどこにでも︕

6

Page 7: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

AIにおけるDeep Neural Network (DNN)

7J. Park, “Deep Neural Network SoC: Bringing deep learning to mobile devices,” Deep Neural Network SoC Workshop, 2016.

Brain Inspired

AIMachine Learning

Deep LearningDNN RNN

Silicon retina

Neuromorphic

Attentionbased processing

Electroniccochlea

Bio‐mimic

Fuzzy logic

Knowledgerepresentation

Natural lang.proc.

Geneticalgorithm

SVMDecision TreeK‐nearestneighbor

Bayesian

Page 8: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Deep Neural Networkの認識精度

8

0

5

10

15

20

25

30

2010 2011 2012 2013 2014 2015 Human

認識

精度

[%]

Year

Deep ConvolutionalNeural Network (CNN)による劇的な改善

⼈の認識精度を上回る

O. Russakovsky et al. “ImageNet Top 5 Classification Error (%),” IJCV 2015.

Page 9: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

DNNが台頭した背景

9

⾼性能コンピュータ&⼤規模データに加えアルゴリズムの発展が後押し

(左): “Single-Threaded Integer Performance,” 2016(右): 中原, “インターネットにおける検索エンジンの技術動向,” 2014

Page 10: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

ディープラーニングの開発環境

村上, “ディープラーニング最新動向と技術情報〜なぜGPUがディープラーニングに向いているのか,” 201610

学会…CAFFE, 開発事例…Tensorflow(⽇本ではChainerを聞くことが多くなってきた)

Page 11: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

応⽤事例: K-Glass

11https://www.youtube.com/watch?v=fzQpSORKYr8

Page 12: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

組込み(エッジ)でディープラーニング• クラウドでの問題

• ネットワーク遅延• プライバシー• セキュリティ

• 学習はオンライン,推論だけ⾏うことを想定

• 検討事項• 計算能⼒• バッテリ• 冷却ファン• バッテリ時間

12

Page 13: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

FPGAとは?

13

Page 14: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

FPGA?• Field(現場で)• Programmable(書き換えができる)

• Gate(論理ゲートの)• Array(集合体)

14

PCIに刺してGPUの代わりにアクセラレータ (Altera社)

指先よりも小さいよ!(Lattice社)

ラズパイにのっけて高速化(Xilinx社)

iPhone7にも!!

Page 15: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

FPGAの基本的な構造

15

SB SB SB SB

SB SB SB SB

SB SB SB SB

SB SB SB SB

LUT LUT LUT

LUT LUT LUT

LUT LUT LUT

IO IO IO IO IO IO

IO IO IO IO IO IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

Look-UpTable (LUT)

I/O Block

Channels

Switch Blocks

Page 16: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

LUTを使った論理ゲートの実現x0 x1 x2 y0 0 0 00 0 1 00 1 0 00 1 1 01 0 0 01 0 1 01 1 0 01 1 1 1

x0 x1 x2 y0 0 0 00 0 1 10 1 0 10 1 1 11 0 0 11 0 1 11 1 0 11 1 1 1

LUTの出⼒を書き換えて様々な論理ゲートを実現 16

Page 17: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

ChannelとSwitch Block

LUTどちらもトランジスタのスイッチ

17

Page 18: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Programmable=メモリ書き換え

18

SB SB SB SB

SB SB SB SB

SB SB SB SB

SB SB SB SB

LUT LUT LUT

LUT LUT LUT

LUT LUT LUT

IO IO IO IO IO IO

IO IO IO IO IO IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

IO

Page 19: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

FPGAの対象=論理回路

19

module hoge(input a, b, c;output d);

assign d = (a & b) | c;

endmodule

Xilinx社

Altera社

実現したい論理回路をハードウェア記述⾔語で書く(Verilog HDL/ VHDL)

FPGAベンダーが提供するCADツールでビットストリームに合成する

FPGAにビットストリームを送信して回路が実現︕

Page 20: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Convolutional Neural Network(CNN)の復習

20

Page 21: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Artificial Neuron (AN)

+

x0=1

x1

x2

xN

...

w0 (Bias)

w1

w2

wN

f(u)u y

xi: Input signalwi: Weightu: Internal statef(u): Activation function (Sigmoid, ReLU, etc.)y: Output signal

y f (u)

u wixii0

N

21

Page 22: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Deep Neural Network

22

happy

sad

mad

curious

出典: imotionsglobal.com

Page 23: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

LeNet-5• CNNのベース (1980年に福島先⽣がネオコグニトロンをすでに発表済み!!)

• 畳込み(特徴抽出)→フル結合(分類)• 5層

Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998. 23

Page 24: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

畳込み演算1 0 1 1

1 1 1 0

0 1 0 0

1 1 0 1

1 1 1 0

0 1 1 0

0 0 0 0

1 0 1 1

5

x1 x0 x1

x0 x1 x0

x0 x0 x1

x0 x0 x1

x1 x0 x1

x1 x1 x1

+

カーネル(この例ではK=3) 24

Page 25: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

畳込み演算1 0 1 1

1 1 1 0

0 1 0 0

1 1 0 1

1 1 1 0

0 1 1 0

0 0 0 0

1 0 1 1

5 3

x1 x0 x1

x0 x1 x0

x0 x0 x1

x0 x0 x1

x1 x0 x1

x1 x1 x1

+

25

Page 26: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

畳込み演算1 0 1 1

1 1 1 0

0 1 0 0

1 1 0 1

1 1 1 0

0 1 1 0

0 0 0 0

1 0 1 1

5 3

6

x1 x0 x1

x0 x1 x0

x0 x0 x1

x0 x0 x1

x1 x0 x1

x1 x1 x1

+

26

Page 27: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

畳込み演算1 0 1 1

1 1 1 0

0 1 0 0

1 1 0 1

1 1 1 0

0 1 1 0

0 0 0 0

1 0 1 1

5 3

6 4

x1 x0 x1

x0 x1 x0

x0 x0 x1

x0 x0 x1

x1 x0 x1

x1 x1 x1

+

27

Page 28: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

CNNで⾏われている畳込み演算

1 0 1 1

1 1 1 0

0 1 0 0

1 1 0 1

1 1 1 0

0 1 1 0

0 0 0 0

1 0 1 1

5 3

6 4

x1 x0 x1

x0 x1 x0

x0 x0 x1

x0 x0 x1

x1 x0 x1

x1 x1 x1

• ANを2次元に拡張

28

Page 29: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

AlexNet• ディープラーニングブームに⽕をつけた記念的CNN• ILSVRCʼ12優勝 (誤認識率16%)• ⽔増し(Augmentation)による学習データ増加• 8層, Dropout, アンサンブルCNN, ReLU活性化関数

A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in Neural Information Processing Systems 25, pages 1106–1114, 2012. 29

Page 30: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

AlexNetが実現できた理由LeNet‐5, 1998

AlexNet, 2012

学習画像数: 107

学習画像数: 1014

30

Page 31: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

データの⽔増し(Augmentation)• もはや常識, 差別化のポイント(ノウハウ多数)• 計算資源 (GPUのメモリ) とのトレード・オフ

31

Page 32: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

GoogLeNet• Network-in-network• ILSVRCʼ14で優勝 (誤認識率6.7%)• 22層, Inception演算, フル結合層なし

Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich: Going deeper with convolutions. CVPR 2015: 1-9 32

Page 33: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Inception演算• カーネルサイズ1x1の畳込み→次元圧縮

33

Page 34: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

VGG-16• ILSVRC14準優勝 (誤認識率7.4%→0.6ポイント差)• 全ての畳込み層でカーネルサイズが同じ(K=3)• VGG11, VGG19もあり

K. Simonyan, A. Zisserman, “Very Deep Convolutional Networks for Large‐Scale Image Recognition,” arXiv:1409.1556 34

Page 35: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

VGGのアイデア: 層を深くする• 上位層→分離性能が上がる• つまり, 深くすれば認識精度が上がる

35

Page 36: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

どこまでも深くできるのか︖• 答えはNO→勾配消失/発散問題• 活性化関数の微分(誤差)を更新するため

逆伝搬: (0.1)100→0, 順伝搬: (1.1)100→∞

Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun, “Deep Residual Learning for Image Recognition,” IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016

レイヤを増やす(=深くする)と認識率悪化

36

Page 37: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

ResNet• ILSVRCʼ15優勝 (誤認識率3.57%)• 152層︕︕, Batch Normalization

Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun, “Deep Residual Learning for Image Recognition,” IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016

⼊⼒xと出⼒H(x)を⼀致させたい→残差(Residual)F(x)をCNNで学習

37

Page 38: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

BatchNormalization• 正規化を⾏った後, スケーリングとシフトを⾏う• 学習による発散を抑える

Sergey Ioffe and Christian Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,” ICML2015. 38

Page 39: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

ここまでのまとめ

39

AlexNet VGG GoogLeNet ResNetYear 2012 2014 2014 2015#Layers 8 19 22 152Accuracy 16.4% 7.3% 6.7% 3.57%Inception (NinN) ‐‐‐ ‐‐‐ ✔ ‐‐‐

Kernel Size 11,5,3 3 7,1,3,5 7,1,3,5FC Size 4096,4096,

10004096,4096,

10001000 1000

Normalization Local Response

‐‐‐ Local Response

Batch

Page 40: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

様々な最適化⼿法

40

Page 41: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

CNNの最適化⼿法• Pruning• Weight Sharing• Quantization• Binarized/Ternarized• (ほかにもたくさんあるけど講演時間の都合で…)

• Winograd アルゴリズム• Dark Knowledge• Law Rank Approximation• 蒸留, ファインチューニング,,

41

Page 42: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Pruning

42Han et al. “Learning both Weights and Connections for Efficient Neural Networks,” NIPS15

• 枝やニューロンを刈る• 最近出たのは, 刈った後に再度付け加えて精度アップ

• 再学習して認識精度Keep• 圧縮率: LeNet-5→12x, AlexNet→9x, VGG16→13x

Pruning後の再学習が効果的︕

Page 43: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Weight Sharing

43S. Han et al., “Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and HUFFMAN Coding,” ICLR2016.

Page 44: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Quantization• 量⼦化ビット数を減らして⾯積と帯域を稼ぐ• 認識精度に効くところは⼤きめに• 単精度浮動⼩数点を8or4ビット固定⼩数点に削減して認識

精度0.4%低下(VGG16)

44

J. Qiu et al., “Going Deeper with Embedded FPGA Platform for Convolutional Neural Network,”  ISFPGA2016.

Page 45: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化CNNをFPGAで実現

45

Page 46: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

FPGAと他のデバイスの⽐較

46

• FPGAの利点• 書換え可能(アルゴリズム変更に対応)→ASICへの利点• 電⼒性能効率に優れる→CPU, GPUへの利点

• FPGAの⽋点• 対CPU→コスト⾼• 対GPU→単純に遅い, 開発時間が⻑い• 対ASIC→コスト⾼, 電⼒⼤きい

現時点ではアルゴリズムの進歩についていく→FPGAがよいのでは枯れる時期を⾒極める⽬利きが重要, 組み合わせも視野に

2値化CNNの導⼊→⾼速化・省⾯積化(=コスト削減・低消費電⼒)

Page 47: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

組込み(ハードウェア)に適したCNN︖AlexNet VGG GoogLeNet ResNet

Year 2012 2014 2014 2015#Layers 8 19 22 152Accuracy 16.4% 7.3% 6.7% 3.57%Inception (NinN) ‐‐‐ ‐‐‐ ✔ ‐‐‐

Kernel Size 11,5,3 3 7,1,3,5 7,1,3,5FC Size 4096,4096,

10004096,4096,

10001000 1000

Normalization Local Response

‐‐‐ Local Response

Batch

3.5%の認識率改善のために, 異なるハードウェア(カーネルサイズ),⼤量のハードウェア(層数)は許されるか︖→ VGGを選択 47

Page 48: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

CNNのハードウェア実現• 各層を時分割で実⾏, 層毎にパイプライン処理

W1

W2

W3

W4

X

X’

重みを保持 中間層を保持(Ping-pongメモリ)

X X’ X X’ X

48積和演算展開&パイプライン

Page 49: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

FPGA実装におけるボトルネック• VGGのプロファイル解析• 畳込み層→積和演算器不⾜

• フル結合層→メモリ不⾜

J. Qiu et al., “Going Deeper with Embedded FPGA Platform for Convolutional Neural Network,”ISFPGA2016. 49

Page 50: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化ニューラルネットワーク• ⼆値(-1/+1)の乗算• 乗算器をXNORゲートで

50

x1 x2 Y

‐1 ‐1 1

‐1 +1 ‐1

+1 ‐1 ‐1

+1 +1 1

x1 x2 Y

0 0 1

0 1 0

1 0 0

1 1 1

Page 51: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

低精度CNN関連論⽂• Binary Connected [NIPS, Dec., 2015]• Binarized Neural Networks [arXiv, Mar., 2016]• Ternary-Net [arXiv, May, 2016]→ IntelがResNetを実装. 認識精度2%低下でGPU

(Titan X)と同程度の性能 [ISFPGA, Feb., 2017]• Local Binary CNNs [Aug., 2016]• XNOR-Net [ECCV, Oct., 2016]

51

Page 52: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

XNORによる2値化CNN

52

x1

w0 (Bias)

fsgn(Y)Y

z

w1

x2

w2

xn

wn

...

Page 53: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化CNNの効果

53

x1

w0 (Bias)

fsgn(Y)Y

z

w1

x2

w2

xn

wn

...

短精度(4〜8)ビットを2値に置き換え→メモリ帯域の圧縮乗算器をXNORに置き換え→回路⾯積の削減

Page 54: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化/3値化 on FPGAがトレンド• FPT2016 (12⽉開催)

• E. Nurvitadhi (Intel) et al., “Accelerating Binarized Neural Networks: Comparison of FPGA, CPU, GPU, and ASIC”

• H. Nakahara (東⼯⼤), “A Memory-Based Realization of a Binarized Deep Convolutional Neural Network”

• ISFPGA2017 (先週開催)• Ritchie Zhao et al., “Accelerating Binarized Convolutional Neural

Networks with Software-Programmable FPGAs”• Y. Umuroglu (Xilinx) et al., FINN: A Framework for Fast,

Scalable Binarized Neural Network Inference• H. Nakahara, H. Yonekawa (東⼯⼤), et al. “A Batch

Normalization Free Binarized Convolutional Deep Neural Network on an FPGA”

• Y. Li et al., “A 7.663-TOPS 8.2-W Energy-efficient FPGA Accelerator for Binary Convolutional Neural Networks,”

• G. Lemieux, “TinBiNN: Tiny Binarized Neural Network Overlay in Less Than 5,000 4-LUTs,”

54

Page 55: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

(余談)PYNQの開発状況• 新しいライブラリ(Arduino, PMOD,)を開発中• 相変わらずお⼿軽(Pythonで叩く+Jupyter)・⾼性能

55

from pynq.iop import Pmod_PWMfrom pynq.iop import PMODA, PMODBfrom pynq.iop import Adafruit_LCD18_DDRfrom pynq.iop import ARDUINO

lcd = Adafruit_LCD18_DDR(ARDUINO)pwm_A = Pmod_PWM(PMODA, 0)

Page 56: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

PYNQでも2値化CNN• https://github.com/Xilinx/BNN-PYNQ(ソースはFINNという論⽂)• Theanoで学習→C/C++に変換後⾼位合成

56

Page 57: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化によるメモリ量削減@VGG1119383

4850

338

float int8 Binary

18Kb BRAM

10

6

14

float int8 Binary

DSP48E Block

77435586

4064

float int8 Binary

FF (Flip Flop)14006

11503

7690

float int8 Binary

LUT (Look‐Up Table)

57

ボトルネック

Page 58: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

メモリ量削減→電⼒効率向上• メモリと演算器の距離∝電⼒→FPGAのオンチップメモリに格納できれば電⼒効率↑

E. Joel et al., “Tutorial on Hardware Architectures for Deep Neural Networks,” MICRO‐49, 2016.58

2値化CNNの戦略

Page 59: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

メモリ量削減→オンチップ化• FPGAのオンチップメモリ

• BRAM (Block RAM) → 数百〜1000個程度• Distributed RAM (要はLUT) → 数万〜10万個程度

→ 容量は⼩さい(64bit)が, 数の多さで広帯域化cf. Jetson TX1(GPU) LPDDR4, 25.6GB/s

1万LUT@100MHz → 125GB/s⾼位合成では #pragma HLS unroll を打つだけ (factor=N (Nは整数)で調整も可能)

59

LUTLUTLUT LUT

LUTLUTLUT LUT

LUTLUTLUT LUT

Page 60: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

認識精度低下に対して• バッチ正規化(BatchNormalization)を導⼊

0

20

40

60

80

100

# of epochs

Classification error (%)

(a) float32 bit precision CNN

1                80              160    2000

20

40

60

80

100

# of epochsClassification error (%)

(b) Binarized CNN

1                80              160    200

単に2値化した場合

提案⼿法

約6%の誤差(VGG‐16を使⽤)H. Nakahara et al., “A memory‐based binarized convolutional deep neural network,”FPT2016, pp285‐288, 2016.

60

Page 61: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化CNNにBatchNormalizationが効果的な理由

Y

fsgn(Y)

‐1

+1

0OOO OOOXX XXX X Y

fsgn(Y)

‐1

+1

0OOO OOOXX XXX X

+1

‐1

スケーリング( )により幅2に正規化

シフト( )により‐1〜+1に制限

61

Page 62: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

⾼位合成を⽤いた2値化CNNの実現

62

Page 63: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

ギャップ…

63

module hoge(input a, b, c;output d);

assign d = (a & b) | c;

endmodule

実現したい論理回路をハードウェア記述⾔語でもっっっっっっっっっっのすごーく⼤量のHDLで書く(Verilog HDL/ VHDL)

Y = X.dot(W)+B

学習したディイイイプなニューラルネットワークの⾏列演算をあっさり1⾏で書いてしまう

Page 64: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

記述量∝設計時間

64

Y = X.dot(W)+B

C/C++: 10⾏

Python: 1⾏

Verilog-HDL: 66⾏

Page 65: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

High-Level Synthesis (HLS)• C/C++で設計→アルゴリズム屋でもHWを設計できるように

• 2値化Neural netを1か⽉で作成短TATというFPGAのメリットを引き出す

65

Page 66: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

⾼位合成のフロー(従来はこれをすべて⼈⼿で⾏っていた)

66

Input Behavioral Spec. Dataflow   Scheduling     Data‐path generation

Controller (FSM) GenerationMapping to resources

(Binding)

Page 67: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Deep Convolutional Neural NetworkのHLS実装• 依存性のない7重ループの最適化→⾼位合成でも最適化しやすい

...

...

120 nodes10 nodes

16 F. maps5x5

16 F. maps10x10

6 F. maps14x14

6 Feature maps28x28Gray scale

image32x32

5x52x2

5x52x2 5x5

1 2 12 4 21 2 1

⑤⑥

67

Page 68: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

⾼位合成による⾃動合成

⾏列演算ライブラリの中⾝をC/C++で書くただし、HDLよりは抽象的

Y=0;for(i=0; i < m; i++){for( j = 0; j < n; j++){Y += X[i][j]*W[j][i];}}

FPGAベンダの⾼位合成ツールがHDLを⽣成

↓従来のフローを通してFPGAに実現

⾃動⽣成

ディープニューラルネットワークを既存のフレームワークで設計

(学習はGPU上で)

学習済みCNNを2値化に変換(開発中)

68

Page 69: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

指⽰⼦による性能向上(1)• オリジナルのループ→逐次実⾏

• #pragma HLS unroll → 演算器展開

• #pragma HLS pipeline → パイプライン化

for ( int i = 0; i < N; i++){op_Read;op_MAC;op_Write;}

for ( int i = 0; i < N; i++){#pragma HLS pipelineop_Read;op_MAC;op_Write;}

for ( int i = 0; i < N; i++){#pragma HLS unroll 3op_Read;op_MAC;op_Write;}

RD MAC WR RD MAC WR

RD MAC WRRD MAC WR

RD MAC WR

RD MAC WRRD MAC WRRD MAC WR

スループット: 3サイクルレイテンシ: 3サイクル演算量: 1/3 データ/サイクル

スループット: 3サイクルレイテンシ: 3サイクル演算量: 1 データ/サイクル

スループット: 1サイクルレイテンシ: 3サイクル演算量: 1 データ/サイクル

69

Page 70: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

指⽰⼦による性能向上(2)• #pragma HLS unroll → 演算器展開

• #pragma HLS pipeline → パイプライン化Int X[100];#pragma HLS array partitionfor ( int i = 0; i < N; i++){#pragma HLS pipelineop_Read;op_MAC;op_Write;}

Int X[100];#pragma HLS array partitionfor ( int i = 0; i < N; i++){#pragma HLS unroll 3op_Read;op_MAC;op_Write;}

RD MAC WRRD MAC WR

RD MAC WR

RD MAC WRRD MAC WRRD MAC WR

スループット: 3サイクルレイテンシ: 3サイクル演算量: 1 データ/サイクル

スループット: 1サイクルレイテンシ: 3サイクル演算量: 1 データ/サイクル

70

MemMemMem

MemMemMem

RD MAC WR

MemMem

MemMem

Page 71: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

CNNにおける適切な指⽰⼦• 外部メモリと内部メモリでループを分割• 内部メモリ︓展開した演算器をパイプライン化

C. Zhang et al., “Optimizing FPGA‐based Accelerator Design for Deep Convolutional Neural Networks,” ISFPGA2015, pp. 161‐170, 2015.

RAMRAM

RAM

++

++

+… …

パイプラインレジスタ

71

Page 72: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

指⽰⼦の効果

46.3 

87.1  90.4 

2.2  1.9 11.8 

1.5  2.1 10.6 

3.6  4.4 

28.1 

No pragma Unroll Unroll+Pipeline

リソース利⽤率 (%)

BRAM18K DSP48E FF LUT

0.16 0.48 

119.57 

0.10

1.00

10.00

100.00

1000.00

No pragma Unroll Unroll+Pipeline

FPS (Frames per second)

• リソース利⽤率と性能はトレードオフ• 内部メモリを削減すれば更に性能向上可能

72FPGAのリソース量∝推定のスピード

Page 73: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

2値化CNNの評価

73

Page 74: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

評価環境• FPGA: Digilent社Nexys4 Videoボード

• Xilinx社 Artix-7 FPGA搭載XC7A200T-1SBG484C• LUT数: 129000• 18Kb BRAM数: 730• DSP48E数: 740• 512Mb DDR3 Memory• MicroBlaze実装

• CNN設計: Chainer 1.20.0• VGG16をCifar10で学習

• GeForce Titan X

74

Page 75: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

GPU, CPUとの⽐較Platform

Device Quad‐core ARM Cortex‐A57

256‐coreMaxwell GPU

Artix 7

Clock Freq.  1.9 GHz 998 MHz 100 MHzFPS 0.2 116.9 119.5Power [W] 7 17 3Efficiency [FPS/W] 0.03 6.87 39.83Accuracy [%] 92.35 87.45

75

NVidia Jetson TX1                        Digilent Nexys4 Video

Page 76: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

認識精度に関して• アルゴリズムとデータでカバー可能

• 2値化VGG16 を使って ImageNetのサブセットを学習→3⽇で90.3%認識精度達成

76

Joseph Redmon, Ali Farhadi, “YOLO9000: Better, Faster, Stronger,”

Page 77: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

まとめ

77

Page 78: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

まとめ• HW向けCNNのトレンドを紹介

• 技術はめまぐるしく進歩中• 今年も重要な発表が⾏われる可能性は極めて⾼い

• 2値化CNNの紹介• 演算器をEXORゲート, メモリを内部メモリで実現• FPGAでも⾼性能かつ低消費電⼒化達成

• ⾼位合成による短期間設計• ディープラーニングフレームワークとの連携でアルゴリズム屋でも

⾼性能HW開発可能に• FPGAのリソース量∝性能, ただし電⼒・コストとのトレード・オフ

• GPU, CPUとの⽐較• GPUより若⼲⾼速, 認識精度5%低下, 電⼒効率5.5倍優• 認識精度低下は学習テクニックでカバー可能

(ここが差別化のポイント) 78

Page 79: 2値化CNN on FPGAでGPUとガチンコバトル(公開版)

Contact Info.• 東京⼯業⼤学 産学連携推進本部

(http://www.sangaku.titech.ac.jp/index.html)• 東京⼯業⼤学 中原研究室 (http://naklab.wpblog.jp/)

79