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.

Optimizing fpga based accelerrator design for deep convolutional neural networks

424 views

Published on

Optimizing fpga based accelerrator design for deep convolutional neural networksについてまとめ

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Optimizing fpga based accelerrator design for deep convolutional neural networks

  1. 1. Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks 計算機システム研究室B4 中岡典弘
  2. 2. 目次 1. ABSTRACT 2. BACKGROUND 3. RELATED WORK 4. ACCELERATOR DESIGN EXPLORATION 5. IMPLEMENTATION DETAILS 6. EVALUATION 7. NEXT 1
  3. 3. ABSTRACT • CNNのデザインについて,最高のパフォーマンスと 最小限のFPGAリソース要件でソリューションを ルーフラインモデルによって特定する分析的設計手法の提案 2
  4. 4. BACKGROUND • CNNは高精度の画像認識を行う事ができ,広く用いられている • 高性能,再構成性,高速開発などのメリットにより, FPGAをベースとしたCNNアクセラレータが提案されている • 既存のアプローチではリソースが十分に活用されてなく, 最高のパフォーマンスは達成できていない • 深層学習の複雑さとスケーラビリティの増加がさらに問題 • ルーフラインモデルを用いた解析的設計手法によって解決する 3
  5. 5. Roofline Model • 達成可能な実効性能の上限と, その性能ボトルネックを解析するための シンプルな性能モデル • 特定のハードウェアプラットフォーム上の アプリケーションの達成可能な スループットを定式化 𝐴𝑡𝑡𝑎𝑖𝑛𝑎𝑏𝑙𝑒 𝑃𝑟𝑒𝑓. = min 𝐶𝑜𝑚𝑝𝑢𝑡𝑎𝑡𝑖𝑜𝑛𝑎𝑙 𝑅𝑜𝑜𝑓 𝐶𝑇𝐶 𝑅𝑎𝑡𝑖𝑜 × 𝐵𝑊 • アプリケーション性能が演算能力か メモリI/O性能のどちらか小さい方に律速 4
  6. 6. RELATED WORK • 従来のアプローチ 1. 主にソフトウェア実装によってCNNアプリケーションを構築し 1つのハードウェア収縮アーキテクチャアクセラレータを使用して フィルタリング畳み込みジョブを実行する(多くのハードウェアリソースを節約) 2. 主に特徴マップと畳み込みカーネルの中で並列性を使用 3. 「出力間」と「出力内」の並列処理を使用 4. パフォーマンスを向上させるために非常に高い帯域幅と動的構成を使用 5. 日付の再利用を最大化し,帯域幅要件を最小限に抑えることを選択 6. 計算性能を最大化することを考慮していない 7. 次のレイヤの計算に移行するときにFPGAをプログラムするのに時間を要する • 今回のアプローチ 1. データの再利用にはオンチップバッファを使用しない 2. データの再利用を活用し,帯域幅とFPGAの計算能力のバランスを保つ 3. わずかなレジスタを構成するのにわずかマイクロ秒しかかからない 5
  7. 7. Convolutional Neural Network • CNNは学習の際にはbackpath,認識にはfeedforward • 学習で得られたCNNを手元で実行(認識)するとき feedforward計算の速度が重要 • FPGAでfeedforward計算を高速化することに重点 • CNNは特徴抽出器と分類器の2つで構成 • 特徴抽出器は畳み込み層および任意のサブサンプリング層で構成 • Feedforward計算では畳み込み層の計算が90%以上を占める ∴畳み込み層の計算を高速化 ⇒feedforward計算の高速化 6
  8. 8. A CNN Accelerator Design on FPGA 7 • 処理のためのデータは外部メモリに • データはPEに供給される前に バッファにキャッシュ • ダブルバッファで計算時間を データ転送時間でカバー • 設計課題 1. データの一部をチップに収めるための ループタイリング 2. オンチップデータを効率的に処理するため, PEとバッファの構成と相互接続 3. PEのデータ処理スループット =オフチップ帯域幅
  9. 9. ACCELERATOR DESIGN EXPLORATION • CNNにおける畳み込み層を高速化 1. ループタイリングを適用 2. タイルファクタを用いて計算性能を定式化 3. データ再利用技術とタイルファクタで計算対通信化を定式化 4. 計算性能と計算対通信化でFPGA仕様の計算メモリ, アクセスマッチデザインを提示するデザインスペースを定義 5. 最良の均一アクセラレータを選択 8
  10. 10. Convolution Layer 9 • K:カーネルサイズ • N:入力特徴マップの数 • S:ストライド • M:出力特徴マップの数 • R:出力特徴マップの列 • C:出力特徴マップの行 for (row=0; row<R; row++){ for (col=0; col<C; col++){ for (to=0; to<M; to++){ for (ti=0; ti<N; ti++){ for (i=0; i<K; i++){ for (j=0; j<K; j++){ output_fm[to][row][col] += weights[to][ti][i][j] * input_fm[ti][S*row+i][S*col+j]; }}}}}} 𝑌 𝑚 𝑟 𝑐 = 𝑛=0 𝑁−1 𝑖=0 𝐾−1 𝑗=0 𝐾−1 𝑊 𝑚 𝑛 𝑖 𝑗 × 𝑋 𝑛 𝑆 × 𝑟 + 𝑖 [𝑆 × 𝑐 + 𝑗]
  11. 11. Loop Tiling 10 for (row=0; row<R; row+=Tr){ for (col=0; col<C; col+=Tc){ for (to=0; to<M; to+=Tm){ for (ti=0; ti<N; ti+=Tn){ for (trr=row; trr<min(row+Tr,R); trr++){ for (tcc=col; tcc<min(col+Tc,C); tcc++){ for (too=to; too<min(to+Tm,M); too++){ for (tii=ti; tii<min(ti+Tn,N); tii++){ for (i=0; i<K; i++){ for (j=0; j<K; j++){ output_fm[too][trr][tcc] += weights[too][tii][i][j] * input_fm[tii][S*trr+i][S*tcc+j]; }}}}}} }}}} External Data Transfer On-chip Data Computation • ループをあるブロックサイズに分割することでキャッシュやバッファに乗せる技術
  12. 12. Computer Optimization 11
  13. 13. Loop Unrolling • 単純なループ処理をUnroll(展開)することで,処理速度を上げる • データ共有関係によって実装が異なる 12
  14. 14. Loop Unrolling • Loop Tiling時のデータ共有関係を示す • Loopの次元数too,tiiをUnroll • 生成されたハードウェア実装を示す 13
  15. 15. Loop Unrolling & Loop Pipelining • Loop Pipelining ループ処理をパイプライン化する • Loop UnrollingとLoop Pipeliningしたコードを示す 14 for (i=0; i<K; i++){ for (j=0; j<K; j++){ for (trr=row; trr<min(row+Tr,R); trr++){ for (tcc=col; tcc<min(col+Tc,C); tcc++){ #pragma HLS pipeline for (too=to; too<min(to+Tm,M); too++){ #pragma HLS UNROLL for (tii=ti; tii<min(ti+Tn,N); tii++){ #pragma HLS UNROLL output_fm[too][trr][tcc] += weights[too][tii][i][j] * input_fm[tii][S*trr+i][S*tcc+j]; }}}}}}
  16. 16. Tile Size Selection • 有効なタイルサイズ 0 < 𝑇𝑚 × 𝑇𝑛 ≤ (# 𝑜𝑓 𝑃𝐸𝑠) 0 < 𝑇𝑚 ≤ 𝑀 0 < 𝑇𝑛 ≤ 𝑁 0 < 𝑇𝑟 ≤ 𝑅 0 < 𝑇𝑐 ≤ 𝐶 15 𝑐𝑜𝑚𝑝𝑢𝑡𝑎𝑡𝑖𝑜𝑛𝑎𝑙 𝑟𝑜𝑜𝑓 = 𝑡𝑜𝑡𝑎𝑙 𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑜𝑝𝑒𝑟𝑎𝑡𝑖𝑜𝑛𝑠 𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑒𝑥𝑒𝑐𝑢𝑡𝑖𝑜𝑛 𝑐𝑦𝑐𝑙𝑒𝑠 = 2 × 𝑅 × 𝐶 × 𝑀 × 𝑁 × 𝐾 × 𝐾 𝑀 𝑇𝑚 × 𝑁 𝑇𝑛 × 𝑅 𝑇𝑟 × 𝐶 𝑇𝑐 × (𝑇𝑟 × 𝑇𝑐 × 𝐾 × 𝐾 + 𝑃) ≈ 2 × 𝑅 × 𝐶 × 𝑀 × 𝑁 × 𝐾 × 𝐾 𝑀 𝑇𝑚 × 𝑁 𝑇𝑛 × 𝑅 × 𝐶 × 𝐾 × 𝐾 𝑤ℎ𝑒𝑟𝑒 𝑃 = 𝑝𝑖𝑝𝑒𝑙𝑖𝑛𝑒 𝑑𝑒𝑝𝑡ℎ − 1. ∴Computational roofはTmとTnの関数である
  17. 17. Memory Access Optimization 16
  18. 18. Local Memory Promotion • 冗長な操作を減らすことに有用 • ‘𝑜𝑢𝑡𝑝𝑢𝑡_𝑓𝑚’ memory access = 𝑀 𝑇𝑚 × 𝑅 𝑇𝑟 × 𝐶 𝑇𝑐 (before. 2 × 𝑀 𝑇𝑚 × 𝑁 𝑇𝑛 × 𝑅 𝑇𝑟 × 𝐶 𝑇𝑐 ) 17 for (row=0; row<R; row+=Tr){ for (col=0; col<C; col+=Tc){ for (to=0; to<M; to+=Tm){ for (ti=0; ti<N; ti+=Tn){ //load output feature maps //load weights //load input feature maps L: foo(output_fm(to,row,col),weights(to,ti),input_fm(ti,row,col)); //store output feature maps } }}}
  19. 19. Loop Transformations for Data Reuse • ループ変換 ループの入れ子の順序を変更し,配列要素の参照回数を最小限に 抑え,必要なメモリ参照数を減らす(総通信量削減) • ループと配列のデータ共有関係 18
  20. 20. CTC Ratio • CTC = Computation To Communication • 計算対通信(CTC)比はメモリアクセスあたりの計算動作 • データ再利用の最適化はメモリアクセスの総数を減少 ⇒計算対通信を増加 • 特定のループスケジュールとタイルサイズが与えられたとき, 計算対通信は次の計算で表すことが出来る 19
  21. 21. CTC Ratio 20 • 𝛼:memory access • 𝛼𝑖𝑛:input feature maps • 𝛼 𝑤𝑔ℎ𝑡:weights • 𝛼 𝑜𝑢𝑡:output feature maps • 𝐵:Buffer access • 𝐵𝑖𝑛: input feature maps • 𝐵 𝑤𝑔ℎ𝑡: weights • 𝐵 𝑜𝑢𝑡: output feature maps
  22. 22. Design Space Exploration • 特定のループスケジュールとタイルサイズタプル<Tm,Tn,Tr,Tc>が 与えられた場合,Computational RoofとCTC Ratioが得られる • 選択基準は最小帯域幅(より少ないI/O,LUT,配線接続など) 21
  23. 23. Multi-Layer CNN Accelerator Design • 異なるUnroll係数を持つ複数の畳み込み層をサポートすることは難しい ⇒均一なUnroll係数を持つハードウェアアーキテクチャ 22
  24. 24. IMPLEMENTATION DETAILS 23
  25. 25. System Overview 24 • DDR3:外部ストレージ • MicroBlaze:RISCソフトプロセッサコア • AXI4liteバス:コマンド転送用 • AXI4バス:データ転送用 • CNNアクセラレータ:AXI4バス上のIP • MicroBlazeからAXI4liteバスを介して コマンドとコンフィグレーションパラメータを 受信し,FIFOインタフェースを介して カスタマイズされたデータ転送エンジンと通信 • データ転送エンジンはAXI4バスを介して 外部メモリにアクセスできる
  26. 26. Computation Engines 25 • 2レベルの展開された(Tm,Tn)ループは 同時に実行する計算エンジン • 最良のクロスレイヤ設計<Tm,Tn>=<64,7>
  27. 27. Memory Sub-System 26 • オンチップバッファはダブルバッファリングの基本概念に基づく • ダブルバッファリングはデータ転送時間を演算と重複させるためにピンポン方式で動作 • 入力特徴マップと重みの2つと出力特徴マップの2つの4セットで構成 1. 入力バッファセット0で処理している間に, 次のフェーズデータを入力バッファセット1にコピー 2. 逆の動作を行う (1,2がピンポン操作) 3. N 𝑇𝑛 フェーズが完了すると,出力特徴マップがDRAMに書き込まれる 4. 出力バッファ1が新しい結果を生成するまで,出力バッファ0になる(ピンポン操作)
  28. 28. External Data Transfer Engines 27 • アクセラレータと外部メモリ間のデータ転送を提供 • 様々なプラットフォームやツール固有の帯域幅機能からアクセラレータを分離 • IP-AXIインタフェースのビット幅の増加は帯域幅に影響しない • AXIバスに追加されたIPインターフェイスが増えるにつれて 帯域幅はほぼ直線的に増加し,最大帯域幅は約4.5 GB/sに • 最小帯域幅(1.55GHz)に合わせたIPインタフェース数を選ぶ(今回は4つ)
  29. 29. EVALUATION 28
  30. 30. Vs. Other FPGAs 29
  31. 31. Vs. CPU(Xeon E5-2430) 30
  32. 32. NEXT • サブサンプリングまたはmax pooling層などの 他の任意の層との統合について 31

×