Alveo サーバの利用方法

Alveo サーバ概要

Alveo サーバでは Vitis を使った FPGA アクセラレータの開発と、Alveo カードの利用ができます。サーバごとに Alveo カードをひとつ搭載し、サーバを予約した時間枠内で CPU、メモリ、Alveo カードを占有して使用することができます。各サーバのスペックを次の表に示します。

ホスト名CPUスレッドメモリOSAlveo カード
ag001Core i9-9940x26120GBUbuntu 18.04U200 x1
as001Core i9-9900860GBUbuntu 18.04U200 x1
as002Core i9-9900860GBUbuntu 18.04U250 x1
as003Core i9-9900860GBUbuntu 18.04U280-ES1 x1
as004Core i9-9900860GBUbuntu 18.04U50 x1

高性能な CPU を搭載する ag001 はジーデップ・アドバンスの FPGA StarterBOX スタンダードモデルを利用したサーバです。CPU 水冷ユニットと大容量電源を備え安定して稼働します。Vitis での FPGA イメージのビルドも速いので予約した時間枠を有効活用できます。

各ホストにインストールされているXRTとプラットフォームは次の表の通りです。

ホスト名Alveo カードXRTプラットフォーム
ag001U2002020.1 (2.6.655)xilinx_u200_xdma_201830_2
as001U2002020.1 (2.6.655)xilinx_u200_xdma_201830_2
as002U2502020.1 (2.6.655)xilinx_u250_xdma_201830_2
as003U280-ES12020.1 (2.6.655)xilinx_u280-es1_xdma_201910_1
as004U502020.1 (2.6.655)xilinx_u50_gen3x16_xdma_201920_3

異なるバージョンのプラットフォーム向けに作成されたデザインは動かすことができませんのでご注意ください。また、Vivado フローで作成したカスタムデザインを Alveo の FPGA にプログラムすることはできません。これらは ACRi ルームを安全に運用するために必要な制限となっております。

次に挙げるような、FPGA アクセラレータの開発と評価に必要なことは一通りできるようにしています。

  • Vitis による FPGA デザインの作成
  • OpenCLまたはxbutil program を介した FPGA のプログラム
  • ホストアプリケーションのビルドと実行
  • xbutil reset による FPGA のリセット

ツール専用サーバ

Alveoが利用できるサーバの他に、いつでも予約無しでVitisを利用できるツール専用サーバを用意しています。時間のかかるVitisのビルドは利用時間に制限のないツール専用サーバが便利です。ただしCPU、メモリは利用者間で共有となりますので、空いているサーバを利用いただき、作業後はログアウトするようお願いします。また定期的なリソース解放のため、毎週月曜午前3:00にツール専用サーバは再起動します。作業中のデータは消えてしまう可能性がありますのでご注意ください。

ホスト名CPUスレッドメモリOSスクラッチ領域
as101Core i9-9900860GBUbuntu 18.04as001と共有
as102Core i9-9900860GBUbuntu 18.04as002と共有
as103Core i9-9900860GBUbuntu 18.04as003と共有
as104Core i9-9900860GBUbuntu 18.04as004と共有

表に記載の通り、それぞれのツール専用サーバはAlveoサーバとスクラッチ領域を共有しています。ツール専用サーバではユーザーのスクラッチ領域のパスは/scratch/ユーザー名となります。

U280-ES1向けのビルドはas103でのみ実行できます。

Alveo のリセット方法

回路にバグがあったり、アプリケーションを強制停止したりしたときに Alveo が正常に動作しなくなってしまうことがあります。そのようなときは次のようにして Alveo のユーザー領域をリセットしてみてください。

$ source /opt/xilinx/xrt/setup.sh
$ xbutil reset

もしドライバレベルで異常な状態になってしまったときは、予約した時間枠が終了するまで復帰させることはできません。

U280-ES1 の制限事項

as003 サーバに搭載されている U280 は製品版ではなく、エンジニアリングサンプル版です。製品版との最も大きな違いは、HBM の帯域が 410GB/s に制限されている点です(製品版の HBM 帯域は460GB/s)。その他の注意事項につきましては AR# 71975 をご参照ください。

