MicrosoftはFPGAでDeep Learningを加速

Hot Chips 27でMicrosoftのErick S. Chung氏がFPFAを使ったDeep Learningの加速について発表を行った。

FPGAを使ったDeep Learningの加速について発表するMicrosoftのErick S. Chung氏

Microsoftは、データセンタのサーバにFPGAを搭載したモジュールを取り付けてBingのサーチを高速化するという実験の結果を昨年のISCAで発表しているが、今回の発表は、このハードウェアを使って、Deep Learningを加速したというものである。

MicrosoftのCatapultプロジェクト

Microsoftは「Catapult(カタパルト)」というプロジェクトで、データセンタのサーバにFPGAを付けて効率を改善する研究を行ってきている。Catapultでは、サーバのCPUにFPGAを付けてアクセラレータエンジンを作るだけでなく、FPGAで2次元トーラスのネットワークを作ってノード間の通信も担うという構造になっている。

FPGAとCPUの間は8GB/sのPCI Expressで結ばれ、FPGA間を繋ぐ2Dトーラスネットワークは2GB/s(20Gbit/sという記述もある)のリンクが使われており、ホップあたりの遅延時間は400nsとなっている。

次の図に見られるように、2Dトーラスを分割して、一部のサーバ群はBingサーチに使い、一部はDeep Learningに使うという使い方をMicrosoftは想定している。

CPUにFPGAを付け、FPGAはアクセラレータを作るだけではなく、2Dのトーラスネットワークを構成する

CatapultのFPGAアクセラレータにはAlteraのStratix V D5 FPGAが使われており、このFPGAは、172,600個のALM(Adaptive Logic Module)と2014個の20Kbitメモリ、1590個のDSPを集積している。そして、FPGAには8GBのDDR3-1333 DIMMが接続されている。

CatapultのハードウェアはStratix V GPUに8GBのDDR3-1333DIMMを付けたカードをPCIe 3.0 x8でCPUに接続する

そして、次の図に示すように、このカードが2ソケットのサーバのマザーボードの端に実装されている。

2ソケットのサーバの端にメザニンカードとしてFPGAカードを搭載する

Deep LearningではCNN(Convolutional Neural Network)という神経系を模したネットワークが使われる。このCNNでの入力の評価と学習には膨大な計算が必要になるが、FPGAの豊富な資源を使ってこの計算を行なわせ、30%以下のコストアップ、10%以下の電力アップで、1桁以上の性能向上を目指す。そしてFPGAアクセラレータを実際に使用して貰い、最終的にはソフトウェアライブラリとして提供するという構想である。

Deep CNNの計算にCatapultカードを使う。コストアップ30%以下、電力アップ10%以下で、一桁の性能アップを目指す。なお、Deep Learningのトレーニングは開発中で、まだ、できていない

CNNでは、Nピクセル×Nピクセルの画像で、各ピクセルはDビットで表現される画像を入力として、その中からkピクセル×kピクセルの小領域を取り出し、これに重みを掛けてその累計を計算する畳み込み演算を行う。そして、この計算はkピクセル×kピクセルの領域を取り出す位置をSピクセルずつ順にずらして行き、畳み込み出力に書き込む位置も順にずらして行き一面を計算する。この作業をH組の異なる重みを使って計算し、畳み込み出力を計算する。そして今度はpピクセル×pピクセルの領域の中で最大の値を選んで最大値をプールした出力に書き込む。

この時、N、k、H、pなどは毎回変わるが、この3段の操作を数十ステップ繰り返して、最終的に入力画像が何であったかを識別する。従って、大部分の計算が積和演算となる。

CNNの1ステップの計算。N、k、H、pは変わるがこの3段の処理を数10ステップ繰り返して、画像を認識する

次の図のように、CNNの計算は、PEのアレイの左から入力を供給し、アレイの上側から重みを供給し、交点のPEで積和を計算する。入力のピクセルは多いので、PEアレイでは1回では処理できないので、分割して処理を行っていると考えられる。そして、3段の計算が終わると、結果を出力マップに書き込む。

次に出力マップのデータを次回の処理に合わせて並べ替えて、3段の処理を必要回数繰り返す。

次の図に示すように、FPGAに実装されている回路は、各FUには積和演算器を持ち、入力と重みの積和を計算し、その結果にバイアスを加えて非線形関数を適用し、最大値を取るというハードウェアが並んでいる。

ImageNet-1Kという画像認識のコンペに使われている1000カテゴリの対象を含む画像ライブラリを入力として、それが何の画像であるのかを識別させたときの諸元を比較したのが次の表で、2ソケットのXeon E5-2450(2.1GHzクロック)のサーバでは認識速度は53画像/秒であったが、このサーバにAlteraの低価格FPGAである「Arria 10GX1150」を付けた構成では369画像/秒に性能を向上させることができた。Arria 10の消費電力は25Wで、元のサーバのピーク消費電力225Wが250Wに増えただけで約7倍に性能を向上している。

IntelのCore i7-5930KにNVIDIAのTitan X GPUを付けたシステムでは4129画像/秒の認識速度が得られたが、ピーク消費電力は475Wとなった。このシステムの方が性能/電力は高いのであるが、FPGAやGPUのアクセラレータを付けたシステムではCPUの負荷は低く、CPUをデータセンタの他の仕事に使うことができるのでCPUの電力を含めるのは妥当ではない。

2ソケットのCPUのシステム、それにArria 10 FPGAを付けたシステム、そしてCore i7-5930KにTitan X GPUを付けたシステムの性能比較

そこで、CPUの電力を除外すると、FPGAは25W、Titan X GPUは250Wとなる。この電力を使うと、性能/電力はArria 10は19.4GOPs/J、Titan Xは21.6GOPs/Jであり、ほぼ同等の性能である。

さらに、FPGAのフロアプランを見直せば、PE数を増加させることができ、認識速度を880画像/秒程度に引き上げることができる。これが実現できると、性能/電力は46.2GOPs/Jまで向上する。

CPUは別の仕事ができるので、その電力を除いた電力を使い、FPGAはフロアプランを見直してPE数を増やして性能を880画像/秒に引き上げると、FPGAアクセラレータの方が電力効率が高くなる

ベストケースでもFPGAの性能はGPUの1/5であるが、スケールアップで補うことができる。CNNの計算はGPUにとってはチューニングされた最適の計算負荷であるが、それでもFPGAは同等の電力効率を示し、さらにチューニングで2倍に改善できる見込みがある。また、FPGAはCPUオンリーのサーバよりDeep Learningでは7倍(改善すれば16倍)速く、BingのサーチやAzureのSmartNICにも使えるという柔軟性があり、データセンターの色々な処理に使える。

ということで、データセンタでのDeep Learningの加速にFPGAは向いているかという質問の答えはYesである。