FPGAと機械学習

こんにちは。スキルアップAI編集部です。

AIは凄まじい速さで日々成長しており、その中でも知能を持つエッジデバイスである「エッジAI」が注目を集めています。 今回のブログでは、そのエッジAIと深いかかわりを持つFPGAについて、ランダムフォレストの事例[1]を交え紹介します。

<目次>
1.FPGA
2.ランダムフォレストの計算におけるGPUとFPGAの違い
3.実験結果
4.まとめ
5.補足

# 1. FPGA
FPGAは、Field-Programmable Gate Arrayの略称であり、書き換え可能なハードウェアデバイス（大規模集積回路）のことを指します。 書き換えが可能なハードウェアデバイスであることから、FPGAは「やわらかいハードウェア」と表現されることもあります。
では演算を実行する場合、FPGAとCPUとでは何が違うのでしょうか？

CPUで演算を実行する場合、高級言語により記述された命令は、コンパイラにより、アセンブリ、機械語へと変換され、実行されます。
このとき、一般的には、どれほどのハードウェア資源を割り当てるのか詳細に決定することができません。

これに対し、FPGAに対してハードウェア設計言語（HDL）を用いてプログラムを書いた場合、その演算に最適なハードウェア資源を割り当てる設計が可能になります。
ゆえに、FPGAは、資源の限られたエッジAIに適したハードウェアであると言えます。

# 2. ランダムフォレストの計算におけるGPUとFPGAの違い
前節にて、FPGAの特徴として、最適なハードウェア設計が可能であることを挙げました。
ここでは、分類問題おけるランダムフォレストの推論を例に、最適なハードウェア設計について考えます。

分類問題におけるランダムフォレストの推論では、入力値を複数の決定木に渡し、それら決定木の判定結果から多数決をとり、出力を決定します。 ランダムフォレストの推論は通常、CPUで実行されますが、GPUで実行することも可能です。 GPUにて実行する場合の概念図を図1に示します。CPUの場合も、基本概念は図1と同じです。 図1において、DDR4/DDR5はメモリ、PE(processing element)は処理の単位を示します。ランダムフォレストにおける決定木の計算(D1〜D5)は各PEで実行されます。 GPUは複数のコアを持っているため、PEを並列に処理できます。
このとき、各決定木のモデル情報をメモリ(DDR4/DDR5)からPEに渡すため、広い帯域(wide band)が必要です。
また、各決定木の大きさはそれぞれ異なるため、各決定木の計算時間に差が出ます。 これにより、待ち時間が発生します。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/e7af0289-4384-2e93-2446-b22f797b7cbd.jpeg">
図1. GPU上でのランダムフォレストの構成
※D1～D5が推論を行う各決定木、PEはProcessing Element、DDR4/DDR5はメモリを示す
(参考文献[1]より引用)

FPGAは、書き換え可能なハードウェアデバイスであるため、ランダムフォレストに最適な処理過程を自分で実装することができます。ランダムフォレストにおける推論処理をFPGAに行う場合概念図を図2に示します。図2は、複数の入力データを順次処理していく過程を示しています。各決定木のモデル情報はメモリ(DDR3)からPEに伝えられますが、PE間でその情報を伝達するため、メモリとPE間は狭い帯域(narrow band)で十分です。FPGAは、GPUに比べオンチップメモリが大きいため、PE間の伝達を実現できます。各PEにおける処理は、D1からD4に向かって順に実行されます。決定木の処理は直列であるため、各決定木の大きさが異なっていたとしても、多数決をとる際の待ち時間は発生しません。このため、ハードウェア資源を効率よく使えることになります。

また、FPGAでは、ビット長を固定することができます。これにより、浮動小数点数で表現するCPUやGPUに比べ、ハードウェア資源を節約したり、演算を高速化することができます。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/9dd1cae1-cef6-93e7-d609-877cbb85dcf9.jpeg">
図2. FPGA上でのランダムフォレストの構成
※D1～D4が各決定木、PEはProcessing Element、tは時刻、DDR3はメモリを示す
(参考文献[1]より引用)

# 3. 実験結果
GPU、CPU、FPGAの計算効率に関する実験結果を図3に示します。LPSは、Lookups Per Secondの略であり、決定木の計算速度(論文には明記されていませんが1秒あたりに計算した決定木の数と推測されます)を意味します。LPS/Wは、電力1WあたりのLPSを意味します。Name列は、データセットの名称を意味します。詳しい実験環境を知りたい方は[1]をご参照下さい。

決定木の計算速度に関して、FPGAはGPUの10.7倍、CPUの14倍となっています。電力効率については、FPGAはGPUの61.3倍、CPUの12.1倍となっています。FPGAは、CPUやGPUに比べ、処理の高速化と省エネ化を図れるハードウェアであることがわかります。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/e046e86a-6ded-8148-55df-26b2092ed15b.jpeg">
図3.実験結果
(参考文献[1]より引用)

# 4. まとめ
FPGAは、書き換え可能なハードウェアデバイスであるため、計算対象に応じた最適な回路を構成することができます。FPGAを用いることにより、高速化や省電力化を図れます。昨今、エッジAIへの注目が高まっていることから、今後FPGAは更に重要な技術になっていくと考えられます。
皆さんも興味があれば、FPGAのプログラミングに取り組んでみてください！！
きっとPythonなどの高級言語だけでは実現できなかった新たなアプローチ、新たな発見があると思います。

また、エッジAIについてご興味のある方は、[エッジAI講座](https://www.skillupai.com/edge-ai/)のご受講をぜひご検討ください。

# 5. 補足
GPUを用いてランダムフォレストの高速化を図る方法をNVIDIA社が公開しています。
ご興味のある方は[こちら](https://developer.nvidia.com/blog/accelerating-random-forests-up-to-45x-using-cuml/)をご覧ください。
その他、FPGAに関して有用な情報として、参考文献[2][3]があります。[2]では、メモリ間のデータ転送の効率化について述べられています。[3]は、FPGAを理解するうえで必要な知識がよくまとまっています。

# 6. 参考文献
[1] [H. Nakahara, A. Jinguji, T. Fujii and S. Sato, “An acceleration of a random forest classification using Altera SDK for OpenCL,” 2016 International Conference on Field-Programmable Technology (FPT), Xi’an, China, 2016, pp. 289-292, doi: 10.1109/FPT.2016.7929555. ](https://ieeexplore.ieee.org/document/7929555)
[2] [Berkin Akin, Zeshan A. Chishti, and Alaa R. Alameldeen. 2019. ZCOMP: Reducing DNN Cross-Layer Memory Footprint Using Vector Extensions. In Proceedings of the 52nd Annual IEEE/ACM International Symposium on Microarchitecture (MICRO ’52). Association for Computing Machinery, New York, NY, USA, 126–138. DOI:https://doi.org/10.1145/3352460.3358305](https://dl.acm.org/doi/10.1145/3352460.3358305)
[3]編集 天野英晴　“FPGAの原理と構成”, オーム社, 2016年

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)