AI

日本システム開発株式会社からAIに関するコラムをお届けします。

推論システム開発に2017年から携わっている実績に基づき、様々な情報を発信しています。

日本システム開発の技術、
覗いてみませんか。

AIコラム 第8回「(OpenVINO第3回) クラウドサービス「Intel DevCloud for the Edge」について」

OpenVINOのコラム、第3回はクラウドサービス「Intel DevCloud for the Edge」についてです。

クラウドでOpenVINOを実行できるサービスである「Intel DevCloud for the Edge」の使い方について説明いたします。

Intel DevCloud for the Edge とは

Intel DevCloud for the Edge (以下、DevCloud と呼ぶ)はIntel社が提供しているクラウドサービスで、OpenVINOが予めインストールされたクラウド上の環境を利用できます。

このサービスの大きな特徴として、クラウド環境でホストされている様々なIntelハードウェア(CPU/GPU/FPGA/VPU)上でアプリケーションを実行させることができ、開発者はプロトタイプの実験を簡単に、そして無料で実施することができます。

※DevCloudは、インテル社のプラットフォームを利用した市場向け製品開発のための利用に限られていますのでご注意下さい。

以下の図はDevCloudでのワークフローを表した図です。

上図の①~⑥の各ステップについて説明をします。

ステップ①&②:開発

  • jupyter-notebookで提供されているリファレンスサンプルのソースコードを編集します。
  • OpenVINOを利用して学習済みモデルのダウンロード、モデルオプティマイザを利用してモデルの準備を行い、ステップバイステップで学びながらソースコードを実行します。
  • 録画した動画やライブストリームのパスを設定します。

ステップ③&④:ジョブの投入

  • target edge acceleratorとして利用可能なハードウェアオプションを学びます。
  • アプリケーションをジョブキューに登録し、特定のedge computing nodeや、同時に並列実行できる複数のedge computing node上で推論を実行します。

ステップ⑤&⑥: 結果

  • jupyter-notebookで推論結果を表示します。
クラウド上で利用可能なIntel社ハードウェアのラインナップ
プロセッサRAMGPU推論アクセラレータ
Intel® Atom® x5-E39404 GBIntel® HD Graphics 500
Intel® Atom® x7-E39502 GBIntel® HD Graphics 505
Intel® Atom® x7-E39504 GBIntel® HD Graphics 505
Intel® Atom® x7-E39504 GBIntel® HD Graphics 505Intel® Movidius™ Myriad™ X based Intel® Vision Accelerator Design cards – x1
Intel® Core™ i5 6500TE8 GBIntel® HD Graphics 530
Intel® Core™ i5 6500TE8 GBIntel® HD Graphics 530Intel® Movidius™ Myriad™ X based Intel® Vision Accelerator Design cards – x8
Intel® Core™ i5 6500TE8 GBIntel® HD Graphics 530Intel® Arria® 10 FPGA
Intel® Core™ i5 6500TE8 GBIntel® HD Graphics 530Intel® Movidius™ Myriad™ X based Intel® Vision Accelerator Design cards – x1
Intel® Core™ i5 6442EQ8 GBIntel® HD Graphics 530
Intel® Core™ i5 7500T8 GBIntel® UHD Graphics 630
Intel® Core™ i5 75008 GBIntel® UHD Graphics 630
Intel® Core™ i7 8665UE16 GBIntel® UHD Graphics 620Intel® Movidius™ Myriad™ X based Intel® Vision Accelerator Design cards – x2
Intel® Core™ i5 8365UE8 GBIntel® UHD Graphics 620
Intel® Core™ i7 8665UE16 GBIntel® UHD Graphics 620
Intel® Xeon® E3 1268L v532 GBIntel® HD Graphics 505
Intel® Xeon® Gold 5120384 GB
Intel® Xeon® Bronze 3206R48 GB
Intel® Xeon® Silver 4214R48 GB
Intel® Xeon® Gold 5220R96 GB
Intel® Xeon® Gold 6258R96 GB

