Alveo / Versal サーバの利用方法

Alveo サーバ概要

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

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

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

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

ホスト名Alveo カードXRTプラットフォーム
ag001U2002020.1 (2.6.655)xilinx_u200_xdma_201830_2
as001U2002021.2 (2.12.427)xilinx_u200_xdma_201830_2
as002U2502021.2 (2.12.427)xilinx_u250_xdma_201830_2
as003U280-ES12021.2 (2.12.427)xilinx_u280-es1_xdma_201910_1
as004U502021.2 (2.12.427)xilinx_u50_gen3x16_xdma_201920_3
as005VCK50002022.1 (2.13.478)xilinx_vck5000_gen4x8_xdma_2_202210_1

異なるバージョンのプラットフォーム向けに作成されたデザインは動かすことができませんのでご注意ください。また、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と共有
as105Core i7 11700K860GBUbuntu 18.04as005と共有

表に記載の通り、それぞれのツール専用サーバは 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 チュートリアル

情報が古くなってしまったため Vitis チュートリアルの実行方法は現在書き換え中です。以下は不完全な手順となっています。

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

ACRi ブログの記事に Vitis チュートリアルについてのより詳しい説明がありますのでこちらもご参照ください。

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

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

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

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

ターミナルを開き、スクラッチ領域へ移動してください。

$ cd /scratch

Vitis チュートリアルをクローンします。ACRi ルームから GitHub を含むインターネットに直接アクセスすることはできないため、サーバ上にあらかじめクローンされたリポジトリを利用します。

$ git clone /tools/repo/Xilinx/Vitis-Tutorials
$ cd Vitis-Tutorials

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 の実行方法(VCK5000サーバ向け)

VCK5000 を搭載する as005 サーバでは Vitis AI 2.5 がインストール済みですので、すぐにお試しいただけます。

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

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

Vitis AI環境をセットアップ
$ source /opt/vitis_ai/setup.sh

DPUをプログラム
$ select-dpu DPUCVDX8H_8pe_normal

デモのあるディレクトリへ移動
$ cd /opt/vitis_ai/workspace/examples/Vitis-AI-Library/samples/multitask

デモアプリをビルド
$ ./build.sh

デモアプリを実行
$ ./test_jpeg_multitask multi_task sample_multitask.jpg

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

$ gnome-open 0_sample_multitask_result.jpg

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

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

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

他にも様々なデモが用意されています。そのうちのいくつかを以下の簡単なコマンドで選んで実行できるようにしていますのでぜひお試しください。

$ source /opt/vitis_ai/setup.sh
$ demo-vai
タイトルとURLをコピーしました