FPGA で始めるエッジディープラーニング (1)

みなさんこんにちは。このコースでは近年 AI に使われていることでも話題のディープラーニングを、FPGA を用いて実装する技術について紹介していきます。

このコースでは、ディープラーニングと FPGA 双方の理解を深めることを目標とし、以下の手順で FPGA 上で実際に動作するデザインを作成していきます。

  1. C/C++ でディープラーニングによる推論を行うコード作成
  2. 高位合成 (HLS: High Level Synthesis) により C/C++ コードをハードウェア記述言語に変換
  3. FPGA 上で動作確認

このコースで開発したデザインは、ACRi が提供する FPGA 検証環境上で試せるように公開する予定です。

第1回のこの記事では「そもそも、ディープラーニングってなに」という話と「FPGA でディープラーニングを行うことのメリット」について説明していきます。

ディープラーニングとは

ディープラーニングの説明をするためには、ニューラルネットワークを理解をする必要があります。

ニューラルネットワークは人の脳の神経細胞と神経回路網を模して作られた計算モデルであり、ある入力 (刺激) が与えられた時にそれを伝達し、最終的に入力に対応した出力 (反応) を行います。

具体例として、画像を入力して、その画像に写っている物体のカテゴリを認識する例を考えましょう。この例は機械学習の中で、分類というタスクに該当するものになります。

まずは「猫の画像」を入力として、ニューラルネットワークの出力が「この画像は猫である」となるように、入力と出力の対応を教え込ませます。このフェーズを学習と呼びます。

ある程度の学習が完了した後、学習されたニューラルネットに、新たな猫の画像を入力すると「この画像は猫である」といった画像の認識結果を出力させる事ができます。このように、学習されたニューラルネットワークを用いて、未知の入力から出力を推測するフェーズを推論と呼びます。

ニューラルネットワークは内部に多数のパラメータを持っています。具体的には、上の図のノード間を結合するエッジには、その結合の強さを表す「重み」というパラメータが割り当てられています。このパラメータを少しずつ変化させることにより学習が行われます。あるニューラルネットワークに対して、具体的なパラメータの組を割り当てたものをモデルと呼びます。

モデルに何かしらの入力を与えると、内部のパラメータに応じてある出力を得ることができますが、これがどれくらい妥当なものかを示す指標が必要です。この指標には幾つか種類がありますが、精度と呼ばれるものがよく用いられます。仮に、10枚の猫の画像を事前に学習したモデルに入力したとして、9枚が「猫である」と判定されたとします。この時、このモデルは 90% の精度を持つと言えます。

一般的には、沢山の入力と出力の組を学習することで、精度の高いモデルを得ることができます。

上述した仕組みにより、ニューラルネットのモデルに様々な問題を学習させて精度の高いモデルを作り、新しいデータに対して推論を行うことで、自動で問題を解くことができるようになりました。

ただ、単一のニューラルネットワークでは単純な問題しか解くことができなかったため、これらを多層に接続したより深いネットワークであるディープニューラルネットワーク (DNN) を構成し、より複雑な問題を解く試みが始まりました。これを、ディープラーニング (深層学習) と呼びます。

現在、ディープラーニングは画像や音声の認識、自然言語処理、異常検知など、現実世界の様々なタスクに用いられており、人間を超える精度を記録している例もあります。これらは通常のニューラルネットを更に構造的に工夫した計算モデルであるコンボリューショナル・ニューラルネットワーク (CNN) やリカレント・ニューラルネットワーク (RNN)、またはそれらの亜種や組み合わせによって実現されています。

特に CNN は画像認識の領域で非常に高い性能を発揮しており、上で説明した分類の他にも幾つかのタスクで利用されています (以下に4つの例を掲載)。

ディープラーニングを利用した技術やサービス、ビジネスも多く登場しており、今後も更に増えていくと予想されます。

ディープラーニングの概要については、多くの分かりやすい書籍や Web 文章、動画コンテンツがあります。以下に幾つかまとめておきますので、別途ご参照ください。

FPGA でディープラーニングを行うことのメリット

既に、多くのサービスや技術がディープラーニングを利用していることを述べましたが、これらの計算には GPU が多く使用されています。これはディープラーニングの主要な演算である行列積が、計算に必要なデータの局所性や再利用性が高いという特徴を持ち、GPU で計算することで性能がでやすいためです。

特に推論のみが必要な場合、ニューロン間の演算結果をメモリ上に残しておく必要がないため、必要なデータ量は少なくなります。この特徴から FPGA を用いてディープラーニングの推論を行う試みも始まりました

実際に、Microsoft の「Project Brainwave」はクラウド上での推論に FPGA を利用しており、検索エンジンにおける RNN の計算のレイテンシとスループットを10倍以上に改善したと公表しています。また、Xilinx は同社の FPGA で高速にディープラーニングの推論を行うためのツール「AI Edge Platform」をリリースしており、ユーザが FPGA を用いてディープラーニングを行うことができる環境も整いつつあります。

