第17章. モデルとバイナリーのサイズを最適化する
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
どのプラットフォームを選ぶにせよ、フラッシュストレージとRAMは非常に限られたものになるだろう。ほとんどの組込みシステムでは、フラッシュの読み取り専用ストレージは1MB未満で、多くは数十キロバイトしかない。メモリについても同様で、512KB以上のスタティックRAM(SRAM)が利用できることはめったになく、ローエンドのデバイスではこの数字は1桁台前半になる可能性がある。TensorFlow Lite for Microcontrollersは、わずか20KBのフラッシュと4KBのSRAMで動作するように設計されているが、アプリケーションを注意深く設計し、フットプリントを低く抑えるためにエンジニアリングのトレードオフを行う必要がある。この章では、メモリとストレージの要件を監視し、制御するために使用できるいくつかのアプローチについて説明する。
システムの限界を理解する
ほとんどの組み込みシステムは、プログラムやその他の読み取り専用データをフラッシュメモリにストアし、新しい実行可能ファイルがアップロードされたときにのみ書き込まれるアーキテクチャを採用している。通常は、SRAM技術を使った変更可能なメモリも用意されている。これは大型CPUのキャッシュに使われているのと同じ技術で、低消費電力で高速アクセスが可能だが、サイズに制限がある。より高度なマイクロコントローラーは、ダイナミックRAM(DRAM)のような、消費電力は大きいが拡張性のある技術を使った、第2層の変更可能なメモリーを提供することができる。
潜在的なプラットフォームが何を提供し、トレードオフが何であるかを理解する必要がある。例えば、多くのセカンダリDRAMを搭載したチップは、その柔軟性から魅力的かもしれないが、その追加メモリを有効にすることで電力予算が超過してしまうのであれば、その価値はないかもしれない。本書が注目する1mW以下の電力範囲で演算子を使用する場合、SRAM以上のものを使用することは通常不可能である。つまり、考慮すべき2つの重要なメトリックは、フラッシュの読み取り専用ストレージがどれだけ利用可能か、そしてSRAMがどれだけ利用可能かということである。これらの数値は、あなたが見ているチップの説明にリストされているはずだ。願わくば、データシートの「ハードウェアの選択」まで深く調べる必要はないだろう。
メモリ使用量を見積もる
ハードウェアの選択肢について考えがまとまったら、ソフトウェアが必要とするリソースと、その要件をコントロールするためにできるトレードオフについて理解を深める必要がある。
フラッシュの使用
通常、フラッシュに必要な容量は、完全な実行ファイルをコンパイルして、できあがったイメージのサイズを見れば、正確に判断できる。というのも、リンカが最初に生成する成果物は、デバッグシンボルやセクション情報を含む、ELFのような形式の実行ファイルの注釈付きバージョンであることが多いからだ(これについては「コードサイズの測定」で詳しく説明する)。あなたが見たいのは、実際にデバイスにフラッシュされるファイルであり、多くの場合、objcopy のようなツールによって生成される。必要なフラッシュ・メモリの量を測るための最も簡単な式は、以下の要素の合計である:
- オペレーティングシステムのサイズ
-
何らかのリアルタイム・オペレーティング・システム(RTOS)を使っている場合、実行ファイルにそのコードを格納するスペースが必要になる。フットプリントを見積もる最も簡単な方法は、必要な機能を有効にしたサンプル「hello ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access