上記のラインナップの中から、評価したいIntel社ハードウェアを選択し、クラウド上で実行を行うことになります。

それでは、DevCloudを利用するために、まずはアカウントの登録から行っていきましょう。

アカウントの登録

DevCloud を利用するために、まずはユーザアカウントの登録を行う必要があります。

以下のURLをクリックし、右上の「Sign in」をクリックしてください。

続いて、以下の画面の「Register」をクリックします。

DevCloudのアカウント登録画面に遷移するので、必要な情報を入力して「Submit」ボタンをクリックします。

※DevCloud を利用するプロジェクトの説明を記載する欄があります。

 記載内容によってはアカウントの作成が受領されない場合もございますのでご注意下さい。

Submit後、2営業日以内に返信が来ます。

メール内のURLをクリックしてメールアドレスの承認を行ってください。

DevCloudへのサインインとノートブックの準備

DevCloudのアカウントの取得が完了したら、DevCloudにサインインを行います。

メールに記載されたuuid付きのURLにアクセスすると、サインインすることができます。

次に「Advanced」タブから、「Connect and Create」を選択します。

次に「My Files」を選択します。

初回はサーバが立ち上がっていないため、以下のような画面が表示されます。

「Launch Server」をクリックして、サーバを起動させます。

「New」から「Python3 (Ubuntu)」を選択して、新しいノートブックを作成します。

新しくノートブックが作成されました。

次の章では、ノートブックを利用してDevCloudの基本的な使い方について学んでいきたいと思います。

DevCloudの使い方

まずは、実際にコードを書く前にDevCloudを利用する際の、大まかな流れを説明したいと思います。

※ DevCloud上で実行するアプリケーションは以下を参考にしました。

https://github.com/yas-sim/devcloud-workshop-jp

DevCloud は3つのサーバと1つのストレージで構成されています。

名前説明補足
development serversjupyter-notebook が実行されているマシンXeon サーバ
edge computing node serversジョブが実行されるマシン※前述の「クラウド上で利用可能なIntel社ハードウェアのラインナップ」の表を参照
job queueing serversジョブをedge computing nodeに登録するマシン
cloud storageデータセットなどを格納するストレージ容量50GB

DevCloud上でアプリケーションを実行する際は以下の手順の通り進めていきます。

  1. edge computing node上で実行されるジョブを記載した、ジョブスクリプトを作成する
  2. edge computing nodeにジョブを送信する
  3. ジョブ結果を確認する

では、1から順番に見ていきましょう。

  1.  edge computing node上で実行されるジョブを記載した、ジョブスクリプトを作成する

ジョブスクリプトを作成します。

ジョブスクリプトの中身はLinuxのシェルスクリプトです。

以下のソースコードを実行して、簡単なジョブスクリプトを作成しておきます。

この中に記載されたジョブは、edge computing node上で実行されることになります。

以下のジョブスクリプトは、実行されたディレクトリのパスを表示し、実行ディレクトリにあるファイルを列挙した後、最後に”Hello! I like OpenVINO”という文言を標準出力に出すジョブスクリプトです。

(本当はここで推論プログラムを実行したりするのですが、今回はサンプルとしてシェルコマンドのみの簡単なジョブを実行しています)

%%writefile job.sh
echo n ‘start dir=’
pwd
ls l
echo Hello! I like OpenVINO
Overwriting job.sh

※1.%% writefile <ファイル名> コマンドで、そのセルの内容が<ファイル名>のファイルとして書き出されます。

※2.ジョブスクリプトから任意のプログラムを実行することができます。

以下は、pythonの自作プログラムを実行するジョブスクリプトを生成する例になります。

%%writefile job.sh
python3 my_inference.py # 例) 自作の推論プログラム
Overwriting job.sh
  1.  edge computing nodeにジョブを送信する

まずは、利用可能なedge computing nodeの中から、目的のハードウェアタイプを持つノードを探します。

