Alveo サーバ概要
Alveo サーバでは Vitis を使った FPGA アクセラレータの開発と、Alveo カードの利用ができます。サーバごとに Alveo カードをひとつ搭載し、サーバを予約した時間枠内で CPU、メモリ、Alveo カードを占有して使用することができます。各サーバのスペックを次の表に示します。
ホスト名 | CPU | スレッド | メモリ | OS | Alveo カード |
---|---|---|---|---|---|
as001 | Core i9-9900 | 8 | 60GB | Ubuntu 20.04 | U200 |
as002 | Core i9-9900 | 8 | 60GB | Ubuntu 20.04 | U250 |
as003 | Core i9-9900 | 8 | 60GB | Ubuntu 18.04 | U280-ES1 |
as004 | Core i9-9900 | 8 | 60GB | Ubuntu 20.04 | U50 |
as005 | Core i7 11700K | 8 | 60GB | Ubuntu 20.04 | VCK5000 |
各ホストにインストールされているXRTとプラットフォームは次の表の通りです。2023年4月にU280-ES1向けを除くすべてのプラットフォームを更新しました。
ホスト名 | Alveo カード | XRT | プラットフォーム |
---|---|---|---|
as001 | U200 | 2.14.354 (2022.2) | xilinx_u200_gen3x16_xdma_base_2 (2022.2) |
as002 | U250 | 2.14.354 (2022.2) | xilinx_u250_gen3x16_base_4 (2022.2) |
as003 | U280-ES1 | 2.7.766 (2020.1.1) | xilinx_u280-es1_xdma_201910_1 |
as004 | U50 | 2.14.354 (2022.2) | xilinx_u50_gen3x16_xdma_base_5 (2022.2) |
as005 | VCK5000 | 2.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 | スクラッチ領域 |
---|---|---|---|---|---|
as101 | Core i9-9900 | 8 | 60GB | Ubuntu 20.04 | as001と共有 |
as102 | Core i9-9900 | 8 | 60GB | Ubuntu 20.04 | as002と共有 |
as103 | Core i9-9900 | 8 | 60GB | Ubuntu 18.04 | as003と共有 |
as104 | Core i9-9900 | 8 | 60GB | Ubuntu 20.04 | as004と共有 |
as105 | Core i7 11700K | 8 | 60GB | Ubuntu 20.04 | as005と共有 |
表に記載の通り、それぞれのツール専用サーバは 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向けの説明をご参照ください(Windows、macOS、Linux)。ここからはリモートデスクトップでサーバ(as001を推奨)にログインした前提で説明を進めます。
次のチュートリアルで解説されている Vitis を使った開発フローを ACRi ルームで実機を使って試してみます。xclbin のビルドに時間がかかるため、最後の結果を見るまでに2時間程度かかります。
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数) | メモリ | 特徴 |
---|---|---|---|
U200 | 1,182K | DDR4 64GB | 標準的で使いやすいモデル。 初心者におすすめです。 |
U250 | 1,728K | DDR4 64GB | ハイパフォーマンスを極めたい 中上級者向け。 |
U280-ES1 | 1,304K | DDR4 32GB, HBM2 8GB | 高帯域メモリを活用したい 上級者向け。 |
U50 | 872K | HBM2 8GB | 高コスパモデル。 |
スペックの詳細な比較は公式の製品ガイドをご参照ください。
Vitis AI の実行方法(VCK5000サーバ向け)
プラットーフォーム更新に伴い、一時的にVitis AIは利用できなくなっています。対応をお待ち下さい(2023/4/5)
VCK5000 を搭載する as005 サーバでは Vitis AI 2.5 がインストール済みですので、すぐにお試しいただけます。
マルチタスクのデモを動かしてみましょう。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
