toolkit versionによるEMPyCustomの挙動の差異につきまして

62 views
Skip to first unread message

木下裕貴

unread,
Mar 24, 2023, 3:07:52 AM3/24/23
to EDGEMATRIX Stream Toolkit Forum
お世話になっております。
AMBLの木下です。

標記の通り、EMPyCustomを用いたアプリケーションの振る舞いがverで変わりましたので、対策をご教示いただければと思います。

振る舞いの詳細・比較は添付を参照ください。(表が貼れないのでキャプチャで貼ります)この時、アプリケーションは各環境間で完全に同じモノにしています。

ユーザーコードを変更せずに振る舞いが変わるので、環境要因と考えていますが、どういった方向から確認していけばよいでしょうか?
また、verupに伴い対応が必要な事項(display_text等) があればご教示いただけると幸いです。

別件ですが、v2.4 -> v2.3に戻す方法はございますか?
apt listには v2.4のみがあるので、ダウングレードできないのでは?と思っていますが。

----------------------------------------------------------------------------------
■環境
v2.3 : AIBox Light, toolkit version = 2.3.0b4 (from GUI About Info)
v2.4 : AIBox Light, toolkit version = 2.4.0b0 (from GUI About Info)

■v2.4環境のpolicy
edgematrix-stream:
  Installed: 2.10.6-4
  Candidate: 2.10.6-4
  Version table:
 *** 2.10.6-4 500
        500 https://apt.console.edgematrix.com/airbase/apt/debian qa/main arm64 Packages
        100 /var/lib/dpkg/status


toolkit_version_behavior_diff.png

ts...@edgematrix.com

unread,
Mar 24, 2023, 3:27:32 AM3/24/23
to EDGEMATRIX Stream Toolkit Forum, yuki.kin...@ambl.co.jp
お世話になっております。

emoverlayの広報互換性による違いは確認されていますが、
テンプレートの3DCNNがそのままで動かないということですね?

こちらでも環境が準備出来次第確認してみます。

> 別件ですが、v2.4 -> v2.3に戻す方法はございますか?

いえ。サービスボックスもv2.4へ移行していますので、戻すことはできません。

2023年3月24日金曜日 16:07:52 UTC+9 yuki.kin...@ambl.co.jp:

ts...@edgematrix.com

unread,
Mar 26, 2023, 7:19:16 PM3/26/23
to EDGEMATRIX Stream Toolkit Forum, yuki.kin...@ambl.co.jp
お世話になっております。

本件ですが、3DCNNがエラーになることと、signalにemcustomが入ってこないことからすると、
v2.5で修正されているv2.4のregressionに該当していると思われます。

nvinfer/empycustom/emcustomのintervalを0にするとこの問題は発生しないので、
ご確認ください。

非常に重たいアプリでfpsを下げても毎フレーム処理できないようなアプリの場合、
このintervalを大きな値にして、数秒〜数十秒に一回実施するためにこのような構成を使用しますが、
リリース済みのアプリでは混雑案内パッケージの群衆カウントアプリが該当したものの、
i-PROカメラのfps変動問題などの修正も考慮してv2.5向けのリリースとしています。

ちなみに、プロダクション環境でも特定のディストリビューションで利用可能ですので、
もし開発中のアプリでv2.5を先行で利用したい場合はご連絡ください。

2023年3月24日金曜日 16:27:32 UTC+9 ts...@edgematrix.com:

木下裕貴

unread,
Mar 27, 2023, 1:14:25 AM3/27/23
to EDGEMATRIX Stream Toolkit Forum, ts...@edgematrix.com, 木下裕貴
ご回答ありがとうございます。

>nvinfer/empycustom/emcustomのintervalを0にするとこの問題は発生しないので、

もし間違っていたら申し訳ないのですが、3DCNNを例にとりますと、
emi_stream_config.jsonの
["empycustom"]["process-interval"] = 0 とするという解釈で問題ないでしょうか?

上記を前提として、3DCNNに対して以下2点試してみましたが、
何れも signalに "emcustom" が存在しないという結果でした。
→ 外側の動きとしてはupload actionが発生しないので、前回の調査結果と同じです。

--- 調査内容 ---------------------------------------------------------------
■環境
AIBox (Light), toolkit version = 2.4.0b0
Application : 3DCNN
end_user_stream.json へ、 probability >= 0 の時 uploadするように設定

