Alveo / Versal サーバの利用方法

Alveo サーバ概要

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

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

各ホストにインストールされているXRTとプラットフォームは次の表の通りです。2023年4月にU280-ES1向けを除くすべてのプラットフォームを更新しました。

ホスト名Alveo カードXRTプラットフォーム
as001U2002.14.354 (2022.2)xilinx_u200_gen3x16_xdma_base_2 (2022.2)
as002U2502.14.354 (2022.2)xilinx_u250_gen3x16_base_4 (2022.2)
as003U280-ES12.7.766 (2020.1.1)xilinx_u280-es1_xdma_201910_1
as004U502.14.354 (2022.2)xilinx_u50_gen3x16_xdma_base_5 (2022.2)
as005VCK50002.14.384 (2022.2)xilinx_vck5000_gen4x8_qdma_base_2 (2022.2)

異なるバージョンのプラットフォーム向けに作成されたデザインは動かすことができませんのでご注意ください。また、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 20.04as001と共有
as102Core i9-9900860GBUbuntu 20.04as002と共有
as103Core i9-9900860GBUbuntu 18.04as003と共有
as104Core i9-9900860GBUbuntu 20.04as004と共有
as105Core i7 11700K860GBUbuntu 20.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 チュートリアル

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

次のチュートリアルで解説されている Vitis を使った開発フローを ACRi ルームで実機を使って試してみます。xclbin のビルドに時間がかかるため、最後の結果を見るまでに2時間程度かかります。

AMD Adaptive Computing Documentation Portal

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

ターミナルを開き、スクラッチ領域へ移動してください。ツール専用サーバーで作業する場合のスクラッチ領域のパスは/scratch/$USERです。

$ cd /scratch

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

$ cp -a /tools/repo/Xilinx/Vitis-Tutorials .
$ cd Vitis-Tutorials/Getting_Started/Vitis/example/u200

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

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

make コマンドを使ってホストプログラム、xclbin ファイルを生成します。PLATFORM 引数にターゲットのカードのプラットフォーム名を渡してください。また、U50 がターゲットの場合は、../src/u200.cfg ファイルのグローバルメモリの指定を DDR から HBM に変更する必要があります。

■ as001(U200)の場合

$ make build TARGET=hw PLATFORM=xilinx_u200_gen3x16_xdma_2_202110_1 SRCDIR=../src

■ as002(U250)の場合

$ make build TARGET=hw PLATFORM=xilinx_u250_gen3x16_xdma_4_1_202210_1 SRCDIR=../src

■ as004(U50)の場合

$ sed -i 's/DDR/HBM/g' ../src/u200.cfg
$ make build TARGET=hw PLATFORM=xilinx_u50_gen3x16_xdma_5_202210_1 SRCDIR=../src

xclbin の生成には2時間ほどかかります。成功すると./hw/vadd.xclbin が生成されます。hw ディレクトリに移動してホストプログラムを実行します。TEST PASSED と出力されれば成功です。

$ cd hw
$ ./app.exe
argc = 1
argv[0] = ./app.exe
Open the device0
Load the xclbin ./vadd.xclbin
Allocate Buffer in Global Memory
synchronize input buffer data to device global memory
Execution of the kernel
Get the output data from the device
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サーバ向け)

プラットーフォーム更新に伴い、一時的にVitis AIは利用できなくなっています。対応をお待ち下さい(2023/4/5)

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をコピーしました