Intel DevCloud for the Edge を使い倒す(その5)

Intel DevCloud for the Edge を使い倒す(その4)から続く記事の5回目です
今回は実際に実行ファイルをキューに入れて実行してみます
( Intel DevCloudの記事はこちら

Edge Serverでの処理をQueueに入れるところまでは、前回で行いました
次に実際の実行ファイルを実行するまでを行ってみましょう

前回使用したコマンドは下記のとおりです

Queueを扱うコマンド群
pbsnodes: 使用可能なサーバーの列挙
qsub: queueの登録
qstat: 自分が実行したqueueの状態
qdel: queueの削除

他にもありますが、これだけ覚えておくとなんとかなります
詳しくはここにあります

Development ServerとEdge ServerのストレージはNFSで接続されているので、実行時にファイルを転送したりする必要はありませんが、出力ファイルなどがある場合には、同一名は避けないといけませんので、その場合は処理が必要です

では、いつも通り、security barrier camera demo を使用してベンチマークを取ってみましょう
まずは、適当なEdge Serverを選択し、そのサーバーに対してQueueを投げてみます

#!/bin/bash
  
~/omz_demos_build/intel64/Release/security_barrier_camera_demo -m ~/models/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_va ~/models/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -m_lpr ~/models/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -i ~/car_1.bmp -no_show

こちらのスクリプトファイルを、sbcd.bashとして保存します
保存したものをDevelopment Serverで実行すると、

u41585@s099-n003:~/security_log$ bash sbcd.bash 
 [ INFO ] InferenceEngine: 0x7fbc94231030
 [ INFO ] Files were added: 1
 [ INFO ]     /home/u41585/car_1.bmp
 [ INFO ] Loading device CPU
         CPU
         MKLDNNPlugin version ……… 2.1
         Build ……….. 42025
 [ INFO ] Loading detection model to the CPU plugin
 [ INFO ] Loading Vehicle Attribs model to the CPU plugin
 [ INFO ] Loading Licence Plate Recognition (LPR) model to the CPU plugin
 [ INFO ] Number of InferRequests: 1 (detection), 3 (classification), 3 (recognition)
 [ INFO ] 10 streams for CPU
 [ INFO ] Display resolution: 1920x1080
 [ INFO ] Number of allocated frames: 3
 [ INFO ] Resizable input with support of ROI crop and auto resize is disabled
 43.6FPS for (1 / 1) frames
 Detection InferRequests usage: 100.0%
 [ INFO ] Execution successful

うまく実行できていますので、これをQueueに投げてみます
まずはi5-6500te というCPUで実行してみましょう

u41585@s099-n003:~/security_log$ qsub -l nodes=1:i5-6500te sbcd.bash 
 3418.v-qsvr-2.devcloud-edge

3418というJob名で登録されました
しばらくして、実行したフォルダを見てみると、

u41585@s099-n003:~/security_log$ ls
 sbcd.bash  sbcd.bash.e3418  sbcd.bash.o3418

と言うファイルが出来上がっています
sbcd.bash.o3418の中身を見てみると、下記のようになります

#
 Date:           Sat May  2 03:31:21 PDT 2020
 Job ID:           3418.v-qsvr-2.devcloud-edge
 User:           u41585
 Resources:           neednodes=1:i5-6500te,nodes=1:i5-6500te,walltime=01:00:00
 #
 [setupvars.sh] OpenVINO environment initialized
 [ INFO ] InferenceEngine: 0x7f5092704030
 [ INFO ] Files were added: 1
 [ INFO ]     /home/u41585/car_1.bmp
 [ INFO ] Loading device CPU
         CPU
         MKLDNNPlugin version ……… 2.1
         Build ……….. 42025
 [ INFO ] Loading detection model to the CPU plugin
 [ INFO ] Loading Vehicle Attribs model to the CPU plugin
 [ INFO ] Loading Licence Plate Recognition (LPR) model to the CPU plugin
 [ INFO ] Number of InferRequests: 1 (detection), 3 (classification), 3 (recognition)
 [ INFO ] 4 streams for CPU
 [ INFO ] Display resolution: 1920x1080
 [ INFO ] Number of allocated frames: 3
 [ INFO ] Resizable input with support of ROI crop and auto resize is disabled
 2.7FPS for (1 / 1) frames
 Detection InferRequests usage: 0.0%
 [ INFO ] Execution successful
 #
 End of output for job 3418.v-qsvr-2.devcloud-edge
 Date: Sat May  2 03:31:28 PDT 2020
 #

全ての処理をCPUで実行して、2.7FPSと言う結果が出ています
どうも遅いですが、この問題は後ほど解決するとして、これで色々なEdge Serverで実行できることが分かりました

FPSが2.7になった理由を考えてみましょう
こちらのCPUはCore i5 6500teなので、スペックを見てみると、2.3GHzからバースト時には3.3GHzまでクロックが上がります
lscpuでこちらのマシンのCPUをみてみましょう

Architecture:        x86_64
 CPU op-mode(s):      32-bit, 64-bit
 Byte Order:          Little Endian
 CPU(s):              4
 On-line CPU(s) list: 0-3
 Thread(s) per core:  1
 Core(s) per socket:  4
 Socket(s):           1
 NUMA node(s):        1
 Vendor ID:           GenuineIntel
 CPU family:          6
 Model:               94
 Model name:          Intel(R) Core(TM) i5-6500TE CPU @ 2.30GHz
 Stepping:            3
 CPU MHz:             833.403
 CPU max MHz:         3300.0000
 CPU min MHz:         800.0000
 BogoMIPS:            4608.00

3.3GHzはあっていますが、CPU min MHzの800と言うのは、Intelが発表しているものと違います
恐らくマザー側の省電力モード?が走っているのではないでしょうか

#!/bin/bash

lscpu

for nm in `seq 1 10`
do
        echo "@@@"$nm
~/omz_demos_build/intel64/Release/security_barrier_camera_demo -m ~/models/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_va ~/models/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -m_lpr ~/models/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -i ~/car_1.bmp -no_show

lscpu
done

次に、lscpuを実行時に行うようにし、10回security barrierを走らせるようにしました
結果は下記のようになります

u41585@s099-n003:~/security_log$ grep -E "@@@|FPS|CPU MHz" sbcd.bash.o3426
 CPU MHz:             800.081
 @@@1
 13.3FPS for (1 / 1) frames
 CPU MHz:             2033.078
 @@@2
 27.7FPS for (1 / 1) frames
 CPU MHz:             2998.178
 @@@3
 28.1FPS for (1 / 1) frames
 CPU MHz:             3034.077
 @@@4
 26.5FPS for (1 / 1) frames
 CPU MHz:             3017.880
 @@@5
 29.5FPS for (1 / 1) frames
 CPU MHz:             3007.795
 @@@6
 28.8FPS for (1 / 1) frames
 CPU MHz:             3029.440
 @@@7
 29.0FPS for (1 / 1) frames
 CPU MHz:             3006.187
 @@@8
 29.4FPS for (1 / 1) frames
 CPU MHz:             3013.184
 @@@9
 28.1FPS for (1 / 1) frames
 CPU MHz:             3000.330
 @@@10
 28.9FPS for (1 / 1) frames
 CPU MHz:             3002.821

やはり、と言うか一度目の実行はクロックが上がりきっていないのであまりあてになりません
ベンチマークを取るうえで、気を付けないといけないことだと思います

つづく