Microsoft BingのFPGAアクセラレーションについて学ぶ 1
MicrosoftのBingをFPGAで高速化した件についての話。
FPGAで処理をしたことよりも、FPGA間ネットワークをイーサネットとは別に用意する
システムアーキテクチャとその運用に注目すべき。
ホモジニアスでありながら高いアクセラレーション効果を得られるように、とても良い設計&使い方をしている。
なお、FPGAを使ったハードウェアアクセラレーション自体はいわゆるスパコンの分野(HPC)等で結構チャレンジ(海外ばかりだが)されてきていて、さして新しいアプローチではない。
最初のアプローチ、集中化
Microsoftはまずサーバーのアクセラレータとして最高のものを作ろうとした。
XilinxのFPGA Spartan6を1個とVertex6を6個使い、PCIeにてホストCPUと接続されたアクセラレータ「BFB Board」。なおSpartan6はPCIe接続(PLXのPCIeチップ)とVertex6群(アクセラレーション用)とのホストFPGAとして使われているようで、論文中などではアクセラレーションリソースとしてカウントされていなかった。
最高のアクセラレータをホストCPUへ繋ぐのはハードウェアアクセラレーションのアプローチとしてはきわめて普通
で、これまでにも実施されてきたから「とりあえずやってみっか」と深く考えずに作ったのだろう。
プロトタイプの実際のFPGA接続関係は不明だがFPGA間はAuroraなどのシリアルインターフェースで双方向通信可能としていると思う。
6FPGAパイプライン構成だとこんなイメージだ。
1カードが高価となるため全サーバーには搭載せず、他サーバー群が接続されているメッシュネットワーク上に接続するという使い方をMicrosoftは想定したそうだ。
しかしながら、Microsoftのやりたいことに対してこのアプローチには以下の問題がある。
・搭載FPGA数による制限
6FPGAで収まらないアプリケーション
への対応の問題。FPGAアクセラレーション可能な他サーバーを用意すれば6FPGA以上の構成は可能だが、イーサネット経由となるためこのFPGA間通信がボトルネックとなってしまう。
・FPGA搭載数の制限
PCIeの電力供給は25W
である。仮にFPGA数が増えると必要な電力が増えるため、専用電源の設計(+熱設計も)が求められる。
・物理スペース制限
写真を見れば分かるようにPCIカードサイズ基板に6個以上を載せるのが困難。
Vertex6 SX315Tのパッケージサイズは35mm角or42.5mm角+周辺回路なためPCIeカードサイズにたくさんのFPGAを収めるには小パッケージFPGAの高性能化に期待するしかない。
物理スペースの制約を外すとなると、専用のアクセラレーションサーバーとしてのラックを含めた新規設計が求められる。
・単一障害点となる
アクセラレーションサーバーに障害が発生すると、それを使う他サーバーのサービスが停止する。回避するには全サーバーにアクセラレータを搭載するか、アクセラレーションサーバー停止時はソフトウェア処理でとりあえずサービスを提供するなどがある。
・基板製造難度
歩留まり。基本的に部品点数が多い複雑な基板は製造が難しくなる。1基板あたりに発生する不良部品の遭遇率や、製造過程での不良発生率は単純な基板より高い。1つあたりの価格は非常に高価なので、不良品発生による損失はバカにできない。修理すると言ってもBGAなど簡単に付け替えたりできない部品も多い。
次のアプローチ、分散化
集中化アプローチの問題から、Microsoftのケースでは分散化が適している
と判断。
レイテンシよりも、スループットの改善と耐障害性を重視しているため分散化はコスト面で期待できる。
プロトタイプでの経験も踏まえ、以下の様な要件を満たすように設計された。
・1サーバーの上昇コストは30%に収める
全サーバーに搭載するため1カードあたりが低コストである必要がある。
・1サーバーの消費電力増加は10%に収める
全サーバーに搭載するため1カードあたりの消費電力の考慮する必要がある。
・ハードウェアアクセラレータはPCIeの供給電力25W以内で動作すること
どうしても専用電源を用意する必要があるならコストをかけて集中化したほうがいい。
・現状のサーバー動作に影響を与えない
アクセラレータの搭載にあたって必要な変更は無い方が望ましい。
・サーバーネットワークの変更の必要がないこと
イーサネットの接続構成を変更する=データセンターの再設計は大変。
・既存システムより故障率を上昇させないこと
システム稼働率の低下や全体パフォーマンスが下がるような施策は無意味。
基本的に低コスト志向になった。 FPGAがXilinxからAlteraになったのはよくわからん大人の事情か、Xilinxの開発ツールが使いにくいからかなんなのかは不明。 ホストCPUに温められるのもあって68℃に達するため、高温条件下に強いインダストリアルグレード品を採用。基板は16層になったそうだ。
分散化アプローチ1回目
単純に分けた。
またもやよく考えずに「とりあえず分散化してみた」って感じだ。
1サーバに1FPGAがPCIe接続されて、ラック内のサーバ間通信のためTORスイッチという装置を置いた。
確かに分散化されてFPGAパイプライン構成の柔軟性はよくなったが、この構成ではパイプラインのためのFPGA間通信=TOR経由=CPU経由であるためFPGAの処理速度に対しFPGA間通信が遅い
という状況が考えられる。どうしてもCPUを経由するため、そこがボトルネックとなりFPGAの持つ性能を活かしきれない。
分散化アプローチ2回目
TORによるサーバーネットワークとは別に、FPGA間をシリアルインターフェースで直接続
してFPGAパイプラインを構成できるようにしたCatapult基板が作られた。
1FPGAはホストCPUとPCIe3.0x8で接続
され、さらに他の4FPGAとSL3(Serial Lite III)で接続
されている。SL3は2GB/sの双方向通信でSFF-8080 SASポートにアサイン。リング状に改造したSASケーブルで物理的に接続される。
Microsoftは1段に2サーバー挿せる24段のラックを使用しており、この計48サーバーをシステムのひとつの単位として「pod」と呼んでいる。pod間はイーサネットで接続
される。
1podにある48FPGAは、6FPGAからなるトーラス状ネットワークと、別の6FPGAトーラスと接続して作る8FPGAトーラスを組み合わせたネットワーク
構造を持つ。
48FPGAを障害FPGAを迂回可能なかたちで接続できれば良いので、トーラス中に含まれるFPGA数は適当に決めた思われる。(8x6でも良いし)
6x8トーラス構造と1podでの関係は以下のようになる。◯はFPGAで、赤色のラインが6FPGAトーラス、緑色のラインが8FPGAトーラスとなる。実際の位置関係での8FPGAトーラス接続は全部書くとわけわかんなくなるので、1例だけにした。 見ればわかると思うが、6FPGAトーラス内で同位置関係にある他6FPGAトーラスのFPGAと繋いでいくだけだ。
今回のデモンストレーションおよびテストでは34pod(1632FPGA)でのシステム構築。
1つあたりが単純化されたおかげか、組み上げ時に発覚した不良品発生率はCatapult基板7カード(0.4%)の不良
とFPGA通信3264Link(0.03%)がSASケーブルアセンブリ不良
により発生した程度であり、組み上げ後数か月間の運用中に新たなハードウェア不良は出なかったとのこと。
FPGAパイプラインとそのマッピング
あるアプリケーションを、48FPGAに対してどのようにマッピングするかは重要な問題で、手作業では管理が大変。そこで、Microsoftは「マッピングマネージャー」というツールを開発
した。実際どういった理屈で動作するものかは今のところ不明。重要だと思うので当分は秘密のままだろう。
ハードウェア上、マッピングに強い制約は無いが、一筆書き出来るような配置が無駄のないものだろう。(通信経路のためだけのFPGAが無駄になる) Math、Physics、Comp.Vision、WebSarchの4つのアプリケーションアクセラレータをマップしたイメージは以下となる。
図ではTORが消えているが、この例では利用されていないだけでシステム要素として存在する。構築したFPGAパイプラインに属するCPUは、どのCPUでもFPGAパイプラインに対しPCIeからアクセス可能
である。CPU→PICe→FPGA(Local)→SL3→....→SL3→FPGA(パイプライン先頭)という感じだろう。1回目の分散化ようなサーバ間通信を利用しないため、FPGAパイプライングループ内のCPUはどれも高性能なアクセラレーション機能を利用できる。
ただし、FPGAパイプライングループ外のCPUは1回目の分散化と同じようなサーバ間通信でのアクセスとなる。
今回Microsoftは、デモンストレーションとしてBingサービスの一部を7+1FPGAに実装した。(1個は予備) 部分としてはRaaS部分後半ということだが、アムダールの法則のとおり重い処理をハードウェア化したのが実際だろう。
FE→FFE→MLSの3つの処理からなるアプリケーションで、図では2つのサーバー(ホストCPU)がFPGAパイプラインにアクセスしている。スペアFPGAは平常時はデータを受けて渡すだけの機能を提供してパイプラインに組み込まれていると思われる。 各FPGAの内部リソース使用率と動作周波数は以下。
FPGA0 | FPGA1 | FPGA2 | FPGA3 | FPGA4 | FPGA5 | FPGA6 | FPGA7 | |
---|---|---|---|---|---|---|---|---|
Logic使用(%) | 74 | 86 | 86 | 20 | 47 | 47 | 48 | 10 |
RAM使用(%) | 49 | 50 | 50 | 64 | 88 | 88 | 90 | 15 |
DSP使用(%) | 12 | 29 | 29 | 0 | 0 | 0 | 1 | 0 |
動作周波数(MHz) | 150 | 125 | 125 | 180 | 166 | 166 | 166 | 175 |
処理内容によってリソース使用率や動作周波数がまちまちなのは当然。 今回MicrosoftはFFE処理のために専用プロセッサを設計したので、FPGA1,2のDSP使用率が高いのはそのあらわれだ。 FPGA間通信がボトルネックとなるような1FPGA内での超効率化はあんまり意味なく、FPGA通信帯域を充分に使いかつ低周波数動作であることが電力効率が良い。
次回
長くなってきたので、ここで中断。 次回はMicrosoftがFPGA内部に構築したアーキテクチャについて注目してみたり、GPGPUだったりと雑多な内容の予定。