AWS F1 で始めるサーバーサイド FPGA (3)

server-fpga

はじめに

この連載では、Amazon EC2 F1 インスタンスの FPGA を使ってアクセラレーションを体験してみます。今回は F1 インスタンスを立ち上げて、FPGA 開発環境である Vitis を起動するまでをチュートリアル形式で紹介します。

Amazon EC2 F1 インスタンス

F1 インスタンスでは、ザイリンクス製 FPGA の中でも大規模な Virtex UltraScale+ VU9P が利用できます。使用する FPGA の個数は 1 個、2 個、8 個 (!) から選択できて、FPGA の個数に比例して CPU コアの数やメモリ容量などが増加します。F1 インスタンスのスペックを以下に抜粋します (料金はオレゴンリージョンで利用した場合)。

名前FPGAvCPUメモリオンデマンド料金
f1.2xlarge18122 GiB1.65 USD / h
f1.4xlarge216244 GiB3.30 USD / h
f1.16xlarge864976 GiB13.20 USD / h

メモリ容量が非常に大きいように感じますが、これは FPGA カードに搭載されている 64GB のメモリをフルに使用しようとした場合、最悪のケースでホスト側にも同等のメモリ容量が必要になるためだと想像します。また FPGA に十分なレートでデータを供給して FPGA を効率的に稼働させるためには、CPU で実行するアプリケーションも高速に動作する必要があるため、vCPU もそれに応じた高いスペックになっています。

残念なことに F1 インスタンスは日本国内のリージョンでは提供されていません。現在、一般向けに F1 インスタンスが提供されているのは次の 4 つのリージョンです。

  • 米国東部 (バージニア北部)
  • 米国西部 (オレゴン)
  • 欧州 (アイルランド)
  • アジアパシフィック (シドニー)

この他にもロンドン、フランクフルト、北京で F1 インスタンスのプライベートプレビューが始まっていて、利用できるリージョンは徐々に広がりつつあります。日本にもぜひ来て欲しいですね。

FPGA Developer AMI で F1 インスタンスを立ち上げてみよう

早速 F1 インスタンスを立ち上げてみましょう。次の流れで進めていきます。

  1. F1 インスタンスを起動
  2. F1 インスタンスにログイン
  3. IAM ロールを設定
  4. GUI 環境をセットアップ
  5. Vitis をセットアップ

この手順に沿って試してみる場合には、事前に AWS アカウントを作成しておいてください。AWS アカウントの作り方は、こちらのページで分かりやすく説明されています。

AWS アカウント作成の流れ【AWS 公式】
日本のお客様にAWSアカウント作成の手順をステップバイステップでご紹介します。アカウントを作成すると、Amazon EC2やAmazon S3をはじめとした 100以上のAWS製品を無料でお試しいただけます。また、AWSの世界中のリージョンで提供されるすべてのサービスを始めることができます。

今回は F1 インスタンスが利用できるリージョンの中から、通信レイテンシが比較的低そうなオレゴンを選択してみます。AWS マネジメントコンソールにサインインして、右上のリージョンの選択肢からオレゴンを選択します。

ここからは F1 インスタンスの利用時間に応じた料金と、EBS のサイズと利用時間に応じた料金が発生します。注意してください。仮に 120GB の EBS ボリュームを作成して F1 インスタンスを 1 ヶ月あたり 10 時間利用すると、 1 ヶ月の料金はおおよそ、次のようになります (為替レートは 107 円 / USD で計算)。

サービス単価数量料金
Amazon EC2 (f1.2xlarge)1.65 USD / hour10 hour16.5 USD (約 1,765 円)
Amazon EBS (汎用 SSD)0.10 USD / GB / month120 GB・month12.0 USD (約 1,284 円)
28.5 USD (約 3,049 円)

ハイスペックな F1 インスタンスでは料金もそれに応じた価格設定になっています。本格的に F1 インスタンスをターゲットに開発をするのであれば、F1 インスタンスを稼働させるのは FPGA を動かすときだけにして、それ以外は手元のマシンで作業するのが経済的かもしれません。

F1 インスタンスを起動する

コンソールのサービスメニューから EC2 を選択します。

左のメニューから「インスタンス」を選択し、「インスタンスの作成」をクリックします。

そうすると AMI を選択する画面になります。左のカテゴリから「AWS Marketplace」を選択し、FPGA Developer AMI を検索して「選択」をクリックします。

