naoya_t@hatenablog

いわゆるチラシノウラであります

Amazon EC2 F1インスタンス入門ワークショップ

f:id:n4_t:20180322220737p:plain
Amazon EC2 F1インスタンス入門ワークショップ(ハンズオントレーニング)に参加してきました。
connpass.com


F1というのはXilinx社のVirtex UltraScale+ VU9P FPGAを搭載したインスタンスで、現在

  • f1.2xlarge(1個のFPGA
  • f1.16xlarge(8個のFPGA

の2種類があります。2018年3月現在、F1インスタンスが使えるのは

の4リージョンに限られています*2

お値段は f1.2xlarge が$1.65/hour、f1.16xlargeが$13.2/hour です(バージニア北部リージョンの場合)。

ワークショップは大崎のザイリンクス株式会社さんのセミナールームにて、休憩を含めて3時間半のハンズオン形式で行われました。
FPGA開発経験はあるがAWSは初めての人、あるいはAWS利用経験はあるがFPGAは初めての人、のどちらにも対応した親切なハンズオンでした。

事前準備

事前に参加者個人のroot権限で利用できるAWS*3アカウントを用意しておくことが求められます。
F1インスタンスは初期状態では利用制限がかかっているので制限緩和リクエストを送る必要があります。*4

1時間目:F1起動前準備&EC2インスタンスの起動

  • Security Groupの作成。今回SSH(22)とRDP(3389)のインバウンドトラフィックを許可する。RDPはRemote DesktopでSDAccel(GUI開発環境)をいじるのに必要。
  • Key Pairの作成。
  • バージニアでF1インスタンス (f1.2xlarge) を1つ作成。AWS Marketplaceから「FPGA Developer AMI」*5を選択。
  • 立てたインスタンスSSHでログイン。
  • FPGA Developer AMIの初期設定(HDK&SDKのダウンロード、GUI Desktop等のインストール、Remote Desktop用パスワードの発行)。
  • Remote DesktopでF1インスタンスにログイン。
  • SDAccel環境の初期設定(用意済みのスクリプトを実行するだけ)
  • 用意済みのHello World的ホストアプリケーション(FPGAにベクトルの加算をさせて結果を表示するもの)をビルドして実行。(時間の都合もあってかビルドしているコードの内容には一切触れませんでした)

F1インスタンスに積まれているFPGAXilinx社のVirtex UltraScale+ VU9P
https://japan.xilinx.com/support/documentation/data_sheets/j_ds890-ultrascale-overview.pdf
で、

  • 200万のロジックブロック*6
  • 5000 DSP Block*7
  • DDR-4, PCIe, ringなどに対応
  • 60Mbの内蔵ブロックメモリと230MbのUltraRAM

FPGAに繋がっている以外は普通の(Intelアーキテクチャの)インスタンスと同様。(Intel Xeon E5-2686v4, 2.3GHz, Turbo mode対応)

2時間目:FPGAアクセラレーション体験

  • ffmpegでの動画エンコード処理をCPU(libx265コーデック)とFPGA(HEVCエンコーダ)で試してFPGAの速さ(5倍強)を体感する。
  • 速度向上だけでなく圧縮率も上がっていることを確認。(性能を犠牲にせず高速化できているアピール)

3時間目:SDAccelによるF1アプリケーション開発

  • (Remote Desktopで)SDAccel開発環境のGUIを起動
  • エミュレーションフロー(Emulation-CPU / Emulation-HW)の実行
  • F1で実行するためのFPGAバイナリ構築は結構時間がかかるのでここでは説明だけ。SDAccelでザイリンクスFPGAバイナリ(.xclbinファイル)をビルドし、AWS create_sdaccel_afi.sh スクリプトAWS FPGAバイナリ(.awsxclbinファイル)を作成し、安全かつ暗号化されたAmazon FPGA Image(AFI)を登録する。AFIもAMI同様、AWS Marketplaceでシェア(ないし売買)することができる。   
  • F1インスタンス上で実行。(今回はコンパイル済みFPGAバイナリを使用)

f:id:n4_t:20180322220656p:plain
少し早く終わって時間が余っていたので、インスタンスタイプの変更(インスタンス停止→インスタンスタイプ変更→インスタンス起動)を試してみた。(実際のFPGAバイスが必要なフェーズだけF1を使って、それ以外ではより安価なC4,M4,R4などのインスタンスを使ってもよい。F1に搭載している規模のFPGAの開発ではメモリ32GBを推奨とのこと。それより少なくても動くが遅くなるしかえって非効率らしい。参考:f1.2xlarge: $1.65/h, c4.4xlarge : $0.796/h, m4.2xlarge: $0.4/h, r4.xlarge: $0.266/h))
F1以外のインスタンスで実行するとデバイスがないと言われるのを確認。
f:id:n4_t:20180322220717p:plain

4時間目:後片付けとまとめ

ここで後片付けというのは

  • インスタンス終了(Terminate)
  • キーペアの削除
  • セキュリティグループの削除

のこと。*8

最後にアンケートに答えて、AWSで使える$25のクーポン(今回のワークショップで使った分の補填+復習用)を頂きました。

雑感

F1インスタンスというものをとりあえず体験してみる、という意味では必要十分なワークショップだったと思います。
FPGA歴3ヶ月(正味1ヶ月ぐらい)でも十分ついていけました。*9

*1:米国政府機関の要請で用意されている、米国市民からしかアクセスできないことが保証されているネットワーク

*2:ニーズが高まってきたら日本でも用意するとのことです

*3:AWSってロゴは小文字f:id:n4_t:20180322224708j:plain:w30なので小文字で書くべきなのか悩みます…

*4:これは数時間〜数日かかるので事前に終えておかなければならなかったのですが忘れていて、主催者側で用意していたアカウントを使わせてもらいました。

*5:FPGAの開発環境(Xilinx VIVADO, Xilinx SDAccel)に対応したAMI。C, C++, OpenCLでの開発環境が提供されているそうです。追加料金はかかりません。ちなみにVIVADOはAmazonの人はヴィヴァドゥー、Xilinxの人はヴィヴァドーと発音していました。

*6:2586150ロジックセル、2364480 CLB-FF、1182240 CLB LUT

*7:6840 DSP slices

*8:インスタンスはstopすれば課金も止まるが、ストレージを削除するまではストレージの課金が続くので注意が必要。ハンズオンではインスタンスを立てる際、EBSボリュームの「合わせて削除」項目にチェックを入れさせていた。

*9:欲を言えば、GPUインスタンスとのパフォーマンス(速度、コスト、電力消費etc.)の比較が欲しいかなと思いました。(同じ条件で比較するのは難しいと思いますが)