Vitis チュートリアル

ACRi ルームのアカウントをまだお持ちでない場合は、アカウントを申請してください。サーバの予約方法とログイン方法はこちらの手順をご参照ください。ここからはリモートデスクトップでサーバにログインできる前提で説明を進めます。

ACRi ブログの記事により詳しい説明がありますのでこちらもご参照ください。

広がり続ける FPGA の応用と人工知能への活用 (3)
前回は FPGA を活用することで低遅延、高スループット、低消費電力を実現できるしくみについて解説しました。そしてそのメリットをより多くの方に享受いただくための開発環境として Vitis が誕生したことをお話ししました。今回はその開発環境に

Vitis チュートリアルにある「はじめてのプログラム」のリファレンスコード(ベクトルの足し算)を例に、Alveo サーバの使い方を説明します。xclbin のビルドに時間がかかるため、最後の結果を見るまでに1時間半から2時間程度かかります。

Vitis-Tutorials/README.md at 959629b9270a2aab3a488981d2457d0ed2c3fcad · Xilinx/Vitis-Tutorials
Contribute to Xilinx/Vitis-Tutorials development by creating an account on GitHub.

まずは Vitis チュートリアルを GitHub からお手元のパソコンにダウンロードし、Alveo サーバに送信します(ACRi ルームから GitHub に直接アクセスすることはできません)。Windows の場合は上記のリンクから Vitis チュートリアルを zip ファイルでダウンロードして、WinSCP 等で転送してください。

Linux の場合は次のコマンドでダウンロードと転送ができます。

$ wget -O Vitis-Tutorials.zip https://github.com/Xilinx/Vitis-Tutorials/archive/959629b9270a2aab3a488981d2457d0ed2c3fcad.zip
$ scp Vitis-Tutorials.zip ユーザー名@gw.acri.c.titech.ac.jp:

ここからは Alveo サーバ上での作業となります。Alveo サーバではユーザーのホームディレクトリはリモートに存在しネットワークを介してマウントされているため、ホームディレクトリへのアクセスは高速ではありません。その代わり、高速なローカルディスク上にご自由に使っていただけるスクラッチ領域(/scratch)を用意していますので、そちらで作業することを強くおすすめします。なお、各サーバのスクラッチ領域は不定期に削除されますので、作成したソースコードや xclbin などの生成物はホームディレクトリやお手元のパソコンに保存いただくようお願いします。

Alveo サーバにログインして zip ファイルをスクラッチ領域に展開し、リファレンスコードのあるディレクトリへ移動します。

$ cd /scratch
$ unzip ~/Vitis-Tutorials.zip
$ cd /scratch/Vitis-Tutorials-959629b9270a2aab3a488981d2457d0ed2c3fcad/docs-jp/docs/my-first-program/reference-files

Vitis と XRT をセットアップします。

$ source /tools/Xilinx/Vitis/2019.2/settings64.sh
$ source /opt/xilinx/xrt/setup.sh

Vitis 2020.1 を使う場合は次のようにしてください。このリファレンスコードはどちらでもビルドできます。

$ source /tools/Xilinx/Vitis/2020.1/settings64.sh
$ source /opt/xilinx/xrt/setup.sh

make コマンドで xclbin を生成します。DEVICE 引数にターゲットのプラットフォーム名を渡してください。U200 を搭載した as001 以外で実行する場合は、design.cfg ファイルに設定されている platform の値をターゲットのプラットフォーム名に変更する必要がありますので注意してください。

■ as001, ag001(U200 を利用)の場合

$ make all TARGET=hw DEVICE=xilinx_u200_xdma_201830_2

■ as002(U250を利用)の場合

$ sed -i -e 's/xilinx_u200_xdma_201830_2/xilinx_u250_xdma_201830_2/g' design.cfg
$ make all TARGET=hw DEVICE=xilinx_u250_xdma_201830_2

■ as003(U280-ES1を利用)の場合

$ sed -i -e 's/xilinx_u200_xdma_201830_2/xilinx_u280-es1_xdma_201910_1/g' design.cfg
$ make all TARGET=hw DEVICE=xilinx_u280-es1_xdma_201910_1

