TFLM modelrunnerのHTTPを使って、FRDM MCXN947(CPUとNPU)で多数のtfliteモデル(<500KBサイズ)をベンチマークしたいと思っています。
問題は、CPU推論がすべてのモデルで機能せず、NPU推論も全く機能しないことです。
ハードウェア:
- FRDM-MCXN947開発ボード(USBとイーサネットでWindowsマシンにコネクテッド)
ソフトウェアとツールのセットアップ:
- ホスト:Windows 11マシン
- eIQ Neutron SDK: eiq-neutron-sdk-windows-3.0.1
- MCUXpresso SDKs:SDK_26_03_00_FRDM-MCXN947
- SDKsからのプロジェクト:frdmmcxn947_tflm_modelrunner_cm33_core0
CPU推論のためのMLモデル:
- ad01_int8.tflite
- kws_ref_model.tflite
- pretrainedResnet_quant.tflite
- vww_96_int8.tflite
Neutronコンバータ(eIQ Neutron SDKの一部)で変換されたNeutronのMLモデル(NPU推論用):
eiq-neutron-sdk-windows-3.0.1\bin
neutron-converter --target mcxn94x --input ad01_int8.tflite --output ad01_int8_converted_3_0_1.tflite
- ad01_int8_converted_3_0_1.tflite
- kws_ref_model_converted_3_0_1.tflite
- pretrainedResnet_quant_converted_3_0_1.tflite
- vww_96_int8_converted_3_0_1.tflite
実施されたステップ
1. 最新のeIQ Neutron SDKライブラリでeIQプロジェクトを更新する
コピー先:
eiq-neutron-sdk-windows-3.0.1\target\mcxn94x\common\include\NeutronErrors.h
eiq-neutron-sdk-windows-3.0.1\target\mcxn94x\driver\include\NeutronDriver.h
eiq-neutron-sdk-windows-3.0.1\target\mcxn94x\mcxn\libNeutronDriver.a
eiq-neutron-sdk-windows-3.0.1\target\mcxn94x\mcxn\libNeutronFirmware.a
に:
frdmmcxn947_tflm_modelrunner_cm33_core0\include\NeutronErrors.h
frdmmcxn947_tflm_modelrunner_cm33_core0\driver_include\NeutronDriver.h
frdmmcxn947_tflm_modelrunner_cm33_core0\mcxn\libNeutronDriver.a
frdmmcxn947_tflm_modelrunner_cm33_core0\mcxn\libNeutronFirmware.a
2. vscodeを使用してプロジェクト「frdmmcxn947_tflm_modelrunner_cm33_core0」をビルドしてフラッシュします。
3. フラッシュ済みのTFLM Modelrunnerを使用してHTTP経由で推論を実行します。
指示:
curl -X PUT http://192.168.178.75:10818/v1-F "block_content=@C:\
シリアルモニター経由の出力:
....
実行時間: 6.167000ms
指示:
curl -X PUT http://192.168.178.75:10818/v1-F "block_content=@C:\
シリアルモニター経由の出力:
....
実行時間: 182.042000ms
他のモデルでは動作しません
出力:
a) フラッシュ後の推論なし:
FLASH 0x104000 消去、プログラム at 104000: 16384 bytes ==
フラッシュ0x108000消去済み、プログラム108000:16384バイト ==
フラッシュ0x10c000 消去、プログラム10c000:16384バイト ==
FLASH 0x110000 消去、プログラム 110000 で:16384バイト ==
フラッシュ0x114000消去済み、プログラム114000:16384バイト ==
FLASH 0x118000 消去、プログラム118000:16384バイト ==
フラッシュ0x11c000消去、プログラム11c000:16384バイト ==
FLASH 0x120000 消去、プログラム at 120000: 16384バイト ==
FLASH 0x124000 消去済み、プログラム124000:16384バイト ==
FLASH 0x128000 消去、プログラム at 128000: 16384 bytes ==
フラッシュ0x12c000消去、プログラム12c000:16384バイト ==
FLASH 0x130000 消去、プログラム at 130000: 16384 bytes ==
フラッシュ0x134000消去済み、プログラム134000:16384バイト ==
FLASH 0x138000 消去、プログラム 138000:544バイト ==
b) フラッシュ処理が全くありません
c) 誤HardFault_Handler
343行目: ldr r0,=HardFault_Handler
で
SDK_26_03_00_FRDM-MCXN947\mcuxsdk\devices\MCX\MCXN\MCXN947\gcc\startup_MCXN947_cm33_core0.S
デバッガーによって停止されました
どんなヒントでも大歓迎です!
こんにちは、 @Laurens26さん
問題は純粋な「モデルサイズ」の問題というよりも、バージョンの整合性が混ざっている可能性が高いと思います。
このリンクを参照してもいいと思います。
最新のeIQ Neutron SDKライブラリでeIQプロジェクトを更新する方法
BR
ハリー