[論文レビュー] Compiling Deep Learning Models for Custom Hardware Accelerators
この論文では、Torch7のモデル記述から機械語命令を自動生成するSnowflakeと呼ばれる、カスタムFPGAベースのディープラーニングアクセラレータ向けのコンパイラを提示する。モデル解析、ワークロード分解、メモリ帯域幅最適化のためのループ再配置、通信負荷のバランス調整を活用することで、手動最適化コードと同等の性能を達成し、250 MHzで5Wの消費電力でAlexNet(93.6 fps)およびResNet18(21.4 fps)の効率的な推論を実現した。
Convolutional neural networks (CNNs) are the core of most state-of-the-art deep learning algorithms specialized for object detection and classification. CNNs are both computationally complex and embarrassingly parallel. Two properties that leave room for potential software and hardware optimizations for embedded systems. Given a programmable hardware accelerator with a CNN oriented custom instructions set, the compiler's task is to exploit the hardware's full potential, while abiding with the hardware constraints and maintaining generality to run different CNN models with varying workload properties. Snowflake is an efficient and scalable hardware accelerator implemented on programmable logic devices. It implements a control pipeline for a custom instruction set. The goal of this paper is to present Snowflake's compiler that generates machine level instructions from Torch7 model description files. The main software design points explored in this work are: model structure parsing, CNN workload breakdown, loop rearrangement for memory bandwidth optimizations and memory access balancing. The performance achieved by compiler generated instructions matches against hand optimized code for convolution layers. Generated instructions also efficiently execute AlexNet and ResNet18 inference on Snowflake. Snowflake with $256$ processing units was synthesized on Xilinx's Zynq XC7Z045 FPGA. At $250$ MHz, AlexNet achieved in $93.6$ frames/s and $1.2$ GB/s of off-chip memory bandwidth, and $21.4$ frames/s and $2.2$ GB/s for ResNet18. Total on-chip power is $5$ W.
研究の動機と目的
- プログラマブルで低消費電力なFPGAベースのアクセラレータ(Snowflake)に、カスタム命令セットを備えた多様なCNNモデルを効率的にコンパイルすること。
- 手作業によるアセンブリコーディングの手間とミスを減らすために、高レベルのTorch7モデル記述から機械語命令を自動生成すること。
- 知的なループ再配置(Mloop対Kloop)と複数のメモリユニットにわたる負荷のバランス調整により、メモリ帯域幅の使用を最適化すること。
- 異なるCNNアーキテクチャに一般化しつつ、ハードウェアの利用効率とパフォーマンスを最大化すること。
提案手法
- Torch7のJSONに類似したモデル定義ファイルからモデル構造を解析し、レイヤーの種別、次元、接続関係を抽出する。
- CNNワークロードを計算処理とデータ移動処理に分解し、特に畳み込み層とそのメモリアクセスパターンに注目する。
- 帯域幅制約に基づいて、データ移動を最小限に抑えるために、ループ再配置戦略(Mloop:繰り返しマップロード;Kloop:繰り返しカーネルロード)を選択する。
- 通信負荷のバランス調整により、4つのロード/ストアユニットにメモリ負荷命令を均等に分散させ、ボトルネックの発生を防ぎ、帯域幅の利用効率を向上させる。
- コンパイラはパフォーマンスモデルを用いて、データ再利用と命令スケジューリングの意思決定を支援し、アイドルサイクルを最小限に抑え、計算と重ね合わせを最大化する。
- 生成された命令は、手動最適化コードとの検証と、実際のモデル(AlexNet、ResNet18、ResNet50)を用いたSnowflake FPGA上でのベンチマークによって検証された。
実験結果
リサーチクエスチョン
- RQ1多様で複雑なCNNモデルを、RISCベースのカスタム命令セットを備えたカスタムハードウェアアクセラレータに効率的にマッピングするにはどうすればよいか?
- RQ2異なる畳み込み層の設定において、メモリ帯域幅の圧力を最小限に抑えるために、どのループ順序戦略(Mloop対Kloop)が最適か?
- RQ3複数のメモリユニットにわたる通信負荷のバランス調整は、全体のアクセラレータの利用効率とスループットをどの程度向上させ得るか?
- RQ4完全に自動化されたコンパイラは、畳み込み層に関して、手動最適化アセンブリコードと同等のパフォーマンスを達成できるか?
主な発見
- コンパイラが生成した畳み込み層用の命令は、手動最適化アセンブリコードと0.1%以内のパフォーマンスで、コード生成効率の高さを示した。
- 250 MHzで動作するSnowflakeは、1.2 GB/sのオフチップメモリ帯域幅を用いて、AlexNetの推論で93.6フレーム/秒を達成した。
- ResNet18では、2.2 GB/sのメモリ帯域幅を用いて21.4フレーム/秒を達成し、より深いネットワークへのスケーラビリティを示した。
- 通信負荷のバランス調整により、メモリボトルネックに起因する性能劣化が軽減され、負荷不均衡5%では1.658倍、114%では1.297倍のスループット向上が得られた。
- コンパイラは、1フレームあたり218.61 msの時間でResNet50の推論を正常に実行し、モデルアーキテクチャに一般化可能であることを確認した。
- メモリ帯域幅の制限とコールドキャッシュミスが、特に全結合層において主要なボトルネックであることが特定され、今後の最適化の余地が示唆された。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。