しかし、依然としてディープラーニングは GPU や CPU を用いて行う例が大半です。そこで、ここでは FPGA を用いてディープラーニングの推論を行うことのメリットを少し詳しく見ていきます。

低消費電力、省スペースなシステムを構築できる

FPGA は GPU ほど計算の並列度は高くありませんが、多くの計算において CPU より高い並列度を実現できます。また、単位時間あたりの消費電力も GPU より低い傾向があるため、消費電力の制約が厳しいシステムで DNN の推論を行う場合、GPU よりも FPGA での実装が適していることもあります。ただし、演算性能と消費電力にはトレードオフ (Operations / Watt) があるので、システムの要件に応じてきちんと見極めが必要です。

また、FPGA はシステム全体を1チップに収めることができるという長所もあります。例えば、FPGA に接続されたカメラ入力をディープラニングの計算回路に接続し、その計算結果によってシステムの制御を変えるといったアプリケーションが単一のチップ上で完結します。GPU とは異なり CPU 無しでも動作可能なので、CPU の分の電力やスペースを削減したシステムを構築することもできるでしょう。

超低レイテンシ、省スペースの推論が可能

FPGA の長所の一つにレイテンシの低さがありますが、これはディープラーニングの推論に対しても有効です。

上述した画像認識向けのディープラーニングなどは自動運転などの高い精度が必要なシステムでの活用が期待されています。しかし、同時にレイテンシの制約が厳しいシステムでもあるため、DRAM の応答速度や周辺機器との IO 性能の影響を受けやすい CPU や GPU では実現が難しいこともあるでしょう。

低ビット幅のデータを利用することで、レイテンシなどを削減できる

FPGA では任意ビット幅のデータが利用ができるので、4ビットや2ビットという本来 CPU や GPU ではメリットの得ることが難しいビット幅を採用することで、レイテンシの低減や計算資源の節約ができます。

ディープラーニングの推論は、ある程度の低いビット幅のデータを用いても、最終的な精度があまり劣化しないことが知られています。現状では、安定して精度が得られるのは8ビット程とされていますが、最新の研究では4ビットや2ビットまで削減しても良い精度が得られるモデルや学習法が登場しており、FPGA で実装されるものも増えてきています。

新しいニューラルネットワークの構造に対応しやすい

ディープラーニングは非常に研究が盛んな領域であり、日々新たな DNN が考案されています。これらの多くは、既存の標準的な計算を組み合わせたものですが、中には全く新しい計算手法を必要とするものもあります。特に、 GPU では効率化することが難しい特殊な構造を含むネットワークの場合、その計算がボトルネックになりディープラーニングの処理全体の速度が低下してしまいます。 FPGA は再構成可能という特徴があるため、このような変則的な計算に対しても柔軟に対応できる可能性があります。

ここまでは FPGA によるディープラーニングの推論のメリットに焦点を当てましたが、デメリットもあります。

  • CPU や GPU に比べて動作周波数が低く、実装を工夫しなければ性能で劣りやすい
  • CPU や GPU に比べて実装コストが高く、 FPGA 上でのディープラーニングをサポートしているソフトウェアが少ない
  • 多くの DNN はパラメータ量が多く、単純に FPGA 上に実装することは難しい
  • 単精度浮動小数などの高いデータ精度が必要な DNN の場合は性能が低下しやすい
  • 低いデータ精度で推論の精度が高いモデルを作るには高度な専門知識が必要
  • 推論より学習が処理時間のボトルネックになるケースが多いが、 FPGA で解決することは難しい (研究レベルでもほぼ無い)

近年では、ディープラーニングの計算に最適化された ASIC が多く市場に投入されていたり、GPU がディープラーニングに特化した回路を搭載したりと、FPGA よりもディープラーニングに適した製品が増えてきています。

これらを踏まえると、ディープラーニングを FPGA で行うメリットはそこまで多くないと言わざるを得ません。しかし、パラメータの量子化 (または低精度化) やネットワークの枝刈りなど、DNN の軽量化に関する技術は盛んに研究されており、これらの手法は FPGA と非常に相性が良いです。

また、FPGA ベンダが高速にディープラーニングを行うための IP を公開したり、ディープラーニングの計算に適したハードウェアを搭載した SoC タイプの FPGA が登場するなどの追い風もあります。FPGA によるディープラーニングの実用性はまだまだこれからですが、将来的には大きな可能性があると思います。

まとめ

この記事では、「ディープラーニングとは」、「FPGA でディープラーニングを行うことのメリット・デメリット」の2点について説明しました。

次回以降の記事では、簡単な画像分類のタスクに対して FPGA 上で推論を行うデザインを作成していきます。本コースで作るデザインは、上述した FPGA のメリットを活かすような優れたデザインではなく、とてもシンプルなデザインとなる予定です。その後の最適化の方針は最後の記事で示しますが、複雑な最適化等を考慮しない場合は FPGA 上の開発は意外と簡単であることが伝われば良いと思います。

株式会社フィックスターズ シニアエンジニア 山田貴登
株式会社フィックスターズ シニアエンジニア 松田裕貴

タイトルとURLをコピーしました