SANMAN

思いつきの考えを垂れ流すブログ

Amazon AWSがFPGA対応してしまった

かなり長い

re:Invent 2016の発表はかなり衝撃的だった。 AmazonクラウドコンピューティングサービスであるAWSFPGAもつかえるようになってしまった。 MicrosofがAzureでサポートするのが先だと思っていたのでびっくり。

ということで、以下のページより最大構成のf1.16xlargeで今すぐサインアップしてみた。 aws.amazon.com

FPGA開発経験があったり、興味がある方は今すぐサインアップ」って書いてあったので。 なんか勤め先情報とか聞かれるも、XilinxなどHW系のアカウントはホビー用途で作る時も聞かれるので気にせず送信してしまったがまあ大丈夫だろう。 ゴリゴリ使うというよりか、どういう感じの環境かを詳しく知りたいだけなので。そもそもAmazonから使用許可が降りるかもわからん。 インスタンス起動できなくてよいからちゃんとしたデータシートやらを見たい。

いまのところF1インスタンスの起動はできないから、ネット上にある情報をいろいろ探ってみた結果を書く。

値段

リストにないので不明だが、GPUインスタンスよりか安いか同等くらいじゃないだろうか。時間当たり5ドルくらいか? というのも「FPGAGPUに比べて電力対性能が良いぞ」というFPGAベンダのアピールがあるからGPUインスタンスより安くないと困るはず・・・だがツール類も提供するとなると同等くらいになる可能性もある。

AWSがどの世代のGPU使ってるか知らんけど、今回採用する最新世代、同クラスのFPGAが同等のGPUインスタンスより高かったら基本的に話になりませんね。 そのときはGPGPUしよう。

性能的にGPUと拮抗するかやや低い性能だけど、長期間稼働のコストGPUより安いとかならとても良い。 個人的感覚ではGPUの1/2くらいのコストならFPGAの勝利な感じ。

AWSを使ってサービスを作ってる人にとってはどうか

設備投資なしでFPGAによるコンピューティングがお試しでできるようになってしまうのはでかい。特に大量のテキストや動画、静止画を扱う系はFPGAがマッチしやすいから、Facebookだのが取り組んできたわけだが、Facebook並みの体力がなくても試せるってのはさすがに。いろいろいじってみたけど、なんか自分たちにはマッチしないなーっておもったらAWSインスタンス破棄すりゃいいんでしょ。いいっすね。

とはいえ、経験ゼロからのRTLはもちろんC言語のようでC言語でないVivado HLSはたぶん厳しい。IPインテグレータは単純なものならいいけど、大規模だと結構厳しい。

というわけで、自分で作ってみたいならとりあえずOpenCL(SDAccel)がいいんじゃないかと思う。対応しているならSDSoCもありだ。 コンテナー アプリケーションを見るとわかるがSDAccelならDeepLarningやFFMPEGSQLなんかのアクセラレーションのスタックがあるし。 無料なのかわからんけど。 あとは外注するとかかな。

ハードウェアエンジニアにとってどうか

FPGAを使ったコンピューティングがGPUインスタンスレベルに落ちれば、AWSを利用してサービスを作ってるその辺の企業で使われる可能性もなくはない。なので就職先の業界が増えるかも。 AWS Marketplaceを充実させる仕事や、受託とかもあるかも。単純にハードウェアエンジニアといってもFPGA、特にXilinxに強い必要があるけど。ASICと同じRTLが動作するとはいえ、FPGA特有のスキルや知識というのがあるから、ASIC系のひとはその辺を身に着ける必要はありそう。 とりあえず動くRTLならたぶんVivado HLSとFPGAの無駄遣いにより誰でも出来そうなので、そこからよりサイクル数が少なくとか規模を小さくして並列化とか、さらなる改善ができることが必須だろう。 オンプレミスでFPGAコンピューティングをしようとしている企業でも、オンプレの欠点をおぎなう形でAWSのようなクラウドコンピューティングサービスを使う可能性はあるので、勉強しておいたほうが良いと思った。

AlteraっていうかIntelはどうするのか

Xilinxの出すSDAccelってXeon+FPGAともろにぶつかる。アーキテクチャ的に差異があれどアプリケーション的にぶつかりすぎる。 FPGAチップが売れればよいビジネスだから、しれっとAWSに載る可能性もなくはないが、まずなさそう。 競合第二位かつAlteraと仲のよさそうなMicrosoftかなぁ。 やっぱりクラウドコンピューティングサービスってオンプレミス環境を構築する力がない大多数の企業に使ってもらえるかどうかみたいなもんだと思うから、どっかでXeon+FPGAをつかえるようにするんだろうな。 Xeon+FPGA自体、オンプレのデータセンタ作る企業かクラウドサービスのためのデータセンタ作る企業くらいしか売る先ないんだし。


以下技術系

ハードウェア構成

ホストとなるインスタンスのスペック。こいつだけで大体のことできる気がするんだが。

  • Intel Broadwell E5 2686 v4(ベース 2.3 GHz)
  • 最大976 GiBのDRAM
  • 最大4TBのNVMe SSD

