Tensor flow usergroup 2016 (公開版)

16,449 views

Published on

日本Googleオフィスで開催されたTensorFlow User Groupでしゃべったときのスライドです。TensorFlowからFPGAに落とす方法と2値化ディープニューラルネットワークについて。

Published in: Engineering
2 Comments
323 Likes
Statistics
Notes
  • I no longer bother to read my horoscopes on random blogs. I get my personalized readings from real psychics. Check this out! http://basir.ly/FKrk/9RUX3mQG2y.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • when i looked at the figure of 14786 dollars .Than I have no other choice but to accept , what i saw .They have been doing this for a year and get rid of their debts.. Yesterday they purchased new Aston Martin … visit This Site. —————— ◐◐◐◐◐◐◐ w­w­w­.­h­o­m­e­j­o­b­s­7­.­C­O­M
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
16,449
On SlideShare
0
From Embeds
0
Number of Embeds
3,810
Actions
Shares
0
Downloads
95
Comments
2
Likes
323
Embeds 0
No embeds

No notes for slide

Tensor flow usergroup 2016 (公開版)

  1. 1. 2値化CNNなDQNを FPGAで動かしてみた 中原 啓貴 東京⼯業⼤学 1
  2. 2. ⾃⼰紹介 • Hiroki Nakahara (中原 啓貴) • 36歳 (若⼿…︖) • JK@⽇本⼀モテない⼤学の教員 • FPGA/ディープラーニングは⽣活の糧 • FPGAは専⾨ではありません (HDLを書くようになったのは学位を 取ってから, ⾼位合成を始めたのは去年) • 多値論理と論理関数の複雑度が専⾨ 2
  3. 3. Custom Computing Machine 3 Multi‐valued logic Pattern matching circuit • Regular expression matching circuit • Packet classifier • IP address look‐up 40m Radio telescope Deep neural network
  4. 4. 今⽇のお話 4Source: TensorFlow Tutorial, Strata NYC, 2016 FPGAも仲間に⼊れて︕
  5. 5. 今回の前提 • 学習済みニューラルネットワークをFPGAに組込む話 5
  6. 6. FPGA? • Field(現場で) • Programmable (書き換えができる) • Gate(論理ゲートの) • Array(集合体) 6 PCIに刺してGPUの代わりに アクセラレータ (Altera社) 指先よりも小さいよ! (Lattice社) ラズパイにのっけて高速化 (Xilinx社) iPhone7にも!!
  7. 7. FPGA=その場でプログラム︕ 7 某国民的ゲーム機に Ubuntuが走るよ Arduino(ATMEGA)を乗せてみました 電波望遠鏡用の信号処理装置
  8. 8. FPGAの基本的な構造 8 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-Up Table (LUT) I/O Block Channels Switch Blocks
  9. 9. LUTを使った論理ゲートの実現 x0 x1 x2 y 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 x0 x1 x2 y 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 LUTの出⼒を書き換えて様々な論理ゲートを実現
  10. 10. ChannelとSwitch Block LUT どちらも トランジスタの スイッチ
  11. 11. Programmable=メモリ書き換え 11 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
  12. 12. FPGAの対象=論理回路 12 module hoge( input a, b, c; output d ); assign d = (a & b) | c; endmodule Xilinx社 Altera社 実現したい論理回路を ハードウェア記述⾔語で書く (Verilog HDL/ VHDL) FPGAベンダーが提供する CADツールでビットストリーム に合成する FPGAにビットストリームを 送信して回路が実現︕
  13. 13. ギャップ… 13 module hoge( input a, b, c; output d ); assign d = (a & b) | c; endmodule 実現したい論理回路を ハードウェア記述⾔語で もっっっっっっっっっっのすごーく ⼤量のHDLで書く (Verilog HDL/ VHDL) Y = X.dot(W)+B 学習したディイイイプなニューラルネットワークの ⾏列演算をあっさり1⾏で書いてしまう
  14. 14. ⾏列演算を例に 14 Y = X.dot(W)+B ビヘイビア→データフロー→FSM→ハードウェア ここまでやって ようやくHDLの コーディング
  15. 15. まずは⾏列の計算 15 Cとかだとループを回して完了!
  16. 16. データパスを書きましょう 16データの入出力をすべて展開して書く
  17. 17. スケジューリングしましょう 17 今回はMAC演算器を使いまわす設計に (MAC: Multiply-ACcumulation) 一気に並列演算だと 完全に逐次処理だと
  18. 18. 状態遷移図を起こしましょう 18 S0を実行しようとしたら、 まずw00とw10を読み出して、、 次に、積和演算を実行っと…
  19. 19. 状態遷移図を書いた︕ 19
  20. 20. と思ったら 20 積和演算中に 次の重みを読み込んでもよくね…? 依存関係のない処理を 同じ状態に押し込む! ↓ 各状態に符号を割り当て
  21. 21. FSMをハードウェアに落とし込んで… 21
  22. 22. メモリや乗算器に割り当てましょう 22 制御部 データパス部
  23. 23. HDLに起こした結果 どうしてこうなった 23 Y = X.dot(W)+B C/C++: 10⾏ Python: 1⾏ Verilog-HDL: 66⾏
  24. 24. ということで、スケジューリングに… 24 パトラッシュ、、 僕は疲れたよ、、、
  25. 25. さらに検証が加わると地獄ですよ 25 シミュレーション波形と データシートを見比べながら 永遠と続く…
  26. 26. どうしよう… 26 実現したい論理回路を ハードウェア記述⾔語で もっっっっっっっっっっのすごーく ⼤量のHDLで書く (Verilog HDL/ VHDL) Y = X.dot(W)+B 学習したディイイイプなニューラルネットワークの ⾏列演算をあっさり1⾏で書いてしまう
  27. 27. ということでHigh-Level Synthesis (HLS) • C/C++が⼀般的な⼊⼒ • ファミコンを1週間で作ったよ • 2値化Neural netを1か⽉で作ったよ 短TATというFPGAのメリットを引き出す 27
  28. 28. ⾼位合成のフロー (従来はこれをすべて⼈⼿で⾏っていた) 28 Input Behavioral Spec. Dataflow   Scheduling      Data‐path generation Controller (FSM) Generation Mapping to resources (Binding)
  29. 29. RTL(HDL)達⼈ v.s HLS達⼈ 29 J. Cong et. al, “High‐level synthesis for FPGAs: From prototyping to deployment,” IEEE Trans. on CAD, 2011.
  30. 30. Deep Convolutional Neural NetworkのHLS実装 • 依存性のない7重ループの最適化 →⾼位合成でも最適化しやすい ... ... 120 nodes 10 nodes 16 F. maps 5x5 16 F. maps 10x10 6 F. maps 14x14 6 Feature maps 28x28 Gray scale image 32x32 5x5 2x2 5x5 2x2 5x5 1 2 1 2 4 2 1 2 1 ① ② ③ ④ ⑤ ⑥ ⑦
  31. 31. あともう少し… 31 ⾏列演算ライブラリの 中⾝をC/C++で書く ただし、HDLよりは抽象的 (演算器スケジューリング・ FSMは不要) Y = X.dot(W)+B ⾏列演算をあっさり1⾏で Y=0; for(i=0; i < m; i++){ for( j = 0; j < n; j++){ Y += X[i][j]*W[j][i]; } } ⾼位合成ツールが HDLを吐いてくれるので 従来のフローを通して FPGAに実現できる
  32. 32. 今回作ったもの 32 ⾏列演算ライブラリの 中⾝をC/C++で書く ただし、HDLよりは抽象的 (演算器スケジューリング・ FSMは不要) Y = X.dot(W)+bias ディープニューラルネットワークを さっくり記述 Y=0; for(i=0; i < m; i++){ for( j = 0; j < n; j++){ Y += X[i][j]*W[j][i]; } } ⾼位合成ツールが HDLを吐いてくれるので 従来のフローを通して FPGAに実現できる ここを⾃動⽣成+α
  33. 33. なんでTensorFlowなのよ︖ • (もちろんChainer (Caffe), Theano版も作ってますよ) でもね… • 分散学習が可能(スケールする) • クラウドで動く(計算機管理が不要になる) • みんな使ってる(研究結果を役⽴ててもらえる) 33
  34. 34. Artificial Neuron (AN) + x0=1 x1 x2 xN ... w0 (Bias) w1 w2 wN f(u) u y xi: Input signal wi: Weight u: Internal state f(u): Activation function  (Sigmoid, ReLU, etc.) y: Output signal y  f (u) u  wi xi i0 N  34 積和演算を 何とかしたい…
  35. 35. 2値化ニューラルネットワーク • ⼆値(-1/+1)の乗算 • 乗算器をXNORゲートで 35 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
  36. 36. XNORによる2値化CNN 36 x1 w0 (Bias) fsgn(Y) Y z w1 x2 w2 xn wn ...
  37. 37. 2値化CNNの効果 37 x1 w0 (Bias) fsgn(Y) Y z w1 x2 w2 xn wn ... 短精度(4〜8)ビットを2値に置き換え→メモリ帯域の圧縮 乗算器をXNORに置き換え→回路⾯積の削減
  38. 38. 2値化CNNの認識精度 • 浮動⼩数点CNNとほぼ同じ 38 0 20 40 60 80 100 # of epochs Classification error (%) (a) float32 bit precision CNN 1                80              160    200 0 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 (to appear).
  39. 39. 2値化CNN on FPGA • Raspberry Pi3 Model B • ARMv8@1.2GHz quad-core • 1GB RAM • Mnist CNNの処理速度: 85.81 msec/image (Cソースに変換後, gccを⽤いてコンパイル, 1コア動作) • 消費電⼒: 2Watt • Digilent社 Nexys4 DDR • FPGA Xilinx社Artix-7100T@100MHz • 2880 Kb BRAM • Mnist CNNの処理速度: 1.56 msec/image • 消費電⼒: 1Watt未満(ワットチェッカーでは測定不能でした…) 39
  40. 40. デモ1: ⼿書き⽂字認識 40
  41. 41. Deep Q-learning Network • 全部の⼿を試すのは不可能 • 報酬を最⼤にする⾏動をDeep Neural Network で予測 Deep Neural Network + Q-learning ↓ Deep Q-learning Network (DQN) 41
  42. 42. AtariのPongをゲームするDQN 42 ... 512 neurons 3 neurons →上・下・待機 4x4 3x3 Arcade Learning Environment (ALE)とかOpenAI Gym 6層のConvolutional Deep Neural Network 操作ゲーム画⾯ 記録しておく
  43. 43. AtariのPongを勉強するDQN 43 ... 512 neurons 3 neurons →上・下・待機 4x4 3x3 Arcade Learning Environment (ALE)とかOpenAI Gym 6層のConvolutional Deep Neural Network 得点が上がる操作 (最⼤とはしない) を学習 ゲーム画⾯ シャッフルする
  44. 44. デモ2: FPGA DQN 44 ... 512 neurons 3 neurons →上・下・待機 4x4 3x3 6層の学習済みConvolutional Deep Neural Network 操作 by UART ゲーム画⾯ by UART Digilent社 Nexys4 DDR (Xilinx社 Artix7 100T搭載)
  45. 45. On-going Work • 特定FPGAボード向けのプラットフォームを開発中 • TensorFlowで設計したCNNを直接Pythonでたたける (もちろんハードウェアも) Arduinoを乗せたり、ARMでLinuxを⾛らせたりして… • ボードを取り寄せ中 45 Terasic社 DE0-nano-SoC Kit (Atlas-SoC Kit) $99 (academic $90) ※ARM搭載 Terasic社 DE10-Lite Board $85 (academic $55) Digilent社 PYNQ-Z1 Board $229 (academic $65?) ※ARM搭載 Digilent社 Arty Board $99
  46. 46. まとめ • FPGAをさっくり解説 • HDLのまま設計したら…⼤変だよ • 2値化CNNを実装 • TensorFlowからFPGAに⼀気に落とすことが可能に • 公開まであとちょっと待ってね 46
  47. 47. (おまけ)FPGA関連お勧め書籍 47 FPGAについて 基礎から解説 Verilog-HDLの⽂法書として Cからハードウェアに落とす⽅法を 書いた数少ない良書

×