(特に目的のハードウェアタイプがない場合は、本手順をスキップして、後述のqsubコマンドの実行時に-lオプションを省略してください。-l オプションはハードウェアタイプを指定して、ジョブを割り当てるedge computing nodeを指定するオプションになります。このオプションを省略した場合は、利用可能なedge computing nodeの中からいずれかのノードが割り当てられます。)

次のコマンドをノートブック上で実行してください。

!pbsnodes | grep “properties =” | sort | uniq c
29properties = idc001skl,compnode,iei,tank-870,openvino2020.4,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe
8properties = idc002mx8,compnode,iei,tank-870,openvino2020.4,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe,hddl-r,iei-mustang-v100-mx8
12properties = idc003a10,compnode,iei,tank-870,openvino2020.4,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe,hddl-f,iei-mustang-f100-a10
12properties = idc004nc2,compnode,iei,tank-870,openvino2020.4,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe,ncs,intel-ncs2
6properties = idc006kbl,compnode,iei,tank-870,openvino2020.4,intel-core,i5-7500t,kaby-lake,intel-hd-630,ram8gb,net1gbe
7properties = idc007xv5,compnode,iei,tank-870,openvino2020.4,intel-xeon,e3-1268l-v5,skylake,intel-hd-p530,ram32gb,net1gbe
8properties = idc008u2g,compnode,up-squared,grove,openvino2020.4,intel-atom,e3950,apollo-lake,intel-hd-505,ram4gb,net1gbe,ncs,intel-ncs2
1properties = idc009jkl,compnode,jwip,openvino2020.4,intel-core,i5-7500,kaby-lake,intel-hd-630,ram8gb,net1gbe
1properties = idc010jal,compnode,jwip,openvino2020.4,intel-celeron,j3355,apollo-lake,intel-hd-500,ram4gb,net1gbe
1properties = idc011ark2250s,compnode,advantech,openvino2020.4,intel-core,i5-6442eq,skylake,intel-hd-530,ram8gb,net1gbe
1properties = idc012ark1220l,compnode,advantech,openvino2020.4,intel-atom,e3940,apollo-lake,intel-hd-500,ram4gb,net1gbe
1properties = idc013ds580,compnode,advantech,openvino2020.4,intel-atom,e3950,apollo-lake,intel-hd-505,ram2gb,net1gbe
11properties = idc014upxa10fx1,compnode,aaeon,upx-edgei7,openvino2020.4,intel-core,i7-8665ue,whiskey-lake,intel-uhd-620,ram16gb,net1gbe,vpu,myriadx-ma2485
2properties = idc015ai5,compnode,advantech,epc-c301evk-s6a1,openvino2020.4,intel-core,i5-8365ue,whiskey-lake,ram8gb,net1gbe,vpu,myriad,x,ma2485
4properties = idc015ai5,compnode,advantech,epc-c301i5,openvino2020.4,intel-core,i5-8365ue,whiskey-lake,intel-uhd-620,ram8gb,net1gbe,vpu,myriadx-ma2485
4properties = idc016ai7,compnode,advantech,epc-c301i7,openvino2020.4,intel-core,i7-8665ue,whiskey-lake,intel-uhd-620,ram16gb,net1gbe,vpu,myriadx-ma2485
1properties = idc017,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,gold5220r,cascade-lake-r,ram96gb,net1gbe
1properties = idc018,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,gold6258r,cascade-lake-r,ram96gb,net1gbe
1properties = idc019,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,bronze3206r,cascade-lake-r,ram48gb,net1gbe
4properties = idc020,training,colfax,cx22875s-nvme-x7,openvino2020.4,intel-xeon,ram384gb,net1gbe
2properties = idc021,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,silver4214r,cascade-lake-r,ram48gb,net1gbe
10properties = idc021,compnode,intel,nuc10fnh,openvino2020.4,intel-i7-10thgen,ram16gb,net1gbe
1properties = idc024,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,gold5220r,cascade-lake-r,ram96gb,net1gbe,hddl-r,iei-mustang-v100-mx8
1properties = idc025,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,gold6258r,cascade-lake-r,ram96gb,net1gbe,hddl-r,iei-mustang-v100-mx8
1properties = idc026,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,bronze3206r,cascade-lake-r,ram48gb,net1gbe,hddl-r,iei-mustang-v100-mx8
1properties = idc027,compnode,colfax,cx-e4150s-x7,openvino2020.4,intel-xeon,silver4214r,cascade-lake-r,ram48gb,net1gbe,hddl-r,iei-mustang-v100-mx8

