DPUの「大きいサイズのB4096」と「小さいサイズのB512」を電力比較しました。
実際にKR260でDPUをオーバーレイさせたときの電力を比較しています。
合成時のFPGAのPower Consumptionから、実際の消費電力まで確認しています。
DPUの消費電力をB4096とB512で確認してみた
KR260でDPUの「大きいサイズのB4096」と「小さいサイズのB512」を電力比較しました。
合成時のFPGAのPower Consumptionから、実際の消費電力まで確認しています。
実際の消費電力ではB512が約9.0W(12V_750mA)、B4096が約9.6W(12V_800mA)となりました。
実際のテスト動画が下記です。
テスト環境やプログラム含めて紹介していきます。
モバイルバッテリーPD20WでKR260を動かす
PD対応の12V出力が可能なモバイルバッテリーを用意しました。
(モバイルバッテリーを使う理由は電流測定でTypeCの電流チェッカーを使いたいためです。)
Philips (フィリップス)のDLP7721Cです。スペックとしてはPD20Wで下記です
【出力】USB-A1/A2:DC 5V/3A,9V/2A,12V/1.5A
USB-C:DC 5V/3A,9V/2.2A,12V/1.67A
TypeCの電流チェッカーはAmazonで販売されている、汎用品のものです。
KR260のDCジャックに12V電源入力できるように、PD12V出力対応のケーブルも購入しました。
KR260の起動は問題ありません。ブート含めてLinuxも正常に立ち上がります。
普通のFPGA・Linuxの動作する程度はモバイルバッテリーからでも対応出来ました。
もちろん、DCジャックを差し込んでいないときは0W(12V_0mA)です。
DCジャックを差し込んでからの、Linux起動時は約8.5W(12V_700mA)でした。
VitisでB4096とB512の設定ファイルを作る
VivadoとVitisを使ってDPUを動かすためのファイルを作ります。
KR260のPYNQ上で動かすには、「.bit」「.xclbin」「.hwh」のファイルが必要です。
実際の作り方に関しては、下記記事で紹介しています。

PYNQでYOLOX-nano + PyTorchの物体検出してみた

今回、B4096とB512で極力パラメータを同じにしたく、DPUのクロックを150MHzにしました。
(300MHzだと、色々パラメータを弄る必要があるためです)
Vitisで合成するときのDPUの設定(dpu_conf.vh)
B512に関しては、デフォルトのB4096からB512への下記1点だけです。
1 2 |
//`define B4096 `define B512 |
B4096に関しては、下記を変更しています。BRAM箇所でエラー出たので修正追加しています。
1 2 |
//`define URAM_DISABLE `define URAM_ENABLE |
合成後にFPGAのPower Consumptionを確認してみます。
Vivadoで、DPU合成後のプロジェクトを開きます。下記箇所にあるはずです。
~/***_hw_link/Hardware/dpu.build/link/vivado/vpl/prj
FPGAのPower Consumptionの設定はデフォルト(typical)です。
B512_150MHzは下記のように3.784Wとなりました。
B4096_150MHzは下記のように5.071Wとなりました。
Vitis AIでB4096とB512用のモデルを作る
今回は物体検出(YOLOX-nano)のモデルを使います。
最初にLinux環境でKR260用のYOLOXのモデルを作成(コンパイル)します。
YOLOXのサンプルのモデルをダウンロードして解凍します。
1 2 |
wget https://www.xilinx.com/bin/public/openDownload?filename=pt_yolox-nano_3.5.zip unzip openDownload\?filename\=pt_yolox-nano_3.5.zip |
Vitis AIでコンパイル
Vitis AIを使ってコンパイルします。今回はpytorchのCPU版のVitis AIを立ち上げています。
(コンパイル自体はCPU版でもGPU版でも変わりありません。)
1 2 |
cd Vitis-AI/ ./docker_run.sh xilinx/vitis-ai-pytorch-cpu:latest |
KR260でのB512とB4096では作成する際に使うパラメータ(fingerprint)が異なります。
fingerprintが書かれているファイル(arch.json)は、Vitisで作られた下記フォルダにあります。
~/***_hw_link/Hardware/dpu.build/link/vivado/vpl/prj/prj.gen/sources_1/bd/design_1/ip/design_1_DPUCZDX8G_1_0/arch.json
LinuxのPCでVitis AIを起動します。
下記例ではB512のarch.jsonをb512_arch.jsonにリネームした後に、コンパイルしています。
1 2 3 4 5 |
(vitis-ai-pytorch) vitis-ai-user@iotengineer-Inspiron-3650:/workspace/pt_yolox-nano_3.5$ history 1 cd pt_yolox-nano_3.5/ 2 conda activate vitis-ai-pytorch 3 vai_c_xir -x quantized/YOLOX_0_int.xmodel -a b512_arch.json -n b512_yolox_nano_pt -o ./b512_yolox_nano_pt 4 history |
コンパイル後は.xmodelファイルが指定のフォルダに作成されています。
B4096の.xmodelファイルも同様に作成します
KR260でのテスト
テストで実行したYOLOX-nanoのプログラム(.ipynb)は下記です。
B4096とB512の切り替えは、オーバーレイとモデル読み込み箇所を変えています。
冒頭でも紹介したテスト動画は下記です。
LAN経由で実行しているので、KR260に余分なデバイス(カメラ・モータ)の接続は無しです。
純粋にKR260とDPUの消費電力を測定しています。
プログラム実行前にLinuxを起動しただけだと約8.5W(12V_700mA)でした。
DPUのB512を実行した後は約9.0W(12V_750mA)となりました。
また、DPUのB4096を読み込んだ後は約9.6W(12V_800mA)となりました。
実際の消費電力で比較するとB4096の方が0.6Wほど大きい形になりました。
但しB4096だと消費電流が大きい分、DPUの実行速度も速いです。
B4096はB512に比べて、約1/2の実行時間となります。
(DPU execution timeの箇所です。B512が0.0345sに対して、B4096は0.0174sでした)
B512の結果が下記です。
1 2 3 4 5 6 7 8 9 10 |
Details of detected objects: [49. 60.] Pre-processing time: 0.0078 seconds DPU execution time: 0.0345 seconds Post-process time: 0.0288 seconds Total run time: 0.0711 seconds Performance: 14.069935324584709 FPS (array([[ 458.11553955, 125.8078537 , 821.88452148, 489.57681274], [ 40.24644089, 0. , 1239.75366211, 720. ]]), array([0.56179011, 0.11786249]), array([49., 60.])) |
B4096の結果が下記となります。
1 2 3 4 5 6 7 8 9 10 |
Details of detected objects: [49. 60.] Pre-processing time: 0.0083 seconds DPU execution time: 0.0174 seconds Post-process time: 0.0298 seconds Total run time: 0.0555 seconds Performance: 18.018627349898615 FPS (array([[ 458.11553955, 125.8078537 , 821.88452148, 489.57681274], [ 40.24644089, 0. , 1239.75366211, 720. ]]), array([0.56179011, 0.11786249]), array([49., 60.])) |
まとめ
DPUの「大きいサイズのB4096」と「小さいサイズのB512」を電力比較しました。
実際にKR260でDPUをオーバーレイさせたときの電力を比較しています。
合成時のFPGAのPower Consumptionから、実際の消費電力まで確認しました。
今回のKR260で実施した内容は、下記記事で紹介したテストの一部です。

コメント