① 3DCNNの"process-interval" = 0 とする
  stream.log : Resulting JSON object: {'frame': [{'frame_num': 895, 'buf_pts': 89625076468, 'timestamp': '2023-03-27T13:26:41.585+0900', 'frame_width': 640, 'frame_height': 360, 'object': []}]}
→ "emcustom" は存在しない

  terminal (Gst.debug) :
    INFO:toolkit:[gstd] 0:01:52.148529096 10002   0x7f5c003190 DEBUG                 python video_classification.py:115:process_ip: mapping a buffer
    INFO:toolkit:[gstd] 0:01:52.148687016 10002   0x7f5c003190 DEBUG                 python video_classification.py:118:process_ip: frame_meta = {'frame_num': 895, 'buf_pts': 89625076468, 'ntp_timestamp': 1679891198399293000, 'source_frame_width': 1280, 'source_frame_height': 720, 'num_surfaces_per_frame': 1, 'object': []}
    INFO:toolkit:[gstd] 0:01:52.148737903 10002   0x7f5c003190 DEBUG                 python video_classification.py:124:process_ip: creating an array of (w,h) = (640, 360)
    INFO:toolkit:[gstd] 0:01:52.185542509 10002   0x7f5c003190 DEBUG                 python video_classification.py:145:process_ip: running an infernce on an array of torch.Size([1, 3, 16, 112, 112]) at cuda:0
    INFO:toolkit:[gstd] 0:01:52.210532778 10002   0x7f5c003190 DEBUG                 python video_classification.py:147:process_ip: inference result of torch.Size([1, 400])
    INFO:toolkit:[gstd] 0:01:53.775689544 10002   0x7f5c003190 DEBUG                 python video_classification.py:150:process_ip: topk = marching(tensor([[20.4992]], device='cuda:0') at tensor([[192]], device='cuda:0'))
    INFO:toolkit:[gstd] 0:01:53.775992676 10002   0x7f5c003190 DEBUG                 python video_classification.py:162:process_ip: removed the first item, cuda_list size = 15
    INFO:toolkit:[gstd] 0:01:53.776716235 10002   0x7f5c003190 DEBUG                 python video_classification.py:164:process_ip: cuda memory allocated, list size = 141879808, 15
    INFO:toolkit:[gstd] 0:01:53.776758475 10002   0x7f5c003190 DEBUG                 python video_classification.py:168:process_ip: unmapping a buffer
    INFO:toolkit:[gstd] 0:01:53.777022492 10002   0x7f5c003190 WARN                  python gstempycustom.py:468:_add_emcustom_meta_to_buffer: Ignoring invalid JSON string
→ 推論は実行されているが、Ignoring invalid JSON string が発生している
   ※3DCNNのコードは未編集

→  out_metaの形式が良くない?
   Ignoringが発生しないように out_metaを変形 (out_meta_str = json.dumps(out_meta_dict))

② ① + out_meta変形処理追加
  stream.log : Resulting JSON object: {'frame': [{'frame_num': 929, 'buf_pts': 93026727060, 'timestamp': '2023-03-27T13:33:52.195+0900', 'frame_width': 640, 'frame_height': 360, 'object': []}]}
