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で実施した内容は、下記記事で紹介したテストの一部です。

 
  
  
  
  





































コメント