skip to Main Content
Amazon EC2 F1インスタンス入門ワークショップに参加しました

Amazon EC2 F1インスタンス入門ワークショップに参加しました

Hacarusインターン生の前田です。
タイトルの通り、F1インスタンスの入門ワークショップに参加してきました。このレポートではワークショップで学んできたことをまとめます。

F1インスタンスって?

F1インスタンスとは、FPGA(Xilinx Virtex UltraScale+ VU9P)が搭載されたEC2のインスタンスです。
FPGAはField Programmable Gate Arrayの略で、ASICで実装出来る論理機能をユーザが現場でプログラムし、FPGA上にハードウェアとして実装することが出来ます。ロジックと配線を自由に変更することができて、用途に合わせて再構成して利用することが可能です。

F1インスタンスの具体的な構成は

  • Intel Xeon E5-2686v4(2.3GHz, Turbo mode対応)
  • 1-8個のFPGA(Xilinx Virtex UltraScale+ VU9P)
  • 最大約4TBのNVMe接続SSD

となっています。

F1インスタンスに提供される開発環境には

  • AWS FPGAデベロッパーフォーラム
  • FPGA Developer AMI(Vivado, SDAccel)(無償)
  • Hardware Developer Kit

があります。

近年、FPGAは消費電力が低い点、CPUのように予め定められた命令列に依存しないため並列処理に優れている点で評価されています。他にはクラウドで処理を行う際の前処理としてエッジで計算をするために使う用途もあります。
F1インスタンスでFPGAを使うことによって得られる一番の利点は、FPGAで実装されたハードウェアアクセラレータをクラウド上で使えることではないかと思います。これをうまく活用することでクラウド上での処理をより高速化することが可能となります。

F1インスタンスを使った処理の実行

今回のワークショップでは、FPGAで実装された機能をソフトウェアから呼び出して使う用途が想定されていました。

すでに存在するFPGAイメージを利用する際の大まかな流れは

  1. Amazon Machine Image(AMI)と呼ばれるOSイメージをF1インスタンス上に展開してOSを起動する。
  2. F1インスタンスのOSからAPIを呼んで、F1インスタンスに搭載されているFPGAにAmazon FPGA Image(AFI)をダウンロードする。
  3. F1インスタンスのOS上でアプリケーションを実行し、FPGA上で処理を実行する。

となります。
AFIはAWS Marketplace上で販売されています。もし自分が欲しい用途に合致したものが販売されていれば、それを利用することでFPGA特有の開発をすることなくFPGAで実装したハードウェアアクセラレータを活用することができるかもしれません。ただし、今はまだまだ公開されているものが少ないため欲しい機能がすぐに手に入るとは限りませんし、価格も決して安くはありません。その場合、やはり自分で設計、開発をすることになります。

FPGAを活用したハードウェアアクセラレータの設計及びAFIの作成

前節では作成済みのAFIイメージをF1インスタンス上に載せる方法を説明しました。では、自分が使いたい機能を持つAFIを作成するにはどうすればよいのでしょうか?

基本的にはXilinxのSDAccelや、AWS HDK(Hardware Development Kit)などを使った開発について説明します。

まず、C/C++やOpenCL, RTLで書いたコードからSDAccelコンパイラを使ってカーネル(.xo)を生成します。このカーネルから、SDAccelがFPGAデザインを組み立て、このFPGAデザインに対して論理合成と配置配線を行うことでバイナリ(.xclbin)が生成されます。
生成したバイナリからAmazon FPGA Image(AFI)を生成します。xclbinファイルは暗号化されたAFIに変換され、生成されたAFIはAWSのバックエンドサービスによってセキュアに保存されます。SDAccelの提供する機能によって記述したロジックをシミュレーションすることも可能です。下図は、AFIイメージとはどのようなものかを表しています。

実際にAFIの生成を行うには次の事前準備が必要です。

  •  シミュレーションによるコードの検証
  • SDAccelによるFPGAバイナリ(.xclbin)のビルド
  • AWS CLIとS3バケットのセットアップ

これが済んだら、AWSが提供するcreate_sdaccel_afi.shスクリプトを使用することでAFIイメージを作成することができます。create_sdaccel_afi.shスクリプトは以下の手続きを行います。

  • FPGAバイナリ(.xclbin)を暗号化したAFIを作成する。
  • 生成されたAFIのAmazon FPGA Image ID (AFI ID) と Amazon Global FPGA Image ID(AGFI ID) を含むファイルを生成する。
  • AWS FPGAバイナリファイル(.awsxclbin)を作成する。これを使ってFPGAにどのAFIをロードするかを決める。

Amazon Global FPGA Image ID(AGFI ID)とは、F1インスタンス内で一意に定まるIDです。このIDはグローバルで一意に定まるので、AFIやAMIをいくつかのリージョンでコピーして使用する際にリージョンごとにAGFI IDを変更する必要がありません。

Amazon FPGA Image ID(AFI ID)は、AWS CLIやSDI APIでAFIを管理するために使われるIDです。
IDはリージョンごとに異なります。

SDAccelは記述したロジックをシミュレーションする機能も提供しているため、自分の実装が正しいかどうかを適当な段階でチェックすることが出来ます。

終わりに

今回のワークショップでは、すでにあるAFIイメージを実際にF1インスタンス上で動作させるまでを体験しました。

F1インスタンスは、FPGAボードを買うための初期投資が不要である点や、AFIイメージを共有できることで、今後は典型的な用途に対するFPGAの実装が気軽に手に入るようになる可能性がある点が優れていると思います。また、大量のデータを並列演算を使って高速に処理したいが、GPU上で扱うには向いていないという時にこのインスタンスを使うことが考えられます。

2017年4月に登場したF1インスタンスですが、今後どのようにコミュニティが成長していくのか楽しみです。

参考リンク:

F1インスタンス AWS公式ページ: https://aws.amazon.com/jp/ec2/instance-types/f1/

Xilinx公式のF1インスタンスとSDAccel解説ページ(英語):  https://www.xilinx.com/xilinxtraining/assessments/portal/aws/intro-aws-f1-instance/story_html5.html