→ "emcustom" は存在しない

  terminal (Gst.debug) :
    INFO:toolkit:[gstd] 0:01:56.936531866 10538   0x7f703a1b20 DEBUG                 python video_classification.py:115:process_ip: mapping a buffer
    INFO:toolkit:[gstd] 0:01:56.936912551 10538   0x7f703a1b20 DEBUG                 python video_classification.py:119:process_ip: frame_meta = {'frame_num': 929, 'buf_pts': 93026727060, 'ntp_timestamp': 1679891629034057000, 'source_frame_width': 1280, 'source_frame_height': 720, 'num_surfaces_per_frame': 1, 'object': []}
    INFO:toolkit:[gstd] 0:01:56.937097659 10538   0x7f703a1b20 DEBUG                 python video_classification.py:125:process_ip: creating an array of (w,h) = (640, 360)
    INFO:toolkit:[gstd] 0:01:56.989251095 10538   0x7f703a1b20 DEBUG                 python video_classification.py:145:process_ip: running an infernce on an array of torch.Size([1, 3, 16, 112, 112]) at cuda:0
    INFO:toolkit:[gstd] 0:01:57.013707596 10538   0x7f703a1b20 DEBUG                 python video_classification.py:147:process_ip: inference result of torch.Size([1, 400])
    INFO:toolkit:[gstd] 0:01:58.637588570 10538   0x7f703a1b20 DEBUG                 python video_classification.py:150:process_ip: topk = dancing_gangnam_style(tensor([[16.2151]], device='cuda:0') at tensor([[86]], device='cuda:0'))
    INFO:toolkit:[gstd] 0:01:58.637871961 10538   0x7f703a1b20 DEBUG                 python video_classification.py:162:process_ip: removed the first item, cuda_list size = 15
    INFO:toolkit:[gstd] 0:01:58.638653592 10538   0x7f703a1b20 DEBUG                 python video_classification.py:164:process_ip: cuda memory allocated, list size = 141879808, 15
    INFO:toolkit:[gstd] 0:01:58.638712656 10538   0x7f703a1b20 DEBUG                 python video_classification.py:168:process_ip: unmapping a buffer
    INFO:toolkit:[gstd] 0:01:58.641739647 10538   0x7f703a1b20 DEBUG                 python gstempycustom.py:404:do_transform_ip: transform_ip
    INFO:toolkit:[gstd] 0:01:58.641820117 10538   0x7f703a1b20 LOG                   python gstempycustom.py:429:do_transform_ip: Skipping buffer processing
    INFO:toolkit:[gstd] 0:01:58.644301784 10538   0x7f703a1b20 DEBUG                 python gstempycustom.py:404:do_transform_ip: transform_ip
    INFO:toolkit:[gstd] 0:01:58.644399806 10538   0x7f703a1b20 LOG                   python gstempycustom.py:429:do_transform_ip: Skipping buffer processing
→ 推論は実行され、out_metaのverifyは正常
→ upload が実施されてない

------------------------------------------------------------------

また、以前ご相談させていただいた件と関連するのですが、
EMPyCustomへかなり重たい処理を実装した際、イベント処理が間に合わずメモリリークするという話だったかと思います。

v2.4で動作させるために0にする場合、同様の処理負荷問題が再発すると思いますが、
どのような処置をすればよいでしょうか?
※上記①②の3DCNNはprocess-interval = 0 としたとき20frameで動作していましたが、20frameが厳しい場合を想定しています。


2023年3月27日月曜日 8:19:16 UTC+9 ts...@edgematrix.com:

Takenori Sato

unread,
Mar 27, 2023, 8:54:35 PM3/27/23
to 木下裕貴, EDGEMATRIX Stream Toolkit Forum
お世話になっております。

> 3DCNNを例にとりますと、
> emi_stream_config.jsonの
> ["empycustom"]["process-interval"] = 0 とするという解釈で問題ないでしょうか?

はい。問題ありません。
ただ前述の同期ずれの場合は2つ以上のprimary/secondaryとemcustom/empycustomが存在している場合なので、
3DCNN自体には無関係でした。

> 上記を前提として、3DCNNに対して以下2点試してみましたが、
> 何れも signalに "emcustom" が存在しないという結果でした。

ご確認ありがとうございました。

jsonのエラーはご指摘の通りで、jsonのチェックを厳格にしているので、
正しくjsonに変換する必要があるバグです。

> → upload が実施されてない

正常動作していればオーバーレイが表示されているはずですが、
いかがでしょうか?

> また、以前ご相談させていただいた件と関連するのですが、
> EMPyCustomへかなり重たい処理を実装した際、イベント処理が間に合わずメモリリークするという話だったかと思います。

リークではなく、単純に推論が間に合わないのでqueueが増大している状態です。

> v2.4で動作させるために0にする場合、同様の処理負荷問題が再発すると思いますが、
> どのような処置をすればよいでしょうか?

どのアプリも指定または推奨fps設定してもらい、
アプリケーションの推論性能に合うようfpsを下げてもらっています。


木曜日には動作確認できると思いますので、
その後アップデートさせていただきます。

2023年3月27日(月) 14:14 木下裕貴 <yuki.kin...@ambl.co.jp>:
Reply all
Reply to author
Forward
0 new messages