Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

(公開版)FPGAエクストリームコンピューティング2017

2,934 views

Published on

FPGAエクストリームコンピューティング2017 でしゃべったときに使ったスライドです。FPGAでランダムフォレストを作ると、GPU版よりも速かったこと。ディープラーニングとランダムフォレストの比較もしました。

Published in: Engineering
  • Be the first to comment

(公開版)FPGAエクストリームコンピューティング2017

  1. 1. ディープラーニング vs ランダムフォレスト 中原 啓貴 (東京⼯業⼤学) 2017年9⽉24⽇ FPGAX@ドワンゴ
  2. 2. 内容 • 背景 • Random forest (RF) • RFをFPGA実装するには • 実験結果 • RFをCPU, GPU, FPGAで実装した場合 • 他の機械学習、特にConvolutional Neural Network (CNN)と⽐較した場合 • まとめ 2
  3. 3. 機械学習 3 ⼗分な計算資源とデータ+アルゴリズムの発展 (Left): “Single-Threaded Integer Performance,” 2016 (Right): Nakahara, “Trend of Search Engine on modern Internet,” 2014
  4. 4. 機械学習の分類 M. Warrick, “How to get started with machine learning,” PyCon2014 4
  5. 5. 研究背景 • ビッグデータと⼗分な計算資源 • ランダムフォレスト • 歩⾏者検出 • セグメンテーション • ⼈体姿勢推定 • 組込みシステムでの実現 • リアルタイム処理が必要→CPUは遅い • 電⼒制約→GPUだと消費電⼒⼤ • FPGA上に短期間に優れたランダムフォレストを実装す るには︖ • HDL⼿書き設計は限界 5
  6. 6. FPGA+⾼位合成 • 実⽤的な⾼位合成ツールの普及 • Xilinx社: Vivado HLS, SDxシリーズ • Altera社: Altera SDK for OpenCL • 先⾏事例 • gzip 圧縮を1か⽉で完成, ⼿書きHDLと⽐較して 90%程度の性能 • ファミコン(NES)を1週間で完成, ⼿書きHDLは 3か⽉, リアルタイム動作達成 • ⼿書きHDLより10倍以上短い期間で開発 • (個⼈的な経験では)性能, ⾯積は⼿書きHDLと ⽐較して8割程度は容易に達成可能 6 ⽬的: FPGA+⾼位合成で⾼性能な ランダムフォレストを実現する⼿法の開発
  7. 7. Random Forest 7
  8. 8. 分類⽊ (Decision Tree) • 特徴マップを分類する, 弱学習器といわれる 1.00 0.53 0.29 0.00 0.09 0.63 0.71 1.00 C1 C2 C1 C 1 C2 C1 X1 X2 X2<0.53? X2<0.29? X1<0.09? X1<0.63? X1<0.71? Y N N NN NY Y Y Y C1 C1C2 C1C2 C1 8
  9. 9. 分類⽊の学習 • ランダムにサンプリング • エントロピーが最⼤になるように再帰的に分割 9 1.00 0.53 0.29 0.00 0.09 0.63 0.71 1.00 C1 C2 C1 C 1 C2 C1 X1 X2 X2<0.53? X2<0.29? X1<0.09? X1<0.63? X1<0.71? Y N N NN NY Y Y Y C1 C1C2 C1C2 C1
  10. 10. バイアスとバリアンス • バイアス→モデルの単純さによる誤差 • バリアンス→学習データの違いによる誤差 10 バイアス︓⼤ バイアス︓⼩
  11. 11. バイアスとバリアンス 11 バイアス︓⼤ バリアンス︓⼩ バイアス︓⼩ バリアンス︓⼤ • バイアス→モデルの単純さによる誤差 • ノイズに強いが, 複雑な表現はできない: SVM, 最⼩2乗法 • バリアンス→学習データの違いによる誤差 • 過学習しがち, 複雑な表現可能: Neural Network, 決定⽊ →集団(アンサンブル)学習によりバリアンスを下げる
  12. 12. Random Forest (RF) • アンサンブル学習の⼀種 • 複数の分類⽊(弱学習器)で構成 • クラス分類と回帰が可能 12 Tree 1 Tree 2 Tree n C1 C2 C1 Voter C1 (Class) InputX1<0.53? X3<0.71? X2<0.63? X2<0.63? X3<0.72? Y N N NN NY Y Y Y C1 C1C2 C1C3 C1 Tree 1 Binary Decision Tree (BDT) Random Forest ...
  13. 13. RFのアプリケーション • Key point matching [Lepetit et al., 2006] • Object detector [Shotton et al., 2008][Gall et al., 2011] • Hand written character recognition [Amit&Geman, 1997] • Visual word clustering [Moosmann et al.,2006] • Pose recognition [Yamashita et al., 2010] • Human detector [Mitsui et al., 2011] [Dahang et al., 2012] • Human pose estimation [Shotton 2011] 13
  14. 14. Random Forest を FPGA に実装 14
  15. 15. FPGA (Field Programmable Gate Array) • Reconfigurable architecture • Look-up Table (LUT) • Configurable channel • Advantages • Faster than CPU • Dissipate lower power than GPU • Short time design than ASIC 15
  16. 16. PythonでRF 16 • Scikit-learnを使うだけ︕簡単︕ オブジェクトを宣⾔ 学習 推論
  17. 17. 開発したツールフロー Off‐line learning by scikit‐learn (software) Training Dataset scikit‐learn Hyper Parameter (by Grid‐ search) Random Forest Host Code Kernel Code aocx Binary Host PC FPGA Board aoc gcc RF2AOC 17 (論⽂がアクセプトされれば)Xilinx版を近⽇公開予定︕
  18. 18. scikit-learn を使ったコード⽣成 • 内部のデータ構造にアクセス→再帰的にコード⽣成 18 Tree 1 Tree 2 Tree n C1 C2 C1 Voter C1 (Class) Input ... len(model.estimators_) … ⽊の個数 model.estimators_[i] … i番⽬の⽊にアクセス 以降, tree = model.estimators_[i] として tree.tree_.children_left tree.tree_.children_right →⽊の⼦ノードにアクセス, 再帰的に アクセス可能 tree.tree_.threshold … 現時点のしきい値 tree.tree_.feature … ⽊の⼊⼒変数リスト tree.tree_.value … 認識したクラスインデックス
  19. 19. ⽣成されたコード • if-then-else形式で出⼒ 19 Tree 1 Tree 2 Tree n C1 C2 C1 Voter C1 (Class) Input ...
  20. 20. フルパイプライン化 Tree 1 Tree 2 Tree b C1 C2 C1 Voter C1 X (Input) ... 20
  21. 21. マルチプレクサベースの実現 21
  22. 22. システムデザインツールの利⽤ 22 ① ② ④ ③ 1. Behavior design + pragmas 2. Profile analysis 3. IP core generation by HLS 4. Bitstream generation by FPGA CAD tool 5. Middle ware generation ↓ Automatically done
  23. 23. 短精度整数演算 float X1, X2; (set inputs) result = tree(X1, X2); __kernel int tree(  __global const float X1,  __global float X2){ (fetch inputs) if( X2 < 0.53){ if( X2 < 0.29){ return C1; } else { if( X1 < 0.63){ return C2; } else { return C1; } } ... int X; (set inputs) result = tree(X & 0x3FFF,  (X >> 16) & 0x3FFF); __kernel int tree(  __global const int X1,  __global int X2){ (fetch inputs) if( X2 < 4341){ // 0.53*213 if( X2 < 2375){ // 0.29*213 return C1; } else { if( X1 < 5160){ // 0.63*213 return C2; } else { return C1; } } .. Host Program Kernel Program 23
  24. 24. 短精度ビット⻑と分類精度 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 6 7 8 9 10 11 12 13 14 Misclassification Rate [%] n‐bit Fixd Point Precision Dermatology Arrhythmia Contraceptive Method Choice Glass Identification Hayes‐Roth Hepatitis Ionosphere Iris 24
  25. 25. 分類⽊の実現 X1 X2 c1 c2 c3 X2 c4 X3 c5 c6 Tree1 Tree2 X1 X2 X2 X3 c3 c1 c2 c4 c5   c6 Tree1 Tree2 25
  26. 26. 時分割によるリソース共有 __kernel int RF(  __global float X1, X2, X3){ (fetch inputs) for( int i = 0; i < 2; i++){ if( i == 0) class = tree1(X1,X2,X3); else class = tree2(X1,X2,X3); voting[class]++; // voter } } .. X1 X2 X2 * c1 c4 Voter * X3 c2 c4 c3 c5 c3 c6 26
  27. 27. ループ展開による スループット向上 __kernel int RF(  __global float X1,X2,X3){ (fetch inputs) #pragma unroll 2 for( int i = 0; i < 2; i++){ if( i == 0) class = tree1(X1,X2,X3); else class = tree2(X1,X2,X3); voting[class]++; // voter } } .. X1 X2 X3 c3 c1 c2 c4 c5   c6 Voter Voter Register 27
  28. 28. 実験結果 28
  29. 29. 実験⽅法 Pre‐learned Random Forest C‐ Code CUDA Code Binary Binary CPU GPU Cython gcc CUDAT nvcc Binary Host PC 29
  30. 30. 他のプラットフォームとの⽐較 • Implemented RF following devices • CPU: Intel Core i7 650 • GPU: NVIDIA GeForce GTX Titan • FPGA: Terasic DE5-NET • Measure dynamic power including the host PC • Test bench: 10,000 random vectors • Execution time including communication time between the host PC and devices 30 GPU FPGA
  31. 31. GPU, CPUとの⽐較 31 GPU@86W GeForce Titan CPU@13W Xeon (R) E5607 FPGA@15W Stratix V A7 Name LPS LPS/W LPS LPS/W LPS LPS/W Dermatology 336.2 3.9 211.6 16.3 3221.2 214.7 Contraceptive  Method 521.9 6.1 286.4 22.0 10924.3 728.3 Glass  Identification 726.7 8.5 587.5 45.2 6442.3 429.5 Hayes‐Roth 1512.9 17.6 1165.5 89.7 12884.6 859.0 Hepatitis 739.1 8.6 662.7 51.0 8209.9 547.3 Ionosphere 821.0 9.5 595.9 45.8 9663.5 644.2 Iris 446.6 5.2 436.7 33.6 4831.7 322.1 LPS: 1秒間に検索できるデータ数
  32. 32. FPGAに適した計算法 • ×ホストやオフチップメモリを頻繁にアクセス • GPUやCPUと⽐較して帯域が1桁狭い • ○外部I/Oやオンチップメモリを利⽤ FPGAFPGA |||||||| DDRDDR DDRDDR I/OI/O I/OI/O FPGAFPGA |||||||| DDRDDR DDRDDR I/OI/O I/OI/O ADC RAM ここに依存するアプリだと負け 32
  33. 33. プログラミングモデルの違い 33 D1 D2 D3 D4 D5 ↓ ↓ ↓ ↓ ↓ CC CC CC CC CC ↓ ↓ ↓ ↓ ↓ 広帯域 DDR4/DDR5 DDR3 HW1 D1 D2 D3 D4 HW2 D1 D2 D3 D4 HW3 D1 D2 D3 D4 HW4 D1 D2 D3 D4 狭 帯域 GPU FPGA • 均⼀な演算を空間的に並列実⾏ • 均⼀な演算器 • ワープダイバージェント (if⽂ダメ) • 帯域・動作周波数が⾼い • 特定な演算を時間的に並列実⾏ (要はパイプライン︕) • カスタマイズした演算器 • 帯域・動作周波数は低い
  34. 34. 他の識別器との⽐較 34
  35. 35. ディープニューラルネットワークと ⽐較して • ⼩規模データのタスクに適⽤可能 • 短時間学習 • 強⼒な計算機環境不要 • ローカル(エッジ)での学習可能 • ハイパーパラメータのチューニング不要 • FPGAで⾼性能を発揮できるデータ構造 35
  36. 36. Deep Forestへ拡張 • Sliding Window + Cascaded Forestの組合せ 36 Z.H.Zhou, J.Feng, “Deep Forest: Towards An Alternative to Deep Neural  Networks,”arXiv:1702.08835, [v2] Wed, 31 May 2017.
  37. 37. データセットを⽤いた認識率の⽐較 • MNIST(⼿書き⽂字)データセットの認識率 • ORL(顔認識)データセット 37 データセットが少ないため
  38. 38. データセットを⽤いた認識率の⽐較 (続) • 画像認識CIFAR10 (10クラス5万枚学習) 38 SOTAなCNN
  39. 39. CNNとRandom Forestの⽐較 • 認識率 • データセットが少ない場合: RF(というかCNNはダメ) • 単純(スパース)なデータセット: ほぼ同等の認識率→MNISTはここ • ⼤量のデータセット: CNN • (MNISTでの)学習時間 • RF: CPUで約5分(中原所有のノートパソコン, Thinkpad X1 Cardbon) • CNN(LeNet5): GPU Titan X (Pascal)で約5分 • (MNISTに必要な)ハードウェア量 • RF: 18706 LUTs, 42982 FFs, 175 18Kb BRAMs • CNN: 34419 LUTs, 33029 FFs, 115 18Kb BRAMs • (MNISTの)推論時間 • RF: 約5000 FPS@100MHz, Zedboard使⽤時 • CNN: 約200 FPS@100MHz, Zedboard使⽤時 39 データセット次第ではCNNよりも同等なHW・認識精度で25倍⾼速
  40. 40. まとめ • Random ForestをFPGAで実装 • DNNよりも(少ないデータセットで)⾼速に学習 • Scikit-learnを使った学習・コード⽣成 • FPGAで性能を発揮できるデータセット • ヘテロジニアスなパイプライン • GPUが苦⼿とする構造 • Xilinx SDSoC, Intel SDK OpenCLを使ったお⼿軽実装 • Deep Forestの紹介 • RFよりも認識性能は上だが、コストに⾒合うかは疑問 • No Free Lunch TheoremはHWから⾒ても真でした →あらゆる問題で性能に優れる万能な機械学習HWは存在しない とはいうものの… 40

×