エッジデバイスへの迅速なディープラーニングの展開 - MATLAB & Simulink

技術情報

マイクロコントローラで小型ニューラルネットワークを展開する生産的なプロセス

著者 Danilo Pau 氏 (STMicroelectronics) と Brenda Zhuang (MathWorks)


「MATLAB と Simulink の製品に加え、STMicroelectronics のエッジ AI ツールを基盤としたこのフレームワークは、チームがディープラーニングとエッジ展開の専門知識を迅速に向上させるのを支援します。これにより、tinyML でよく直面する課題を克服できるようになります。」

機械学習やディープラーニングのアプリケーションは、クラウドからデータの発生元に近い組み込みデバイスへと移行されるケースが増えています。エッジ コンピューティング市場が急速に拡大する中、スケーラビリティ、リアルタイム AI アプリケーションの需要増加、堅牢で生産性の高いソフトウェア ツールチェーンを補完する低コストのエッジデバイスの可用性など、いくつかの要因がエッジ AI の成長を促進しています。さらに、セキュリティ上の理由から、または単に通信コストを最小限に抑えるため、ネットワーク経由でデータを送信しないようにする必要があります。

エッジ AI には、比較的強力なエッジサーバーや IoT モジュールを含む、幅広いデバイス、センサー、マイクロコントローラー、チップ上のマルチマイクロプロセッサー、アプリケーション プロセッサー、専用システム オン チップが含まれます。参照コミュニティ、2019 年に設立されたリファレンス コミュニティである tinyML Foundation は、メモリ、処理能力、エネルギー消費枠がわずかしかない非常にリソースが制限された組み込みデバイス上で、機械学習モデルを開発して展開することに注力しています。tinyML は、安価なバッテリーや小型のソーラーパネルで電力を供給できるアプリケーションや、低コストのハードウェア上でローカルにデータを処理する大規模なアプリケーションなど、ユニークな機会をもたらします。もちろん、tinyML にはさまざまな課題もあります。こうした課題の 1 つは、機械学習と組み込みシステムの開発者がアプリケーションのパフォーマンスとフットプリントを最適化する必要があることです。これには、AI と組み込みシステムの両方に精通している必要があります。

このような背景から、この記事では、エッジデバイス上でディープ ニューラル ネットワークを設計および展開するための実用的なフレームワークについて説明します。MATLAB® と Simulink® の製品に加え、STMicroelectronics® のエッジ AI ツールを基盤としたこのフレームワークは、チームがディープラーニングとエッジ展開の専門知識を迅速に向上させるのを支援します。これにより、tinyML でよく直面する課題を克服できるようになります。これにより、概念実証用の tinyML アプリケーションを迅速に構築し、ベンチマークできるようになります。ワークフローの最初のステップでは、チームはMATLAB を使用してディープラーニング ネットワークを構築し、ベイズ最適化でハイパーパラメーターを調整し、知識蒸留を使用し、プルーニングと量子化でネットワークを圧縮します。最終段階では、開発者は ST Edge AI Developer Cloud に統合された ST Edge AI Core Technology を使用します。ST Edge AI Developer Cloud は、STMicroelectronics の 32 ビット (STM32、Stellar) マイクロコントローラおよびマイクロプロセッサ、ならびに AI 統合したセンサー上で AI を開発するための無料オンラインサービスです。このサービスを利用して、展開されたディープラーニング ネットワークのリソース利用率と推論速度をベンチマークします (図1)。

データ収集からマイクロコントローラやエッジデバイスへの展開まで、tinyML モデルを学習させてエッジデバイスに展開するために使用される反復的な手順を示すワークフロー。

図 1. ディープラーニング ネットワークをマイクロコントローラとエッジデバイスに展開するための反復ワークフロー。フィードバック ループは、より正確でより微細なモデルの形成に役立ちます。

ネットワーク設計、学習、ハイパーパラメーターの最適化

エンジニアがディープラーニングアプリケーションで使用するデータセットを収集、前処理、準備した後の次のステップは、候補モデルの学習と評価です。これには、NASNet、SqueezeNet、Inception-v3、ResNet-101 などの事前学習済みモデルや、機械学習エンジニアがディープネットワークデザイナーアプリを使ってインタラクティブに構築したモデルが含まれます(図2)。いくつかのモデルは、開発をすぐに開始するために使用できる例を提供しており、その中には、画像、ビデオライダー点群分類、物体検出姿勢推定波形セグメンテーションなどが含まれます。

複数のモデルをどのように学習、評価させるかを示すディープ ネットワーク デザイナー アプリのスクリーンショット。

図 2. ディープ ネットワーク デザイナー アプリでは、デザイナー パネルにネットワークの複数のレイヤーが表示されます。