pbsnodesコマンドは、利用可能なノードの情報を出力するコマンドです。

propertiesには、そのノードのハードウェアタイプが記載されています。

利用したいハードウェアと合致したノードを見つけます。

一番左の数値は、そのpropertiesを持つノードが何個存在しているかを示しています。

実際にジョブをノードに送信するときは以下のようにqsubコマンドを利用します。

(ノードを指定する際は、qsubコマンドの – l オプションを使用します。省略した場合は空いているノードにジョブが割り当てられます)

# submit a job (edge computing nodeとしてi5-6500teを指定)
job_id=!qsub l nodes=1:i56500te job.sh
 
# generate log file name from job_id
job_num = job_id[0].split(‘.’)[0]
log_file=‘job.sh.o’+job_num
err_file=‘job.sh.e’+job_num
print(‘job_id={}, log_file={}’.format(job_id, log_file))
 
import time
def waitForJobCompletion(jobNumber):
 print(‘Waiting for job completion…’, end=)
 running=True
 while running:
  time.sleep(1)
  running=False
  status_list=!qstat   # Check job status
  for status in status_list:
   if jobNumber in status:    # if job_num is found in the status list, the job is still running
    running = True
  print(status.split()[4], end=)
 print(‘…Job {} completed’.format(job_num))
 
# wait for the job to complete
waitForJobCompletion(job_num)
job_id=[‘33206.v-qsvr-1.devcloud-edge’], log_file=job.sh.o33206
Waiting for job completion…QRRRRRRRRRRRRR…Job 33206 completed

上記のコードでは、-l オプションで、「i5-6500teのプロパティを持っているノードを1つ」と指定しています。

ノードの指定は、pbsnodesコマンドのpropertiesのカンマで区切られた文字列を指定します。

※カンマで区切られた文字列

 以下の黄色字がIntel® Core™ i5 6500TEを持つedge computing nodeということを示しています。

properties = idc001skl,compnode,iei,tank-870,openvino2020.4,intel-core,i5-6500te,skylake,intel-hd-530,ram8gb,net1gbe

 “カンマで区切られた文字列” はそのノードが持つハードウェアプロパティの一つを表しています。

 「i5-6500te」の他にも「idc001skl」「compnode」「iei」・・・などもそのノードのハードウェアプロパティの一つを示しています。

qsubコマンドの – lオプションでは、複数のハードウェアプロパティを重ねて指定することができます。

これを利用してより狭い名前で特定のノードを指定することができますが、ノードが割り当てられるまでにかかる時間が長くなる可能性もありますのでご注意ください。

qsubコマンドの実行後は、結果が出力されるログファイルの指定をしています。

デフォルトのログファイルは

標準出力: <ジョブスクリプト名>.o.<ジョブ番号>

標準エラー出力: <ジョブスクリプト名>.e.<ジョブ番号>

という名前で生成されるため、qsubコマンドの戻り値からジョブIDを取得し、ログファイルの指定に利用しています。

最後のwaitForJobCompletion() 関数はジョブの終了を待ち受ける関数です。

qstatコマンドでジョブが終了するまで常に監視し続けます。

※ 補足

 qsub コマンドには以下のようなオプションが存在します。

option説明
-l resource_name[=val][,resource_val[=val]]使用するコンピュートノードを制限(指定)
-o fileSTDOUTを書き出すファイル
-e fileSTDERRを書き出すファイル
-N job_nameジョブネーム
-d working_dir作業ディレクトリを指定
-F args_for_jobジョブスクリプトへの引数
  1. ジョブ結果を確認する

最後にジョブの出力結果を確認します。

