見出し画像

近刊『高位合成によるFPGA回路設計』まえがき公開

2022年2月下旬発行予定の新刊書籍、『高位合成によるFPGA回路設計』のご紹介です。
同書の「はじめに」を、発行に先駆けて公開します。

***


はじめに

2015年10月、GoogleのAlphaGOが人間に勝ったというニュースが世界中を駆け巡りました。これを機に、深層学習(Deep Learning)技術の進展と相まって、世は一気にAIブームになったように感じます。「コンピュータが人間に勝った」という事実が耳目を集め、コンピュータが人間を超えるという、シンギュラリティもまことしやかに語られるようになりました。また、時期を同じくして、GPUベンダーのNVIDIAが、AIデバイスメーカーの雄として露出を高めていくことになります。画像をピクセルごとに高速に処理するために、単純な演算コアを内部に多数もち、並列に計算することに特化したGPUが、単純な積和演算を並列に実施する深層学習の計算構造に適していたため、

「画像処理(グラフィック処理)=GPU」

という構図は、そのまま

「深層学習=GPU」

に置き換わり、NVIDIAが時代の寵児として扱われていくことになりました。

このころ、右を向いてもGPU、左を向いてもGPU、報道を見てもGPU、外に出てもGPU、というGPU一辺倒の世の中に対して、次第にざわついた感情をもつようになりました。そんななかで目にしたのが、日本経済新聞2017年7月27日朝刊の記事です。

「消費電力1万2000人分」(AIと世界 見えてきた現実4)

人間の脳の消費エネルギー21ワットに対して、AlphaGoの消費電力は25万ワットであるため、人に置き換えると1万2000人分になる、というのが記事の主旨です。数字の正確性はともかく、人間に勝つために多大な消費電力を要していることは確かです。潤沢な計算機資源を使って、消費電力を気にせず組めるシステムであればよいのですが、ロボットや監視カメラなど、エッジ側で知能処理を行う場合には、消費電力は重要な要素となってきます。バッテリー駆動のシステムであれば、バッテリーの大きさや重さと、システムの稼働時間のトレードオフを考慮しなくてはなりません。

GPUは消費電力が多量であるとともに、発熱も大きく、エッジ側で知能処理を行うには最適なデバイスとはいえません。

ロボットをはじめとする組込み機器を扱ってきた筆者としては、「深層学習=GPU」一択かのような風潮に違和感を覚えていました。「何か違うな」と。そんななかで出会ったのが、FPGA(Field Programmable Gate Array)です。某所にて見たデモの衝撃は、いまでも鮮明にまぶたに焼き付いています。

デモの内容は、以下のようなものでした。

•使用したデバイスは、CPUコアとFPGAコアが同梱されたSoC(System on Chip)
•SoCを使ってフルHDの動画に対してフィルタ処理を2枚かける
•最初はCPUコアを使って処理させる
•次にFPGAコアを使って処理させる

一般的な画像フィルタ処理のデモでしたが、結果は衝撃的でした。

•CPUコアでは2、3FPS程度の性能しか出ないところで、FPGAコアでは遅れなく処理できる
•FPGAコアで遅れなく処理している間、同梱しているCPU資源はがら空き
•画像フィルタ処理は、CPU用ソフトウェアでオープンソースとして世に出ているもの

「これだ!」と思いました。処理の速さもさることながら、「オープンソースとして世に出ているもの」をFPGA化できる、ソフトウェア処理をFPGA化できる、というのがポイントです。これができるのであれば、FPGAコア同梱のSoC上でのソフトウェア処理を、処理負荷の高い部分だけFPGA側に追い出すことができます。しかも、追い出した後のCPUで別の処理を実行できます。後述するように、FPGAは、CPUやGPUのように大きな消費電力はかからず、並列計算も得意なので、深層学習にも向いています。したがって、エッジ向き、組込み機器向きの知能処理デバイスである、ということです。

これでようやく、「深層学習=GPU」一択から

「深層学習=FPGA」

という選択肢もある、ということで、腹に落ちた感じがしました。

しかし、いざ取り組んでみると、難物でした。FPGAはもともと電気回路設計のために使われてきたデバイスなので、デバイスベンダーのマニュアルはソフトウェアエンジニアが読み解くには困難であり、また一般書籍もほとんどない状況のなか、試行錯誤することになりました。これが、本書を執筆することを思い立った理由です。ソフトウェアエンジニアの知識からFPGAの世界に踏み込めるように、ソフトウェアエンジニア視点の書籍を作りたい、と考えました。

本書の構成は、以下のとおりとなっています。