ディープラーニング ネットワークのパフォーマンスは、学習を制御するパラメーターとネットワーク アーキテクチャを記述するパラメータの両方に大きく依存します。これらハイパーパラメーターの例には、学習率とバッチサイズ、レイヤーの数、レイヤーの種類、レイヤー間の接続などが含まれます。適切なハイパーパラメーター調整により、tinyML アプリケーションが実行されるリソースが制限された環境でも、より高い精度と優れたパフォーマンスを実現するモデルを実現できます。ただし、ハイパーパラメーター値を選択して微調整し、パフォーマンスを最適化する組み合わせを見つけるのは、困難で時間のかかる作業になる可能性があります。

ベイズ最適化は、高次元のハイパーパラメーター空間を効率的に探索して最適またはほぼ最適な構成を見つけるため、分類と回帰の両方のディープラーニング ネットワークのハイパーパラメーター最適化に適しています。MATLAB では、機械学習開発者がベイズ最適化を用いて最適なハイパーパラメーター値を見つけるために、bayesopt 関数を使用できます。たとえば、畳み込み層の数、初期学習率、運動量、L2 正則化など、評価するハイパーパラメーターのセットと、検証エラーなどの最小化する目的関数を提供できます。この関数は、bayesopt ワークフローの次のフェーズでさらに詳しく調べるために、1 つ以上のハイパーパラメータ構成セットを選択します。

知識蒸留

リソースが制限された組み込みデバイスでは、使用できるメモリが限られています。知識蒸留は、高い精度を維持しながらディープラーニング ネットワークのフットプリントを削減する 1 つのアプローチです。この手法では、より大規模でより正確な教師ネットワークを使用して、より小規模な生徒ネットワークに予測を行うように学習させます。重要なのは、教師と生徒のネットワーク アーキテクチャにおける損失関数を選択することです。

前のステップで学習させたネットワークは、教師モデルとして使用できます。生徒ネットワークは、教師モデルより規模は小さいですが類似したバージョンです。通常、生徒モデルでは、convolution-batchnorm-ReLU ブロックが少なくなります。次元の減少を考慮するために、最大プーリング層またはグローバル平均プーリングが生徒ネットワークに追加されます。これらの変更により、教師ネットワークと比較して学習可能な項目の数が大幅に削減されます。

生徒ネットワークを学習させるには、知識蒸留の損失関数を定義する必要があります。これは、生徒ネットワーク、教師ネットワーク、対応するターゲットを持つ入力データ、および温度ハイパーパラメータの入力から決定されます。経験的に、損失関数は、1) ハード損失 (生徒ネットワーク出力と実際のラベル間のクロスエントロピー損失) と、2) ソフト損失 (生徒ネットワーク ロジットと教師ネットワークのロジット間の温度付き SoftMax のクロスエントロピー損失) の加重平均で構成されます。

学習させた生徒ネットワークは、教師ネットワークからの精度をより適切に維持し、学習可能なパラメーターの削減を実現するため、組み込みデバイスへの展開により適したものになります。

モデルの圧縮と最適化

学習フェーズでの効率的な設計とハイパーパラメーターの最適化は重要な最初のステップですが、エッジデバイスへの展開を保証するにはそれだけでは不十分です。したがって、モデルのプルーニングと量子化による学習後の最適化は、ディープ ニューラル ネットワークのメモリ フットプリントと計算要件をさらに削減する上で重要です。

ネットワーク圧縮の最も効果的な方法の 1 つは量子化です。これは、大容量センサーが浮動小数点表現を出力することはないため、データが整数精度で取得されるためです。量子化の目的は、ネットワークのパラメーターを保存するために必要なメモリフットプリントを削減し、モデルの重みとアクティベーションを少ないビット数で表現することで計算速度を向上させることです。これには、たとえば、32 ビットの浮動小数点数を 8 ビットの整数に置き換えることが含まれます。これも、可能であれば、予測の精度がわずかに低下するだけで済みます。量子化により、組み込みメモリを節約して使用できるようになります。これは、エッジのリソースが制限されたセンサー、マイクロコントローラ、マイクロプロセッサ (図 3) にとって非常に重要です。さらに、整数演算は一般にハードウェア上では浮動小数点演算よりも高速であるため、マイクロコントローラでの推論パフォーマンスが向上します。これにより、モデルの消費電力が低減し、携帯電話や IoT デバイスなどのバッテリー駆動型またはエネルギー制限のあるデバイスへの展開にさらに適したものになります。学習後の量子化により精度が多少低下することが予想されますが、 MATLABの量子化ツールはモデルの精度への影響を最小限に抑えるように設計されています。量子化モデルのパフォーマンスを維持するために、微調整やキャリブレーションなどの手法が使用されます。MATLAB では、dlquantizer 関数を使用することで、ディープ ニューラル ネットワークの重み、バイアス、アクティベーションを 8 ビットの整数値に量子化するプロセスを簡素化できます。

オリジナルモデル、プルーニングモデル、量子化モデルのそれぞれに必要なパラメーターメモリのレベルを示すグラフ。

図 3. MATLABプルーニングと量子化後のディープ ニューラル ネットワークのメモリ フットプリント。