今回のジョブではlog_file変数にログに結果を格納しているので、catコマンドで確認します。

# 1つ前のセルでlog_fileにログファイル名を入れている。環境変数にセットしてcatから使えるようにする
import os
os.environ[‘log_file’]=log_file
 
!cat $log_file
##################################################################
#  Date:    Tue Aug 4 03:13:41 PDT 2020
#  Job ID:    33206.v-qsvr-1.devcloud-edge
#  User:    u46319
#  Resources:   neednodes=1:i5-6500te,nodes=1:i5-6500te,walltime=01:00:00
##################################################################
 
[setupvars.sh] OpenVINO environment initialized
start dir=/home/u46319
total 36
-rw——-    1 u46319 u46319 59 Aug 4 03:13 job.sh
-rw——-    1 u46319 u46319 0 Aug 4 03:12 job.sh.e33205
-rw——-    1 u46319 u46319 1239 Aug 4 03:12 job.sh.o33205
drwxr-xr-x 4 u46319 u46319 4096 Jul 29 01:01 My-Notebooks
drwxr-xr-x 3 u46319 u46319 4096 Feb 19 10:42 Reference-samples
-rw——-    1 u46319 u46319 17044 Aug 3 01:14 Untitled.ipynb
Hello! I like OpenVINO
 
##################################################################
# End of output for job 33206.v-qsvr-1.devcloud-edge
# Date: Tue Aug 4 03:13:47 PDT 2020
########################################################################
 
USER_ID=[u46319]
JOB_ID=[33206]
JOB_RUNTIME=[2]
FROM_TIME=[1596536025]
TO_TIME=[1596536027]
HOST_TYPE=[idc001skl_compnode_iei_tank-870_openvino2020.4_intel-core_i5-6500te_skylake_intel-hd-530_ram8gb_net1gbe]
EDGE_NAME=[s001-n001]
INTEL_SKU=[core-i5]
skipping application metrics
skipping telemetry

DevCloudの基本的な使い方は以上です。

今回は、簡単なジョブスクリプトを使用しましたが、自作のOpenVINOアプリケーションを実行させたい場合は、ジョブスクリプトからアプリケーションを呼び出すようにするだけで簡単に実行することができます。

ベンチマークの方法について

ここからは、DevCloud上で推論のベンチマークを行う方法をご紹介したいと思います。

DevCloudのサンプルアプリの中には、ベンチマークを行うことに特化したプログラムが含まれています。

DevCloudの実行ノードを選択できる機能と組み合わせて、各種Intelハードウェア上で推論を行ったときのベンチマーク計測を簡単に行うことができます。

まずは、ベンチマークアプリを現在のディレクトリにコピーします。

!pwd
!cp r $INTEL_OPENVINO_DIR/deployment_tools/tools/benchmark_tool .
!ls l benchmark_tool
/home/u46319
total 24
-rw——- 1 u46319 u46319 691 Aug 4 03:13 benchmark_app.py
-rw——- 1 u46319 u46319 12613 Aug 4 03:13 README.md
-rw——- 1 u46319 u46319 39 Aug 4 03:13 requirements.txt

続いて、ベンチマーク対象のモデルファイルを用意します。

今回はsqueezenet1.1を使用します。

model_downloader.pyを使用してOpen Model Zooからモデルファイルをダウンロードします。

以下のコマンドでは、同時にIRフォーマットへの変換も行っております。

# Squeezenet1.1モデルをダウンロード (Caffe形式)
!python3 $INTEL_OPENVINO_DIR/deployment_tools/tools/model_downloader/downloader.py name squeezenet1.1
!python3 $INTEL_OPENVINO_DIR/deployment_tools/tools/model_downloader/converter.py name squeezenet1.1 precisions FP32
##########|| Downloading models ||################
 
========== Downloading/home/u46319/public/squeezenet1.1/squeezenet1.1.prototxt
… 100%, 9 KB, 20710 KB/s, 0 seconds passed
 