ここで AMI の料金に関する情報が表示されますが、FPGA Developer AMI を利用するために料金はかかりません。「Continue」をクリックしてください。次にインスタンスタイプを選択する画面になります。一覧の中から「f1.2xlarge」を選択し、「次のステップ:~」をクリックします。

「インスタンスの詳細の設定」はで特に変更すべきところはありません。「次のステップ:~」をクリックします。

次はストレージの設定です。デフォルトで、ルートのボリュームサイズが 100GB となっています。このままでは GUI 環境をインストールすると空き容量が 6.8GB 程度になってしまい、Vitis で作業することを考えると心もとないため少し大きくすることをおすすめします。ここでは 120GB としましょう。また、2 つ目のボリュームは無くても良さそうなので削除しておきます。設定を変更したら「次のステップ:~」をクリックします。

「タグの追加」では、後で分かりやすいように、Name タグを追加してインスタンスに名前を付けておきます。「次のステップ:~」をクリックします。

次にセキュリティグループを作成します。セキュリティグループは一言で言うとファイアウォールの設定です。サーバーが攻撃されるリスクを減らすため、外部からは必要なポートのみアクセスできるように設定します。ここでは、次の図の通り設定してください。SSH の 22 番ポートはサーバーへのログインに使用します。カスタム TCP の 8443 番ポートは、サーバーの GUI への接続に使用します。名前も分かりやすいように変えておきます。「確認と作成」をクリックします。

注意事項と設定内容を確認し、「起動」をクリックします。

キーペアを作成します。キーペアは公開鍵認証で SSH 接続するためのものです。インターネットのどこからでもアクセスできるサーバーなので、SSH にはパスワード認証よりも安全な公開鍵認証を使います。「新しいキーペアの作成」を選択し、名前を設定して「キーペアのダウンロード」をクリックすると秘密鍵がダウンロードされます。「インスタンスの作成」をクリックします。

無事にインスタンスが起動すると、インスタンス一覧には次のように表示されます。

F1 インスタンスにログインする

それでは起動したインスタンスにログインしてみましょう。ここでは Linux の ssh コマンドを使います。Windows の場合は TeraTerm や PuTTY などの好きなターミナルを使いましょう。「aws teraterm」などと検索すると、詳しい解説が見つかります。

インスタンスのパブリック IP アドレスを調べて次のようにして接続します。「f1-test1-key.pem」は先ほどダウンロードした秘密鍵です。ユーザー名は「centos」です。

$ ssh -i f1-test1-key.pem centos@[IPアドレス]

もし秘密鍵のパーミッションに関するエラーが表示されたら、次のようにパーミッションを変更して再度試してみてください。

$ chmod 600 f1-test1-key.pem

無事にログインできると、ターミナルにこのように出力されます。

___ ___  ___   _     ___  _____   __    _   __  __ ___
| __| _ \/ __| /_\   |   \| __\ \ / /   /_\ |  \/  |_ _|
| _||  _/ (_ |/ _ \  | |) | _| \ V /   / _ \| |\/| || |
|_| |_|  \___/_/ \_\ |___/|___| \_/   /_/ \_\_|  |_|___|
AMI Version:        1.8.1
Xilinx Version:     2019.2
Readme:             /home/centos/src/README.md
AMI Release Notes:  /home/centos/src/RELEASE_NOTES.md
GUI/Cluster setup:  https://github.com/aws/aws-fpga/blob/master/developer_resources
Developer Support:  https://github.com/aws/aws-fpga/blob/master/README.md#developer-support
Centos Common code: /srv/git/centos-git-common
Xilinx XRT source:  https://github.com/Xilinx/XRT

OS は CentOS 7.8 ですね。

$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.8.2003 (Core)
Release:        7.8.2003
Codename:       Core

まずはパッケージを更新しておきましょう。sudo を使っていますがパスワードは要求されません。

$ sudo yum update -y

IAM ロールを設定する

パッケージを更新している間に別の作業をします。

自分で作った FPGA のデザインを F1 インスタンスで動かすためには、インスタンスのコマンドラインから S3 にアクセスできるように設定する必要があります (S3 はオブジェクトストレージサービスです。ファイルを置いてインターネットに公開したり、AWS の他のサービスとファイルをやりとりする際に使われます)。また、後ほど出てくる NICE DCV を利用するためにも S3 へのアクセスが必要です。インスタンスから S3 にアクセスできるように IAM ロールを設定しましょう。

インスタンスを右クリックして、「インスタンスの設定」、「IAM ロールの割り当て/置換」を選択します。

「新しい IAM ロールを作成する」を選択します。

「ロールの作成」をクリックします。