■ as004(U50を利用)の場合

$ sed -i -e 's/xilinx_u200_xdma_201830_2/xilinx_u50_gen3x16_xdma_201920_3/g' design.cfg
$ make all TARGET=hw DEVICE=xilinx_u50_gen3x16_xdma_201920_3

xclbin の生成には1時間ほどかかります。もしお手元に Vitis を実行できる環境がある場合は、xclbin の生成はお手元で行い Alveo サーバを利用するのは Alveo を利用するときのみとすると、3時間の予約枠を有効に利用できます(Vitis はどなたでも無償で入手してインストールしていただけます)。

成功すると、./xclbin/vadd.hw.xclbin が生成されます。ホストプログラムに xclbin ファイルを渡して実行します。TEST PASSED と出力されれば成功です。この裏では、FPGA でベクトルの加算が行われ、ホストで答え合わせが行われています。

$ ./host xclbin/vadd.hw.xclbin
Found Platform
Platform Name: Xilinx
INFO: Reading xclbin/vadd.hw.xclbin
Loading: 'xclbin/vadd.hw.xclbin'
TEST PASSED

利用方法の説明はここまでとなります。Vitis での開発経験がない方はぜひ Vitis チュートリアルの続きを進めてみてください。

Alveo カード選択ガイド

Alveo が搭載する FPGA はどれも大規模なものです。それぞれ次のような特徴があります。どの Alveo を選んで良いかわからないときにご参考にしてください。

Alveo規模
(LUT数)
メモリ特徴
U2001,182KDDR4 64GB標準的で使いやすいモデル。
初心者におすすめです。
U2501,728KDDR4 64GBハイパフォーマンスを極めたい
中上級者向け。
U280-ES11,304KDDR4 32GB, HBM2 8GB高帯域メモリを活用したい
上級者向け。
U50872KHBM2 8GB高コスパモデル。
Vitis AIを試したい方はこちら。

スペックの詳細な比較は公式の製品ガイドをご参照ください。

Vitis AI の実行方法(U50サーバ向け)

U50 を搭載するサーバには Vitis AI 1.1 をインストールしてありますので、すぐにお試しいただけます(Vitis AIの最新バージョンは1.2ですが、1.2では開発プラットフォームが非公開のGen3x4プラットフォームのみをサポートしているためACRiルームでは標準プラットフォームをサポートする1.1をお試しいただけます)。

Xilinx/Vitis-AI
Vitis AI is Xilinx’s development stack for AI inference on Xilinx hardware platforms, including both edge devices and Alveo cards. - Xilinx/Vitis-AI

マルチタスクのデモを動かしてみましょう。Vitis AI環境をセットアップして、デモをビルドし、静止画に対して実行してみます。

$ source /opt/vitis_ai/setup.sh
$ cd /opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask
$ ./build.sh
$ ./test_jpeg_multitask multi_task sample_multitask.jpg

実行結果を確認してみましょう。

$ gnome-open sample_multitask_result.jpg

セグメンテーション(車、道路、街路樹、空など)と物体検出(車)を同時に推論するデモのようですね。続けて、動画で実行してみましょう。動画の場合はオプションで -t 8 を渡して8スレッドで実行すると、複数の DPU をフルに活かして高いFPSを得られます。

$ ./test_video_multitask multi_task ../../demo/segs_and_roadline_detect/lane_640_480.avi -t 8

動画に対してもリアルタイムに近い性能でセグメンテーションと物体検出が実行できることが分かりました。ウィンドウを閉じるには ESC キーを押します。

こちらの ACRi ブログの記事では Vitis AI のツール群を使って Keras の DenseNet モデルを U50 で動かすチュートリアルが詳しく説明されています。ぜひご覧になってみてください。

広がり続ける FPGA の応用と人工知能への活用 (4)
前回は Vitis 開発環境が従来の課題をどのように解決するかについて解説しました。さらに ACRi ルーム (FPGA 利用環境) を使って実際にツールとハードウェアを動かしてみました。今回は高いスループット、超低遅延と低消費電力を同時に
タイトルとURLをコピーしました