========== Downloading /home/u46319/public/squeezenet1.1/squeezenet1.1.caffemodel
… 100%, 4834 KB, 17612 KB/s, 0 seconds passed
 
##########|| Post-processing ||################
 
========== Replacing text in /home/u46319/public/squeezenet1.1/squeezenet1.1.prototxt
========== Converting squeezenet1.1 to IR (FP32)
Conversion command: /usr/bin/python3 — /opt/intel/openvino_2020.4.287/deployment_tools/model_optimizer/mo.py –framework=caffe –data_type=FP32 –output_dir=/home/u46319/public/squeezenet1.1/FP32 –model_name=squeezenet1.1 ‘–input_shape=[1,3,227,227]’ –input=data ‘–mean_values=data[104.0,117.0,123.0]’ –output=prob –input_model=/home/u46319/public/squeezenet1.1/squeezenet1.1.caffemodel –input_proto=/home/u46319/public/squeezenet1.1/squeezenet1.1.prototxt
 
Model Optimizer arguments:
Common parameters:
   - Path to the Input Model: /home/u46319/public/squeezenet1.1/squeezenet1.1.caffemodel
   - Path for generated IR: /home/u46319/public/squeezenet1.1/FP32
   - IR output name: squeezenet1.1
   - Log level: ERROR
   - Batch: Not specified, inherited from the model
   - Input layers: data
   - Output layers: prob
   - Input shapes: [1,3,227,227]
   - Mean values: data[104.0,117.0,123.0]
   - Scale values: Not specified
   - Scale factor: Not specified
   - Precision of IR: FP32
   - Enable fusing: True
   - Enable grouped convolutions fusing: True
   - Move mean values to preprocess section: False
   - Reverse input channels: False
Caffe specific parameters:
   - Path to Python Caffe* parser generated from caffe.proto:/opt/intel/openvino_2020.4.287/deployment_tools/model_optimizer/mo/front/caffe/proto
   - Enable resnet optimization: True
   - Path to the Input prototxt: /home/u46319/public/squeezenet1.1/squeezenet1.1.prototxt
   - Path to CustomLayersMapping.xml: Default
   - Path to a mean file: Not specified
   - Offsets for a mean file: Not specified