FPGAは最大8個まで。実際1個か8個のどちらからしい。

  • CPUとはPCIe x16で接続され、Write/Readそれぞれ12Gbps、計24Gbpsの帯域を持つ → 8FPGAの場合もかわらないっぽい
  • FPGA間は約400Gbpsの帯域を持つ双方向通信可能なリング状のHSSI(High Speed Serial Interface)が構築可能(8FPGAの時。プロトコルは自作しろ系)
  • FPGAとメモリ空間は共有しているらしいが? → 場合によると思う。キャッシュコヒーレンシとかどうなん
  • サーバーインスタンスはどちらも1つに見える
  • FPGAのローカルメモリとしてECC付DDR4 16GiB x 4ch

Virtexは7までしか知らないけど、すさまじいな。

約33GbpsのGTYトランシーバが120個とか、1つのFPGAに4chの16GiB DDR4とかやりたい放題じゃないか。

片方向リングで実装するとしてこういう感じかな?想像以上に長大なパイプラインが構築できそう。 耐障害性を考えると逆方向リングも必要だろうけど。1リングあたり約200Gbpsって。

f:id:tkysktmt:20161203040157j:plain

開発環境

https://github.com/aws/aws-fpgaが404になってしまっているし、なかったことにされているので具体的にはよくわからないが、 各FPGA

  • PCIe(ホストCPUとのやり取り用)
  • GTX(FPGA間通信用トランシーバチャネル)
  • MIG(FPGAローカルのDRAMコントローラ)

といったF1インスタンスで必須なインターフェースがあらかじめ実装された設計データをベースに開発するようだ。

HDKによるデザインエントリに関連については、

  • FPGAのコンフィグ回数制限はないっぽい
  • ツール類は既存のVivado2016.3で、開発するインスタンスは無料
  • Vivadoが対応するRTL(SystemVerilog、 VerilogVHDL)で開発可能
  • Vivado HLS利用可能
  • OpenCL利用可能 → どうみてもSDAccelと思われる
  • Vivado Simulator以外のサードパーティーシミュレータも利用可能 → 利用リクエストをみるとCadence, Synopsys, Mentorあたりっぽい。高そう。
  • たぶんデバイスロックされたライセンス
  • JTAGがつながっていて、インスタンス上のVivadoからアクセス可能
  • サードパーティーの論理合成ツールは現状対応しないっぽい
  • 高級言語コンパイラが利用可能 → XSDKとかSDAccelで使うCとかのはなしかと
  • グラフィカルプログラミングツールでの開発が可能 → MatlabLabVIEWなどのモデルtoRTLのことかな? まさかIPインテグレータじゃないよな?
  • PCIeだけ常にアクティブで、残りのFPGAファブリックをパーシャルリコンフィギュレーションして使うっぽい?
  • AFIの売買可能 → bitファイルかSDSoCプラットフォームとして?形態がいまいちわからん
  • XilinxのIPライブラリは利用可能 → Xilinxのパートナーなどの有償IPはAWS Marketplaceで販売?
  • IPパッケージャでパッケージ化したIPを売りに出せるかは不明

という感じなようだ。無償でSDAccelが使えるのなら良いかも。

30回のコンフィグ制限とかいうのはなんかの間違いで、「CPU比較で30倍の性能改善」とかの聞き間違いかなと。どこにも見当たらなかったし。 Developer Preview – EC2 Instances (F1) with Programmable Hardware | AWS News Blog これを見る限りふつーにLinuxサーバー上で開発する感じ。Windows上でしこしこ開発してるタイプでなければすぐになじめる雰囲気。なので残念ながら開発の苦痛は変わらない。

F1インスタンスとは別の、メモリ最適化インスタンス(R3 ?)かコンピューティング最適化インスタンス(C3 ?)のどちらかの上でVivadoを代表としたXilinxのツールをを走らせて開発する「FPGA Develoepr AMI」なるものが用意されるとかなんとか。まあなんか適当なインスタンスFPGA Developer AMIをデプロイするとVivadoがつかえるようだ。 インスタンスを起動するとVivadoのライセンスマネージャが起動して, vivado &って打ち込んでXWindowsでつかったりCUIで使う感じかと。

ページを見る限りFPGA Develoepr AMIとHDKは無償だそうだが、ここは無償でないと困るし、せめて格安でないとまずい。 有償だとして、bitファイルなど必要なデータをアップロードして使えるだろうから、AFIを作るのがめんどくさくなければFPGA開発環境をもつ企業なら問題はないだろう。 クラウドコンピューティングサービスを使う層って、業界的にも資本的にも開発環境を持てない・持たない企業が多いと思うので、開発段階で金がとられまくると厳しい気がする。

今回使われているFPGAはVirtexというハイエンドクラスの真ん中くらいのデバイスだがかなり大規模。するとそれを使いこなすための実装作業には時間がかかる。 それともHLSで生成された残念な回路を力業で動かすスタイルなんだろうか。よく考えたらハイエンドFPGAの無駄遣いをして力業でやるスタイルのほうがクラウドコンピューティングサービスでは合理的な気がしてきたf:id:tkysktmt:20161203004145p:plain

AFI(Amazon FPGA Image)とかいう謎の存在

FPGAのbitファイルはAFIとかいうAWS向けのImageになるらしい。 おそらくインスタンス上で実行したいFPGAアクセラレータを起動(コンフィグ)したりするためのものだと思う。 アクセラレートしたい内容ごとにFPGAのコンフィグデータが用意されていて、アプリケーションプログラムではアクセラレータの初期化をコールするだけみたいな、FPGAコンフィグデータの書き込みを意識しなくてよくなるようなものでは。名前的にHALのような抽象化するようなものではなさそうだが、そのへんなんかやってくれると嬉しい。