第1章 知能処理アクセラレーション
第2章 FPGAによるシステム実装の考え方
第3章 高位合成による知能処理実装(基本編)
第4章 高位合成による知能処理実装(SLAM編)
第5章 FPGAによる知能処理実装(深層学習編)

第1、2章で本書のモチベーションとFPGAの概論を説明したあと、第3章以降では、実際に読者に手を動かしながら進められる構成としています。ソフトウェアロジックをFPGA実装するためには、「ハードウェア指向アルゴリズム」を工夫する必要があります。「ハードウェア指向アルゴリズム」が高位合成の肝なので、そのための手順を第3、4章で示しています。第3、4章を順に追っていけば、読者のみなさんが高位合成でソフトウェアロジックをFPGAに落とすことができます。一方、ベンダーのライブラリを使うと、「ハードウェア指向アルゴリズム」を自分で作らなくても、深層学習を動かして試すこともできます。第5章がライブラリの使い方となっています。したがって、地に足をつけてじっくりと取り組みたい方は、第1章から順に追ってください。手っ取り早く動かしたい方は、第1、2章のあとに、第5章に飛んでもかまいません。

また、Appendixには、評価ボードの開発環境構築の手順などを掲載しました。開発環境構築は、マニュアルやウェブの記事を見ながらでも行うことはできますが、試行錯誤を重ねることになるので、手順としてまとめました。

本書が、ソフトウェアエンジニアがFPGAに取り組む入り口となれば幸いです。

***

著:長瀬雅之(株式会社セック) 岩渕甲誠(株式会社セック) 
田中亮佑(株式会社セック) 川口敦史(株式会社アイヴィス)
松本茂樹(株式会社アイヴィス) 梶原信樹(株式会社アイヴィス)
田中悠一朗(九州工業大学) 田向権(九州工業大学)

高位合成の初歩からSLAMや深層学習の実装までカバーした、待望の入門書!

小型で省電力ながらも高性能なFPGAは、自動車やロボットなどでのエッジ処理に適したデバイスとして期待されています。とくに近年では、「高位合成」という、C/C++などの高級言語からFPGAの回路を組み上げる技術が発展しています。これによって、より手軽に、通常のソフトウェア開発と近い感覚でFPGAの開発に取り組むことが可能になっています。

 本書では、はじめてFPGAに触れる人でも実用的な知能処理の実装ができるように、基礎的な知識から応用例まで丁寧に解説しています。FPGAに興味のあるソフトウェアエンジニアの方々や、より効率的な開発をしたい組込みエンジニアの方々にもおすすめです。

 〈本書の特長〉
●簡単なプログラムを通して、高位合成のポイントを一つ一つ説明しています。さらに、実践的なアプリケーションの例として、SLAMの実装について解説しています。

●自身の手でゼロから開発するだけでなく、より高性能な処理を可能にするため、さまざまなライブラリがベンダーから提供されています。その活用例として、深層学習の実装について解説しています。

●システム実装の考え方やアーキテクチャの知見といった基礎事項も要点を押さえて解説しているので、はじめてFPGAに触れる人でも無理なく学ぶことができます。

【目次】
Chapter1 知能処理アクセラレーション
 1-1 ムーアの法則の終焉
 1-2 FPGAとは
 1-3 FPGAvsGPU
 1-4 開発ツールの進展
 1-5 エッジでの知能処理におけるFPGAという選択

Chapter2 FPGAによるシステム実装の考え方
 2-1 リアルタイムシステムと組込みシステム
 2-2 アルゴリズムの並列性
 2-3 回路設計と性能評価の考え方
 2-4 FPGAの構造・設計フロー・理解しておく重要ポイント

Chapter3 高位合成による知能処理実装(基本編)
 3-1 高位合成でのFPGA回路の設計
 3-2 高位合成でのパイプライン処理
 3-3 ストリーム型
 3-4 高位合成での並列処理
 3-5 メモリアクセス
 3-6 高位合成でのクラス設計

Chapter4 高位合成による知能処理実装(SLAM編)
 4-1 ORB-SLAM2とは
 4-2 全体設計変更
 4-3 個別処理の設計変更
 4-4 開発環境
 4-5 性能測定

Chapter5 FPGAによる知能処理実装(深層学習編)
 5-1 FPGAと深層学習の相性
 5-2 FPGAを使った深層学習への取り組み方
 5-3 VitisAI環境の構築
 5-4 VitisAIを用いたMNISTの実装
 5-5 VitisAIを用いたYOLOv3の実装

まとめ
Appendix
索引

この記事が気に入ったらサポートをしてみませんか?