Model Optimizer version:
[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file: /home/u46319/public/squeezenet1.1/FP32/squeezenet1.1.xml
[ SUCCESS ] BIN file: /home/u46319/public/squeezenet1.1/FP32/squeezenet1.1.bin
[ SUCCESS ] Total execution time: 3.79 seconds.
[ SUCCESS ] Memory consumed: 96 MB.

続いて、ジョブスクリプトを作成します。

%%writefile job.sh
pip3 install r benchmark_tool/requirements.txt
python3 benchmark_tool/benchmark_app.py ¥
  -m public/squeezenet1.1/FP32/squeezenet1.1.xml ¥
  -niter 100 ¥
  $*
echo completed
Overwriting job.sh

ノードにジョブを送ります。

今回はCPUデバイスでベンチマークを行うため、-d CPU オプションをbenchmark_appコマンド付けて実行しています。

実行環境として「Intel® Xeon® Gold 6258R」のCPUを持つノードを指定します。

# submit a job
job_id=!qsub l nodes=1:gold6258r job.sh F “-d CPU”
 
# generate log file name from job_id
print(‘job_id=’, job_id)
job_num = job_id[0].split(‘.’)[0]
log_file=‘job.sh.o’+job_num
err_file=‘job.sh.e’+job_num
print(‘log_file=’, log_file)
 
# wait for the job to complete
waitForJobCompletion(job_num)
job_id= [‘33207.v-qsvr-1.devcloud-edge’]
log_file= job.sh.o33207
Waiting for job
completion…RRRRRRRRRRRRRRRRRRRRRRRRRR…Job 33207 completed

※ 補足

 benchmark_app コマンドには以下のようなオプションが存在します。

option説明
-m PATH_TO_MODEL推論に使用するIRモデルファイルを指定(.xml)
-d TARGET_DEVICE推論デバイスを指定。CPU, GPU, MYRIAD, HDDL, HETERO: FPGA, CPUなどを指定可能
-niter NUMBER_ITERATIONS実行する推論数。省略すると1分間推論を行う
-nireq NUMBER_INFER_REQUESTS同時推論実行数。たとえば4を指定すると同じデバイスに推論要求を同時に4つ投げる。Throughputを上げるためにはデバイス特性に合った同時推論数を指定するのが肝要。省略するとbenchmark_appが自動的に推論デバイスに適切な同時推論数を使用。
-b BATCH_SIZEバッチ推論数
-i PATH_TO_INPUT推論に使用する入力画像ファイルを指定。benchmark_appでは省略可能(入力データなしでもベンチマーク可能)
-pcレイヤーごとの詳細実行レポートを表示。レイヤーごとの実行時間も含まれる

ベンチマーク結果を確認します。

os.environ[‘log_file’]=log_file
 
!grep ‘# Resources:’                    $log_file
!grep ‘¥[ INFO ¥] Device info’              A 3 $log_file
!grep ‘¥[Step 11/11¥] Dumping statistics report’  A 4 $log_file
# Resources:    neednodes=1:gold6258r,nodes=1:gold6258r,walltime=01:00:00
[ INFO ] Device info
      CPU
      MKLDNNPlugin………… version 2.1
      Build………………. 2020.4.0-359-21e092122f4-releases/2020/4
[Step 11/11] Dumping statistics report
Count:   112 iterations
Duration:     44.76 ms
Latency:    4.07 ms
Throughput:  2502.46 FPS

比較として、もう少しCPUのグレードが低いマシンでもベンチマークを実行してみます。

実行環境として「Intel® Core™ i7 8665UE」のCPUを持つノードを指定します。

# submit a job
job_id=!qsub l nodes=1:i78665ue job.sh F “-d CPU”
 
# generate log file name from job_id
print(‘job_id=’, job_id)
job_num = job_id[0].split(‘.’)[0]
log_file=‘job.sh.o’+job_num
err_file=‘job.sh.e’+job_num
print(‘log_file=’, log_file)
 
# wait for the job to complete
waitForJobCompletion(job_num)
job_id= [‘33208.v-qsvr-1.devcloud-edge’]
log_file= job.sh.o33208
Waiting for job completion…RRRRRRRRRRRRRRRRRRRRR…Job 33208 completed

結果を確認します。

os.environ[‘log_file’]=log_file
 
!grep ‘# Resources:’                    $log_file
!grep ‘¥[ INFO ¥] Device info’              A 3 $log_file
!grep ‘¥[Step 11/11¥] Dumping statistics report’  A 4 $log_file
# Resources:    neednodes=1:i7-8665ue,nodes=1:i7-8665ue,walltime=01:00:00
[ INFO ] Device info
      CPU
      MKLDNNPlugin………… version 2.1/td>
      Build………………. 2020.4.0-359-21e092122f4-releases/2020/4
[Step 11/11] Dumping statistics report
Count:   100 iterations
Duration:     277.07 ms
Latency:    11.22 ms
Throughput:  360.92 FPS

結果は赤枠の通りです。

異なるIntelマシンで実行されており、ベンチマークの結果が変わっていることが確認できました。

以上のように、DevCloudを使えば、とても簡単に各種Intelハードウェア上での実行や、モデルのベンチマークを行うことができ、製品開発のプロトタイプの検証を素早く行うことができます。

Intelハードウェアを用いた製品開発を行う際は、ぜひ活用してみてください。

■関連サービス

AIソリューション

オープンソースを活用したAIのシステム構築・開発を支援!

車両ナンバープレート検知全国版

車両のナンバープレートをAIが検知・処理!全国のナンバープレートに対応!

人数カウントBODY_ロゴ

カメラ撮影した映像から指定領域内の滞在人数をAIが認識!

人数カウントHEAD_ロゴ

密集した空間から指定領域内の滞在人数をAIが認識!

ラインクロスカウント

来店人数のカウントや通行量調査などを自動化!

pagetop