「EC2」を選択し、「次のステップ:~」をクリックします。

「AdministratorAccess」を選択し、「次のステップ:~」 をクリックします。

タグの設定は不要です。「次のステップ:~」 をクリックします。

ロールに名前を付けて、「ロールの作成」をクリックします。

これで IAM ロールが作成されました。EC2 インスタンスの IAM ロールの割り当ての画面に戻って更新ボタンをクリックし、作成した IAM ロールを選択します。「適用」をクリックします。

これで IAM ロールの設定は完了です。

GUI 環境をセットアップする

Vitis では GUI が無くてもコマンドラインでデザインをビルドしたり実行したりできるのですが、波形を見てデバッグしたり、取得したプロファイルを解析したりするときには GUI が必要になります。FPGA Developer AMI には GUI 環境が用意されていないためインストールしましょう。

まずは GUI 環境をインストールします。

$ sudo yum groupinstall -y "GNOME Desktop"

リモートサーバーのデスクトップを手元に表示する方法はいくつかありますが、Amazon EC2 では NICE DCV という高性能なリモートデスクトップが無償で利用できます。NICE DCV を使うとブラウザでリモートデスクトップにアクセスできてお手軽なので活用しましょう。インストールの手順は次の通りです。

$ sudo rpm --import https://d1uj6qtbmh3dt5.cloudfront.net/NICE-GPG-KEY
$ wget https://d1uj6qtbmh3dt5.cloudfront.net/2020.0/Servers/nice-dcv-2020.0-8428-el7.tgz
$ tar -xvzf nice-dcv-2020.0-8428-el7.tgz
$ sudo yum install -y nice-dcv-2020.0-8428-el7/nice-dcv-server-2020.0.8428-1.el7.x86_64.rpm
$ sudo yum install -y nice-dcv-2020.0-8428-el7/nice-xdcv-2020.0.296-1.el7.x86_64.rpm

$ sudo systemctl start dcvserver
$ sudo systemctl enable dcvserver

リモートデスクトップにパスワードでログインできるようにパスワードを設定します (推測されにくいように、できるだけ長くて複雑なパスワードを設定してください)。

$ sudo passwd centos

セッションを作成します。これはインスタンスを起動するたびに実行する必要があります。

$ dcv create-session my-session

画面 (リモートデスクトップ) に接続してみましょう。ブラウザからインスタンスの IP アドレスに 8443 番ポートで接続します。

https://[IPアドレス]:8443

ログイン画面が出たら、ユーザー名は「centos」、パスワードとして先ほど設定したものを入力します。

Linux のデスクトップ画面が表示されたら成功です。

Vitis をセットアップする

FPGA Developer AMI には Vitis と XRT (FPGA ランタイム) があらかじめインストールされているのですが、F1 インスタンス用の管理ツールやプラットフォームを別にインストールする必要があるようです。

ここからは GUI で操作していきましょう。デスクトップの空いているところを右クリックして「Open Terminal」を選択することでターミナルを開きます。

aws-fpga リポジトリをクローンします。ターミナルで次のコマンドを実行します。

$ git clone https://github.com/aws/aws-fpga.git

環境をセットアップして Vitis の GUI を起動してみましょう。初回は画面が出てくるまでに少し時間がかかるようです。

$ source aws-fpga/vitis_setup.sh
$ export PLATFORM_REPO_PATHS=$(dirname $(dirname $AWS_PLATFORM))
$ vitis

Vitis の GUI は Eclipse をベースとしています。GUI を起動すると最初にワークスペースの選択画面が表示されます。ワークスペースを作成するディレクトリを設定し、「Launch」をクリックします。

これで Vitis を起動することができました。サンプルプロジェクトを作るところまでやってみましょう。「Create Application Project」をクリックします。

プロジェクト名を設定して次へ。

F1 プラットフォームを選択して次へ。

テンプレートから「Vector Addition」を選択して終了。

これでベクトルの足し算を行うサンプルプロジェクトが作成されました。ここからカーネルとホストのエミュレーション、FPGA 実行のためのビルドなどができます。長くなってしまったので今回はここまでにします。作業の後はインスタンスの停止を忘れないようお気を付けください。

まとめ

今回は F1 インスタンスを起動して Vitis のサンプルプロジェクトを作成するところまでをステップ・バイ・ステップで紹介しました。この手順を試された方はぜひ FPGA 質問箱に感想などを書き込んでください。

次回は F1 インスタンスで FPGA を動かしてみる予定です。

ザイリンクス株式会社 安藤潤

タイトルとURLをコピーしました