1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. Kria™ SOM評価ボードを使ったユーザーデザイン実装の一例紹介(Ubuntu Base)

TECHブログ

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

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

皆さん、こんにちは。

本ブログでは、AMD社のKria™ SOM評価ボードを使ったユーザーデザイン実装の一例紹介(Ubuntu Base)と題し、KV260/KR260(以下KV/KR260)上のCanonical Ubuntuから、ロジック部分をユーザーデザインに書き換える方法について紹介させていただきます。

目次

それでは、本編に入る前に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からロジック部分を書き換える方法について紹介するもので、あくまで一例です。

また、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. ドキュメント資料について

左右にスクロールしてご覧ください
ドキュメント 番号 URL
K26データシート DS987 https://docs.amd.com/r/en-US/ds987-k26-som
K26 SOM 機能概要、インターフェース概要、コネクタPin配置、一部AC/DCスイッチング特性を記載
Zynq UltraScale+ MPSOC データシート DS925 https://docs.amd.com/r/en-US/ds925-zynq-ultrascale-plus/Summary
Zynq Ultrascale+ MPSOC AC/DC スイッチング特性を記載
※DS987と併せて確認が必要
熱設計ガイドライン UG1090 https://docs.amd.com/r/en-US/ug1090-k26-thermal-design
K26 SOM 熱設計ガイドライン
キャリアカード設計ガイドライン UG1091 https://docs.amd.com/r/en-US/ug1091-carrier-card-design
キャリアカード設計における留意点を記載
KV260評価ボード回路図 XTP682 https://japan.xilinx.com/member/forms/download/design-license.html?cid=3eb7e365-5378-461f-b8b0-bb3dad84eb4e&filename=xtp682-kria-k26-carrier-card-schematic.zip
KV260キャリアボードの回路図、リファレンス回路として参考情報
KV260評価ボード部品表 XTP713 https://japan.xilinx.com/member/forms/download/design-license.html?cid=be482139-48ac-4884-b53f-cabc7ae834a4&filename=xtp713-kria-k26-carrier-card-bom.zip
KV260キャリアボードの部品表、リファレンス回路として参考情報
K26 XDC XTP685 https://japan.xilinx.com/member/forms/download/design-license.html?cid=29e0261a-9532-4a47-bb06-38c83bbbb8c0&filename=xtp685-kria-k26-som-xdc.zip
SOMコネクタとデバイスPin配置の確認に利用可能
回路図チェックリスト XTP748 https://www.xilinx.com/member/forms/download/design-license.html?cid=4b1f34ec-ad81-4649-b81c-93a271650824&filename=xtp748-kria-som-schematic-review-checklist.zip
K26 SOM 端子の回路図チェックリスト、回路設計時のお供に
K26 Wiki   https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM
直接回路設計に関する情報は少ないがK26関連の様々な情報を記載

5. まとめ

いかがでしたでしょうか。
今回は、AMD社のKria™ SOM評価ボードKV260/KR260上でUbuntuからロジック部分をユーザーデザインに書き換える手順について紹介しました。
少しでもご興味がありましたら、お気軽にお問い合わせください!

 

Kria™ SOMに関するお問い合わせはこちらから

関連ブログ