対照的に、プルーニング技術は、運用上の冗長性を最小限に抑えることでネットワークの複雑さを軽減することに重点を置いています。これは計算の複雑さを大幅に削減するための基本です。この考え方は、ネットワークの予測にほとんど影響を与えない接続、重み、フィルター、またはレイヤー全体を識別して削除することです。射影は、重要度の低い重みや接続を選択的に削除することでニューラル ネットワークを最適化するために使用される独自のMATLAB手法です。このプロセスによりモデルの複雑さが軽減され、パフォーマンスを大幅に損なうことなく、モデルのサイズが小さくなり、推論時間が短縮されます。通常のプルーニングでは、一般的にしきい値に基づいて低い重みを単純に削除しますが、射影では、ネットワークの重要な機能が保持されるように、より洗練された基準と方法が組み込まれる場合があります。さらに、射影は多くの場合、重み空間の幾何学的特性を維持することを目的としており、従来のプルーニング方法と比較して、より効率的で堅牢なモデルにつながる可能性があります。

ST Edge AI Developer Cloud のベンチマーク

MATLABで初期ネットワーク設計、ハイパーパラメータの最適化、蒸留、圧縮を完了した後、ワークフローの次のステップは、マイクロコントローラまたはマイクロプロセッサ上でその設計のパフォーマンスを評価することです。具体的には、エンジニアは、ネットワークのフラッシュと RAM の要件、および推論速度などの要素を評価する必要があります。

ST Edge AI Developer Cloud は、ST Edge デバイス上のネットワークの迅速なベンチマークを可能にすることで、ワークフローのこの段階を効率化するように設計されています。MATLAB で開発された tinyML アプリケーションでこのサービスを使用するには、まずネットワークを ONNX 形式にエクスポートします。生成された ONNX ファイルを ST Edge AI Developer Cloud にアップロードした後、エンジニアはベンチマークを実行する ST デバイスを選択できます (図 4)。

さまざまな ST デバイスのオプションを選択できる ST Edge AI Developer Cloud インターフェースのスクリーンショット。

図 4. ST Edge AI Developer Cloud ユーザー インターフェースでベンチマークに使用できるデバイス。

ベンチマークが完了すると、ST Edge AI Developer Cloud は結果の詳細を示すレポートを提供します (図 5)。ST Edge AI Developer Cloud が提供するパフォーマンス分析ツールは、メモリ使用量、処理速度、リソース使用率、モデルの精度など、さまざまな詳細な分析情報を提供します。開発者は、モデルのさまざまなレイヤーとコンポーネントのメモリ割り当ての内訳とともに、RAM とフラッシュ メモリの消費量に関する情報を受け取ります。さらに、ツールは各レイヤーの実行時間と全体的な推論時間を提供し、遅い操作を特定して最適化するための詳細なタイミング分析も提供します。CPU およびハードウェア アクセラレータの使用状況や電力消費メトリックなどのリソース使用率統計は、エネルギー効率の最適化に役立ちます。

ベンチマーク セッションの結果を示す ST Edge AI Developer Cloud レポートのスクリーンショット。

図 5. ST Edge AI Developer Cloud での一般的なベンチマーク セッションの結果。

ベンチマーク結果を確認した後、エンジニアは次のステップに最適な行動方針を特定できます。ネットワーク設計が、推論時間が短い特定のエッジデバイスの制約内にうまく収まる場合は、より小型のデバイスを使用するか、やや大規模で複雑なネットワークを使用して予測精度を向上させる機会を模索する可能性があります。一方、ネットワーク設計が大きすぎて、外部フラッシュまたは RAM の使用により推論時間が遅くなる場合、チームはより多くのフラッシュと RAM が組み込まれた、より計算能力の高いデバイスを探すか、 MATLABを使用して追加のハイパーパラメーターの最適化、知識蒸留、プルーニング、量子化の反復を実行して、ネットワークをさらに圧縮する場合があります。ST Edge AI Developer Cloud は、ST デバイスへの AI モデルの展開を効率化するための自動コード生成も提供します。この機能は、学習済みの AI モデルを、STMicroelectronics のセンサー、マイクロコントローラ、マイクロプロセッサと互換性のある最適化された C コードに変換します。

ベンチマークから展開まで

ワークフローの最後のステップは、センサー、マイクロコントローラ、またはマイクロプロセッサへの展開です。ベンチマーク結果をもとに、エンジニアはプラットフォームの選定について十分な情報に基づいた判断を下すことができます。たとえば、tinyML アプリケーションを実際のハードウェアで評価するために STM32 Discovery Kit を選ぶことが考えられます。

アプリケーションによっては、展開前にディープ ニューラル ネットワークをコントローラーなどの他のコンポーネントと統合し、より大きなシステムに組み込む必要がある場合があります。これらのユースケースでは、ワークフローをさらに拡張して、Simulink で他のコンポーネントをモデル化し、システムレベルのシミュレーションを実行して設計を検証し、Embedded Coder® と STM32 に対応する Embedded Coder を使用して STM32 デバイスに展開するための C / C ++ コードを生成することができます。

公開年 2024

関連する機能の記事を見る

関連する産業分野の記事を見る