Kria™ SOM評価ボードを使ったユーザーデザイン実装の一例紹介(Ubuntu Base)

皆さん、こんにちは。
本ブログでは、AMD社のKria™ SOM評価ボードを使ったユーザーデザイン実装の一例紹介(Ubuntu Base)と題し、KV260/KR260(以下KV/KR260)上のCanonical Ubuntuから、ロジック部分をユーザーデザインに書き換える方法について紹介させていただきます。
目次
- 0. 本編に入る前に
- 0-1. AIアクセラレーションをするための設計ツール
- 0-2. DPU(Deep Learning Processor Unit)について
- 0-3. ツールフローの概要
- 1. はじめに
- 1-1. Canonical Ubuntuについて
- 1-2. Canonical Ubuntuを使用したユーザーデザイン書き換えについて
- 1-3. UbuntuとAMDツールのバージョンの相関
- 1-4. Canonical Ubuntuへのユーザーデザインの実装フロー
- 2. 手順上のポイント
- ① Vivado™ 設計
- ② Vitis Platform作成&DPU実装&デバイスツリー生成
- ③ ファイル変換
- ④ ユーザーデザインの実装
- 3. 実装の確認
- 4. 豊富な設計資料
- 5. 資料ダウンロード
- 6. まとめ
それでは、本編に入る前にAIアクセラレーションを実施するために必要なツールや設計に関わるフローについて簡単に説明します。
0. 本編に入る前に
0-1. AIアクセラレーションをするための設計ツール
開発には表1のとおりVivado™、Vitis™、PetaLinux、Vitis™ AIの4つが必要です。
表1. 開発に必要なツール
ツール | 概要 | 生成物 |
---|---|---|
Vivado™ | ロジック設計、PS設定、DPU組み込み | Bitstream / XSA |
Vitis™ | Platform作成、ソフトウェア開発、DPU組み込み | XCLBIN、アプリケーション |
PetaLinux | LinuxイメージのBuild | Linuxブートイメージ一式 |
Vitis™ AI | 学習済AIモデルをDPU向けにコンパイル | XMODEL |
また、今回紹介する手順でも同じことが言えますが、それぞれのツールバージョンは必ず揃えるようにしてください。
0-2. DPU(Deep Learning Processor Unit)について
DPU(Deep Learning Processor Unit)は、FPGAロジックで構築されており、畳み込みニューラルネットワークCNN(主に画像認識の分野で用いられるディープラーニングのアルゴリズム)向けに最適化されたエンジンです。
図1. Deep Learning Processor Unit(DPU)とは
DPUはデータを学習することで入力画像から特徴量を抽出し、それらを区別することできるようになるため、ディープラーニングを画像認識の分野に応用する上でたいへん重要なものです。
本編で紹介する内容でもDPUを実装します。
DPUを実装するには、Vivado™フローとVitis™フローの2つのフローが用意されていますので、こちらも本編に入る前に紹介します。
0-3. ツールフローの概要
図2のように、Vivado™フローは、DPUをVivado™上で実装します。
図2. Vivado™フロー
図3のように、Vitis™フローは、Vivado™ではDPUの実装準備を行います。
今回紹介する内容では、Makefileを使用し、Vitis™フローでDPUを実装しています。
図3. Vitis™フロー
1. はじめに
本ブログで紹介する内容は、GitHubで公開されているチュートリアルを参考に、KV/KR260用のCanonical Ubuntuからロジック部分を書き換える方法について紹介するもので、あくまで一例です。
(参考文献)
https://xilinx.github.io/kria-apps-docs/kv260/2022.1/build/html/docs/generating_custom_firmware.html
https://github.com/Xilinx/kria-apps-firmware/blob/xlnx_rel_v2022.1/README.md
また、KV/KR260が、お手元にあれば実機確認も可能です。
1-1. Canonical Ubuntuについて
Canonicalとは、Ubuntuの支援および開発援助をしている企業です。そしてUbuntuとは世界標準となっており、使いやすさに定評のあるLINUXベースのオペレーティングシステムです。
そのCanonical社認定のUbuntuは、以下のAMD製評価ボードで使用可能です。
- KV260
- KR260
- KD240
- ZCU102
- ZCU104
- ZCU106
- VCK190
今回は、この中でKV/KR260用のUbuntuを使用します。
1-2. Canonical Ubuntuを使用したユーザーデザイン書き換えについて
UbuntuにはPlatform Management Utility(xmutill)と呼ばれるものが含まれています。
このxmutillを使用することで、Ubuntu起動中にユーザーデザインの書き換えが可能です。
1-3. UbuntuとAMDツールのバージョンの相関
UbuntuとAMDツールについては、バージョンを揃えるようにしてください。
今回はUbuntu22.04を使用しているため、AMDのツールバージョンは2022.1を使用しています。
Ubuntuバージョン | AMDツールバージョン |
---|---|
Ubuntu Desktop 20.04.3 LTS | 2020.2 |
Ubuntu Desktop 22.04 LTS | 2022.1 |
それでは、KV/KR260用Ubuntuを活用しながら、ロジック部分をユーザーデザインに書き換える方法を紹介します。
1-4. Canonical Ubuntuへのユーザーデザインの実装フロー
Canonical Ubuntuへのユーザーデザイン実装については以下①~④の順で行います。
図4. Canonical Ubuntuへのユーザーデザイン実装フロー
① Vivado™ 設計
Vivado™では、Vivado™でFPGA、PS、IO、ハードウェアなどの従来どおりの設計を行い、DPUの実装に必要な準備を行います。その後、XSAファイルを生成します。
XSAはVivado™で設計した内容やツールバージョンなどの情報が入ったファイルです。
② Vitis Platform作成&DPU実装&デバイスツリー生成
GitHubから【Kria-Vitis-Platform】という名前のファイル一式をダウンロードします。
そこにあるMakefileと、先ほど生成したXSAファイルを使用してVitis™ Platformを作成します。ここで作成したプラットフォームは、DPUを実装するための下地となります。
Platformを作成すると、xpfmファイルが生成されるため、それともう一つのMakefileを使用してDPUを実装します。DPUを実装することでxclbinとbitファイルが生成されます。また、XSCTを使用してXSAファイルからデバイスツリーとpl.dtsiファイルを生成します。
XSCTは、Vitis™をコマンドラインで実行するためのツールです。XSCTでcreatedtsというコマンドを使用してデバイスツリーを生成します。bitファイルにはヘッダー情報等が含まれていますが、binに変換する事で、コンフィギュレーションデータのみが含まれたバイナリ形式のファイルにします。
また、dtsiファイルは人間が読めるように記述されているため、dtboに変換し、Ubuntuが直接使用できるようにバイナリ形式のファイルにします。
③ ファイル変換
GitHubから【kria-apps-firmware】という名前のファイル一式をダウンロードします。
そこに先ほど生成した3つのファイルであるxclbin,bit,pl.dtsiをコピーします。Makefileを使用することで、bitはbinにpl.dtsiはpl.dtboに変換されます。
bitファイルには、ヘッダ情報などが含まれていますがbinに変換することで、コンフィギュレーションデータのみが含まれたバイナリ形式のファイルにします。
また、ダウンロードしたファイル一式にはshell.jsonというファイルも含まれています。
これはxmutillで、ユーザーデザインを実装するために必要な設定ファイルです。これら4つのファイルxclbin,shell.json,yyy.bin,pl.dtboとMakefileをKR260上のUbuntuに転送します。
④ ユーザーデザインの実装
転送した後、KR260上のUbuntuでMakefileを使用することで、ユーザーデザインの実装準備が整います。(ここでのMakefileは、KR260上のUbuntuの特定の場所にディレクトリを作成し、その中に4つのファイルをコピーしています。)
その後、xmutillを使用することでユーザーデザインの実装が完了となります。
Ubuntu起動時にデフォルトでロードされているデザインがあるため、xmutil unloadappというコマンドでアンロードします。その後、実装準備を行ったユーザーデザインをxmutil loadappというコマンドで実装します。
2. 手順上のポイント
① Vivado™ 設計
それでは、より具体的な手順を説明します。説明の前に今回確認を行った環境です。
コンパイル PC OS | RHEL 7.9 |
---|---|
評価ボード | KR260 rev.A03 |
評価用OS | Ubuntu 22.04 |
ツール | Vivado 2022.1 Vitis 2022.1 |
最初のポイントとしては、Vivado™でプロジェクトを作成する際にProject is an extensible Vitis Platformにチェックを入れます。
これはこのプロジェクトがVitis Platformで使用するということを示しています。
次に、DPUの実装準備には、DPUに必要なクロック、AXIのバス、割り込みを用意します。また、用意したブロックに対してプラットフォームである設定を行います、その後XSAを生成します。
② Vitis Platform作成&DPU実装&デバイスツリー生成
今回の手順では、プラットフォームの作成やDPUの実装はMakefileを使用しています。
コマンドについては実機確認を行う際にぜひご参考ください。
● GitHubからファイル一式をダウンロード
git clone --branch xlnx_rel_v2022.1 --recursive https://github.com/Xilinx/kria-vitis-platforms.git
● xsaをコピーするディレクトリを作成
mkdir -p kria-vitis-platforms/kr260/platforms/vivado/kr260_hw_pfm/project
● xsaをコピー
cp kr260_hw_pfm/kr260_hw_pfm.xsa kria-vitis-platforms/forms/vivado/kr260_hw_pfm/project/
● 移動してMakefileを実行
cd kria-vitis-platforms/kr260/
make -C platforms platform PLATFORM=kr260_hw_pfm
● DPU実装に必要なファイルとMakefileをコピー
cp -r ../kv260/overlays/ .
● コピーしてきたoverlays/examples/nlp-smartvision/dpu_conf.vhのB3136の定義をコメントアウトし、B4096の定義を有効にします
(これは今回確認のために使用するXモデルがB4096用のためです。)
● Makefileを実行
time make -C overlays/examples/nlp-smartvision all PLATFORM=$PWD/platforms/xilinx_kr260_hw_pfm_202210_1/kr260_hw_pfm.xpfm
● 実行完了まで1時間ほどかかります
③ ファイル変換
Makefileを使用することで、bitはbinにpl.dtsiはpl.dtboに変換されるほか、pl.dtsiは人間が読めるように記述されているため、pl.dtboに変換しUbuntuが直接使用できるようにバイナリ形式のファイルにします。
図5. ファイル変換
その後、ファイル一式をZipファイルにまとめてKR260に転送します。転送にはscpコマンドを使用します。
こちらも、コマンドについては実機確認を行う際にぜひご参考ください。
● GitHubからファイル一式をダウンロード
git clone --branch xlnx_rel_v2022.1 https://github.com/Xilinx/kria-apps-firmware.git
● ファイルをまとめるディレクトリを用意
mkdir -p kr260/DPU_B4096
● xclbin,bit,pl.dtsi,shell.jsonファイルを上記ディレクトリにコピー
cp overlays/examples/nlp-smartvision/binary_container_1/sd_card/*.*b* kr260/DPU_B4096/
cp dt/dt/mydevice/psu_cortexa53_0/device_tree_domain/bsp/pl.dtsi kr260/DPU_B4096/
cp kria-apps-firmware/boards/kv260/nlp-smartvision/shell.json kr260/DPU_B4096/
● Makefileとbifファイルをカレントディレクトリにコピー
cp kria-apps-firmware/boards/* .
● Makefileを実行
make
● KR260に転送するためMakefileごとファイル一式を圧縮
zip -r kr260_dpu.zip Makefile kr260/
● KR260を起動し、ネットワークに接続
● 圧縮したファイルをKR260に転送
scp kr260_dpu.zip ubuntu@xxx.xxx.xxx.xxx:
④ ユーザーデザインの実装
転送されたZipファイルを解凍し、Makefileを実行することで、ユーザーデザインの実装準備が完了します。
● 転送されたzipファイルを解凍
unzip kr260_dpu.zip
● Makefileを実行
sudo make install
● ユーザーデザインの実装準備完了
● 現在ロードされているデザインをアンロード
sudo xmutil unloadapp
● ユーザーデザインを実装
sudo xmutil loadapp kr260-DPU_B4096
3. 実装の確認
今回は、DPUが含まれたユーザーデザインを実装しました。DPUのベンチマークを実行して、本当にユーザーデザインが実装されたかを確認します。
Vitis™ AI LibraryをKR260上のUbuntuにインストールし、モデルファイル(xmodel)をダウンロードします。
ベンチマークを実行し、結果と『Test PASS』という文字が表示されれば、ベンチマークの実行は完了です。
これでDPUが含まれたユーザーデザインが実装されていることが証明されました。
● DPUが実装されたことについてベンチマークを実行して確認
● Vitis™ AI Libraryをインストール
sudo apt install vitis-ai-library -y
● DPUで実行されるモデルファイル(xmodel)をダウンロード
wget https://www.xilinx.com/bin/public/openDownload?filename=yolov3_bdd-zcu102_zcu104_kv260-r2.5.0.tar.gz -O ${HOME}/yolov3_bdd-zcu102_zcu104_kv260-r2.5.0.tar.gz
● 解凍先のディレクトリを作成
sudo mkdir /usr/share/vitis_ai_library/models
● ダウンロードしたファイルを解凍
sudo tar -xvf ${HOME}/yolov3_bdd-zcu102_zcu104_kv260-r2.5.0.tar.gz -C/usr/share/vitis_ai_library/models
● ベンチマークを実行
xdputil benchmark /usr/share/vitis_ai_library/models/yolov3_bdd/yolov3_bdd.xmodel 5
4. 豊富な設計資料
AMD社から、設計の際に必要となる資料は豊富に用意されております。皆様が設計される際には、きっとお役に立つのではないでしょうか。
表2. ドキュメント資料について
5. 資料ダウンロード
本ブログでご紹介した内容を資料で確認されたい場合は、以下よりダウンロードが可能です。
6. まとめ
いかがでしたでしょうか。
今回は、AMD社のKria™ SOM評価ボードKV260/KR260上でUbuntuからロジック部分をユーザーデザインに書き換える手順について紹介しました。
少しでもご興味がありましたら、お気軽にお問い合わせください!
Kria™ SOMやAMD社製品に関する
お問い合わせはこちら