MIMRT700(NPUモデル)上で、サンプルtflm_cifar10のモデルを実行しました。プログラムを作成する際、モデルのサイズとそれに対応する領域のサイズを確認することができました。
多くの場合、領域のサイズは1MBです。私の理解では、モデルのサイズは1MBに制限されています。それで合っていますか?
この点が理解できませんでした。MIMRT700 EVKに関する情報は以下のとおりです。
MIMRT700 EVKのどこにモデルが保存されているのか分かりません。では、領域サイズとして1MBというのはどこにあるのでしょうか?これはモデルサイズの実際の制限ですか?あるいは、いくつかの方法でモデルのサイズを大きくすることもできます。
この問題について何かご意見はありますか?1MBを超えるより大きなモデルをデプロイしようとしているからです。ご返信をお待ちしております。ありがとう。
どうもありがとう。領域サイズを設定することで、モデルのサイズを大きくできるということが分かりました。
または、外部メモリでより大きなモデルを実行したい場合は、こちらのドキュメントを参照してください。https://docs.nxp.com/bundle/AN14700/page/topics/external_memory.html
こんにちは、 @nnxxpp さん。
弊社製品にご関心をお寄せいただき、また弊社のコミュニティをご利用いただき、誠にありがとうございます。
Q: MIMRT700 EVK のどこにモデルが保存されているのか分かりません。では、領域サイズとして1MBというのはどこにあるのでしょうか?これはモデルサイズの実際の制限ですか?あるいは、いくつかの方法でモデルのサイズを大きくすることもできます。
この問題について何かご意見はありますか?1MBを超えるより大きなモデルをデプロイしようとしているからです。
A:modeldataに表示されている1MBは、RT700のハードウェア上の制限ではありません。
これはサンプルプロジェクトで使用されているデフォルトのリンカー割り当てにすぎません。
より大型のモデルの場合、この割り当てはプロジェクト設定で調整でき、さらにストレージが必要な場合は外部XSPIフラッシュを使用することもできます。
より詳細な情報については、AN14700を参照してください。
https://docs.nxp.com/bundle/AN14700/page/topics/introduction.html
つまり、RT700は本来1MBモデルに限定されるものではない。より大規模なNPUモデルは、モデルデータメモリの割り当てを増やすか、適切な変換オプションを使用してモデルを外部XSPIフラッシュに配置することによってサポートされます。
お役に立てれば幸いです。
よろしくお願いいたします。
メイ・リウ
この話題をもう一度開きたいと思います。今はRT700でより大きなモデルを展開しようとしています。下の画像は、小型モデルでプログラムを構築する際にキャプチャしたものです。
メモリ領域が4つあることが分かりました。
- QSPI_flash: 外部メモリ
- SRAM: chatgpt に問い合わせたところ、プログラム実行時のデータ (.data、.bss、スタック、ヒープ)。それは正しいですか?
- NCACHE_REGION: 入力、中間出力、出力すべてにおいて、同じktensorArenaを使用します。
- モデルデータ:モデルの重みを節約するため
SDKの例をインポートするとメモリ構成で確認できます。これは、SRAM、NCACHE_REGION、およびSRAMからのモデルデータ(7.5 MB)を意味します。
NCACHE_REGIONとモデルデータは 0x2000_0000 から 0x2058_0000(5.5MB)に配置されるべきで、NPUがアクセス可能な最適なSRAM領域を得ることができます。
しかし、SRAM(SRAMと命名)の位置は0x20080000 (2番目の画像)です。==> また、 0x2000_0000から0x2058_0000の範囲にもあります。デフォルトでは約2.5MBに設定されています。つまり、 NCACHE_REGION + modeldata は(5.5 - 2.5) = 3 MB 未満でなければならないということです。
私のモデルサイズは約3.5MBです。それに加えて、モデルを外部メモリ上で特定できる(推論時間が長くなります)が、NPUがアクセスできるメモリ領域(3.5MB)にモデルを配置する方法はどうすればいいのでしょうか?
画像1、2の「SRAM」領域を縮小できるのか、それとも別のRAMエリア(7.5 - 5.5 = 2 MB - 画像3の最後の領域)に移動できるのか気になっています。
そして「SRAM」領域の大きさをどうやって推定すればいいのでしょうか?下の画像では15560 Bです。
質問が長くてすみません。