matlab-deploy-embedded-ai について
MATLAB R2026aを使い、MATLAB製および外部フレームワーク製のニューラルネットワークを組み込みハードウェアへ展開するスキルです。モデル形式とターゲットに応じた圧縮、Simulinkシミュレーション、コード生成の手順を扱います。
主な機能
- 01MATLABネットワークのコード生成ワークフロー
- 02PyTorchとLiteRTからの直接コード生成
- 03量子化、枝刈り、射影圧縮
- 04Simulinkシステムシミュレーション連携
- 05リソース制約のあるターゲット向けコード生成
活用シーン
- 01組み込みターゲット向けCまたはCUDAコード生成
- 02ハードウェア制約に合わせたモデル圧縮
- 03コード生成前のSimulinkでの推論検証
- 04外部モデルの展開ワークフロー選択
MCP 対応
MATLAB and Simulink Agentic Toolkitsを使用し、MCPツール経由で稼働中のMATLABおよびSimulinkセッションを操作します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-deploy-embedded-aiインストール後、Claude Code で/matlab-deploy-embedded-aiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/pattern1/codegen-embedded.mdcompression-classical-ml.mdcompression-decision.mdcompression-projection.mdcompression-pruning.mdcompression-quantization.mdcompression.mdcustom-layers-codegen.mddata-preparation.mdnative-rebuild-patterns.mdnative-rebuild-preparation.mdplaceholder-blocks.mdsimulink-integration.mdtroubleshooting.mdworkflow.mdreferences/pattern2/architecture-patterns.mdcoder-configuration.mdpytorch-export.mdtroubleshooting.mdverification-testing.mdworkflow.mdreferences/shared/ai-verification.mdenvironment-setup.mdproject-discovery.md詳細
エンジニアリングシステム向けの組み込み AI
MATLAB® と Simulink® を使用して、AI モデルを組み込みハードウェアにデプロイします。このスキルは MATLAB R2026a 専用に作成されており、このリリースで導入された API、関数、ワークフローを使用します。モデルの作成またはインポート、検証、圧縮、システムレベルのシミュレーション、リソースに制約のあるターゲット向けのコード生成まで、ライフサイクル全体を扱います。
MATLAB R2026a 以降が必要です。主要なツールボックス:Deep Learning Toolbox、Statistics and Machine Learning Toolbox、MATLAB Coder、Embedded Coder、Simulink、Fixed-Point Designer。ワークフロー固有のサポートパッケージは、環境の検出中に確認されます。エージェントが MCP ツールを介してライブ MATLAB および Simulink セッションを操作できるよう、MATLAB and Simulink Agentic Toolkits を利用可能な状態にしておく必要があります。
使用する場合
- 学習済みニューラルネットワーク(MATLAB ネイティブまたはインポート済み)を組み込みハードウェアにデプロイする場合
- ARM Cortex-M/A/R、x86、または GPU ターゲット向けに、ディープラーニングモデルから C または CUDA コードを生成する場合
- インポートした PyTorch、ONNX、TensorFlow、または LiteRT モデルを組み込みターゲットにデプロイする場合(インポート手順には
/matlab-import-external-ai-modelを使用します) - AI モデルを圧縮(量子化、枝刈り、射影)して、リソースに制約のあるハードウェアに適合させる場合
- コード生成前の閉ループシミュレーションに向けて、AI 推論を Simulink システムモデルに統合する場合
- AI モデルで
loadPyTorchExportedProgram、importNetworkFromPyTorch、importNetworkFromONNX、importNetworkFromTensorFlow、dlquantizer、exportNetworkToSimulink、または Embedded Coder を使用する場合 - MathWorks ネイティブのコード生成と、PyTorch/LiteRT による直接コード生成のどちらを選択するか判断する場合
使用しない場合
- デプロイ先がなく、研究目的のみでモデルを学習する場合 — Deep Learning Toolbox のドキュメントを直接使用してください
- クラウド/サーバーエンドポイントにデプロイする場合(組み込みターゲットなし)— MATLAB Production Server または MATLAB Compiler SDK を使用してください
- ニューラルネットワークではない古典的な ML モデル(決定木、SVM、アンサンブル)を扱う場合 — Statistics and Machine Learning Toolbox のコード生成ワークフローを直接使用してください。注:
fitcnet/fitrnetのニューラルネットワークモデルは、このスキルの対象です - AI 以外の Simulink モデルのコードを生成する場合 — 標準の Embedded Coder ワークフローを使用してください
- 組み込みデプロイを目的とせずにモデル形式を変換する場合(例:デスクトップ推論のみを目的とした ONNX から MATLAB への変換)
ワークフローパターンの選択
このスキルでは、次の 2 つのデプロイパターンを使用します。
- パターン 1 — MATLAB ネットワークのコード生成:
dlnetworkをインポートまたは構築し、必要に応じて圧縮してから、MATLAB Coder で C/C++ を生成するか、Simulink にエクスポートします。references/pattern1/workflow.mdを参照してください。 - パターン 2 — PyTorch/LiteRT による直接コード生成: PyTorch(.pt2)または LiteRT(.tflite)モデルを直接読み込み、
dlnetworkに変換せずに C/C++ を生成します。references/pattern2/workflow.mdを参照してください。
判断ツリー
外部モデルにおける主な判断基準は、デプロイ機能とハードウェアクラスです。
Q1: Where does the AI model come from?
|
+-- Trained in MATLAB, or requires training in MATLAB -------> Pattern 1
|
+-- External framework (PyTorch, TF, ONNX, Keras) --> Q2
|
Q2: Does the deployment need any of these?
| - Quantization (INT8 via dlquantizer)
| - Pruning or projection
| - Weight inspection / modification
| - exportNetworkToSimulink integration
|
+-- YES --> Pattern 1 (import as dlnetwork)
|
+-- NO ---> Q3
|
Q3: What is the deployment target?
|
+-- Cortex-M: Pattern 1
| (compression and Simulink verification typically needed)
|
+-- x86 / GPU:
| +-- PyTorch (.pt2) or LiteRT (.tflite) --> Pattern 2
| +-- ONNX, TF, Keras --> Pattern 1 (convert to ONNX recommended)
|
+-- Cortex-A/R:
+-- Small model --> Pattern 1
| (import as dlnetwork, then codegen)
+-- Large model:
+-- PyTorch (.pt2) or LiteRT (.tflite) --> Pattern 2
+-- ONNX, TF, Keras --> Pattern 1 (convert to ONNX recommended)
パターンの概要
| パターン | 使用する場合 | 主なツールチェーン |
|---|---|---|
| 1 — MATLAB ネットワークのコード生成 | MATLAB で学習したモデル、または圧縮/量子化/Simulink へのエクスポート/重みの検査が必要な外部モデル、または Cortex-M ターゲット | MATLAB Coder™ / Embedded Coder™ |
| 2 — PyTorch/LiteRT による直接コード生成 | x86/GPU/Cortex-A ターゲット上の外部 PyTorch(.pt2)または LiteRT(.tflite)モデルで、圧縮せずに C コードをより短い手順で生成する場合 | MATLAB Coder™ + PyTorch & LiteRT SPKG |
パターン 2 で生成した C コードはあらゆるターゲットに移植できますが、Cortex-M へのデプロイでは通常、パターン 1 の機能(圧縮、Simulink による検証)が必要です。
インポート手順(パターン 1): PyTorch/ONNX/Keras/TensorFlow モデルのインポートには、/matlab-import-external-ai-model を使用してください。このスキルでは、インポート後の圧縮、Simulink 統合、コード生成の各フェーズを扱います。
パターン 1 とパターン 2 の機能比較
| 機能 | パターン 1(dlnetwork) | パターン 2(PyTorch/LiteRT 直接) |
|---|---|---|
| C コード生成 | はい | はい |
| 対象:Cortex-M、Cortex-A/R、x86、GPU | はい | はい |
| 重みの検査/変更 | はい | いいえ |
| dlquantizer(INT8) | はい | いいえ |
| プロジェクション(compressNetworkUsingProjection) | はい | いいえ |
| プルーニング | はい | いいえ |
| Simulink との統合 | はい(exportNetworkToSimulink) | はい(PyTorch SPKG Simulink ブロック) |
| 複合圧縮 | はい | いいえ |
| 最初の C コード生成までの速度 | 遅い | 速い |
経験則: 圧縮、量子化、重みの検査、または exportNetworkToSimulink を使用する必要がある場合、モデルがすでに dlnetwork の場合、あるいは Cortex-M を対象とする場合は、パターン 1 を選択してください。モデルがすでに PyTorch(.pt2)または LiteRT(.tflite)形式で、圧縮せずに短い手順で C コードを生成したい場合は、パターン 2 を選択してください。
統計/ML モデル(fitrnet/fitcnet): これらはパターン 1 に従いますが、独自の Simulink 統合手順があります。Statistics and Machine Learning Toolbox ライブラリの RegressionNeuralNetwork Predict ブロック(fitrnet の場合)または ClassificationNeuralNetwork Predict ブロック(fitcnet の場合)を使用してください。exportNetworkToSimulink(dlnetwork 専用)は使用しないでください。Simulink.SimulationInput を使用して、プログラムでシミュレーションを設定します。
共通の開始手順:前提条件
どちらのパターンでも、パターン固有のフェーズ(フェーズ 1 から開始)に進む前に、必ず次の 2 つの前提条件の手順から始めてください。
- 環境の確認(サイレント):
references/shared/environment-setup.mdを読み込みます - プロジェクトの確認(対話型):
references/shared/project-discovery.mdを読み込みます
プロジェクトの確認では、上記の判断フローを使ってワークフローパターンを決定します。
使用しない関数(レガシー関数)
| レガシー | 最新の代替手段 |
|---|---|
trainNetwork / train(DL 用) | trainnet |
DAGNetwork / SeriesNetwork / network | dlnetwork |
taylorPrunableNetwork / updateScore / updatePrunables | compressNetworkUsingTaylorPruning(trainnet でトレーニング可能な場合)。カスタムトレーニングループでは taylorPrunableNetwork を使用します |
csvread / xlsread | readmatrix / readtable |
datenum | datetime |
レガシーのインポート関数(importONNXNetwork、importKerasNetwork など)については、すべてのモデルインポートワークフローを扱う /matlab-import-external-ai-model を参照してください。
全体ルール
アドバイスモードと実行モード
ユーザーの意図に応じて、次の 2 つのモードを区別してください。
- アドバイス(「どのように進めればよいですか?」「どのワークフローですか?」「どのパターンですか?」):ルーティングに関する質問に直接回答します。推奨するパターンを示し、その理由を説明して、概要の手順を提示してください。環境の確認に進んだり、前提条件について質問したりしないでください。推奨を伝えた後、実行を開始するかどうかを尋ねてください。
- 実行(「モデルをデプロイしてください」「手順を案内してください」「スクリプトを書いてください」):前提条件の全フロー(環境の確認 → プロジェクトの確認 → 段階ごとのフェーズ)に進みます。
必ず守ること
- ツールボックスは
detect_matlab_toolboxesで、サポートパッケージはmatlabshared.supportpkg.getInstalledで、ワークフローの各ステップの前に確認します - サポートパッケージが不足している場合は、ユーザーに Add-On Explorer からダウンロードするよう依頼します -- 決して代理でインストールしないでください
- ユーザーを段階的にガイドします -- 一度に 1 つのフェーズずつ進めます
- 再現性のために、一貫したデータ分割(例: 固定インデックスまたは保存された partition オブジェクト)を使用します
- 各変換ステップで数値的な等価性を検証します
- ターゲット用の C コードを生成する前に、デスクトップ検証用の MEX を生成します
- すべての推論入力に
single精度を使用します - スクリプトベースの実行: MATLAB で行う各ワークフローステップについて、
.mスクリプトファイルを作成し、run_matlab_fileまたはevaluate_matlab_codeで実行します。先にスクリプトファイルを作成せずに、その場限りの MATLAB コマンドを実行しないでください。スクリプトに変更が必要な場合は、スクリプトファイルを編集して再実行します。これにより、ユーザーはどのようなコードが実行されているかを完全に可視化でき、再現性が確保されます。重要:run_matlab_fileは作業ディレクトリをスクリプトのフォルダーに設定します。モデルファイル、データ、保存される出力には常に 絶対パス(fullfile経由)を使用してください --pwdや相対パスに依存しないでください。 - 各ワークフローステップの後に一時停止: すべてのワークフローステップが完了したら、一時停止し、次のステップに進む許可をユーザーに明示的に求めます。目的は、ユーザーが作成された MATLAB スクリプトを読んだり検査したり、結果を確認したり、先に進む前に質問したりできるようにすることです。
- Deep Network Designer: モデルが MATLAB で学習された、インポートされた、またはネイティブの dlnetwork として再構築された場合は、Deep Network Designer(
deepNetworkDesigner(net))で読み込み、ユーザーがアーキテクチャを視覚的に検査できるようにします。この操作を告知し、先に進む前にユーザーの確認を待ちます。 - 数値的等価性テスト(インポートワークフロー): PyTorch または ONNX からのインポートでは、次のようにします:
- 元のモデル(PyTorch の場合はバンドルされた Python、または ONNX ランタイム経由)で推論を実行し、グラウンドトゥルースの参照データを収集します。インポートされた MATLAB モデルを参照として使用しないでください -- R2026a の PyTorch インポートでは、自動生成されたカスタム層がコード生成をサポートしていない可能性があり、モデルをネイティブに再構築する必要がある場合があります。(ONNX の自動生成層は R2025a 以降コード生成をサポートしており、再構築は不要な場合があります。)
- 同じ入力を再構築されたネイティブ MATLAB モデルで実行し、グラウンドトゥルースと比較します
- 圧縮後、非圧縮のベースラインに対する精度の差分(MAE、最大誤差、精度低下率)を報告します。これらは現在の実行内の変数から計算してください -- 異なる入力や異なるモデルでスクリプトを再実行すると古い数値が出力されるため、
fprintf/dispの文字列に数値をハードコードしないでください。 - MATLAB 内の圧縮モデル、Simulink 内の圧縮モデル、および最終的に生成されたコードの間で数値的等価性を検証するテストを実行します
- テスト数の提案: 数値的等価性テストを実行する前に、実行予定のテスト数とその理由(モデルの複雑さ、出力範囲、クラス数などを考慮)を提案します。先に進む前に、ユーザーの同意または修正を待ちます。
- コード生成レポート: コード生成レポートを自動的に開かないでください -- エージェントワークフローでは有用でない GUI が開きます。ユーザーが明示的に要求した場合にのみ開きます。
- 関数のシグネチャは、このスキルではなく MATLAB のヘルプまたはオンラインリファレンスページから調べます。 引数リスト、名前と値のペア(NVP)のデフォルト、サポートされる層の列挙は、MATLAB の
help <function>の出力および関数のリファレンスページにあります。このスキル内のインラインパラメータ表ではなく、それらを信頼できる情報源として使用してください -- インライン表はリリースをまたぐと古くなり、コンテキストを消費します。このスキルは、レシピを大きく変える名前と値の引数(例: 精度予算に基づくプルーニングのValidationThreshold)のみを示します。調べる手順:- まず、実行中の MATLAB セッションで
help <function>を試します。高速で、実際にインストールされているリリースのツールボックスまたはサポートパッケージを反映します。 helpが「Run doc for more information.」のようなスタブのみを返す場合 -- ヘルプがブラウザーのドキュメントにリダイレクトされるサポートパッケージ関数によく見られます -- エージェントによるオンラインリファレンスページの Web 閲覧にフォールバックします(https://www.mathworks.com/help/<product>/ref/<funcname>.html、関数名は小文字)。すべての名前と値の引数をデフォルト値とともに抽出し、デフォルトをそのまま引用して markdown テーブルとして整形します。- 該当するサポートパッケージがインストールされているシステムで関数がまったく見つからない場合(
which <func>が「not found」を返す)、サポートパッケージが古いビルドである可能性があります。不足している関数を回避するのではなく、Add-On Explorer で更新するようユーザーに依頼してください。
- まず、実行中の MATLAB セッションで
- 圧縮の決定フロー: フェーズ 5(パターン 1)の開始時に
references/pattern1/compression-decision.mdを読み込み、質問フロー(ハードウェアと Simulink の利用可否、主な目的、再学習の許容度)を通じてユーザーをガイドします。回答に基づいて圧縮とコード生成のパスを選択します。圧縮は必須ではなく、プルーニング、プロジェクション、量子化の最適な組み合わせは目的によって異なります -- たとえば、レイテンシに制約のある LSTM モデルを搭載した Cortex-M では、CMSIS-NN がリカレント層用の INT8 カーネルを提供していないため、CMSIS-DSP を使用する float32 パスが量子化パスよりも優れた性能を発揮します。
まず確認する
- 各フェーズに移る前に、「このステップはプロジェクトに関連しますか?」と確認します(適用されないフェーズもあります)。
- データを分割する前に、「既存の学習/検証/テスト用分割はありますか?それともこちらで分割しますか?」と確認します(ユーザーによる分割設定を上書きしないためです)。
- モデルを選択する前に、「問題の種類(分類/回帰/系列)とサイズの制約を教えてください」と確認します(アーキテクチャの選択に必要です)。
- Simulink を使用する前に、「統合先となる既存の Simulink モデルはありますか?」と確認します(エクスポートするか、スタンドアロンにするかを判断するためです)。
- 量子化する前に、「ターゲットは浮動小数点をサポートしていますか?それとも整数のみが必要ですか?」と確認します(量子化の手順を判断するためです)。
- コードを生成する前に、「ターゲットハードウェアは何ですか?」と確認します(Coder の設定と CRL の選択に必要です)。
- 圧縮とコード生成(パターン 1)を行う前に、
references/pattern1/compression-decision.mdの意思決定フローに沿ってユーザーに確認します。ハードウェアターゲットと Simulink の利用可否、主な目的、再学習への許容度を確認してください。回答に基づいて、使用する圧縮手法とコード置換ライブラリを決定します。ハードウェアターゲットがすでに示されている場合でも、主なデプロイ目的(フラッシュ、SRAM、レイテンシ、精度)を必ず確認し、圧縮を実行する前に推奨レシピを提示してユーザーの確認を得てください。
絶対に行わないこと
- ワークフロー全体を一度に提示する
- 環境の調査またはプロジェクトの調査を省略する
- プロジェクトの調査が完了したと確認される前に、ユーザーデータを開く、読み込む、または調査する
- 「使用禁止」セクションに記載されたレガシー関数を使用する
- 確認せずに、ツールボックスやサポートパッケージを利用できると決めつける
- ユーザーに代わってサポートパッケージをインストールする
- ハードウェアに依存しない性能や「どこにでもデプロイ可能」といったことを約束する
DAGNetwork、SeriesNetwork、またはnetworkオブジェクトを生成する- 先にスクリプトファイルを作成せず、MCP サーバーで MATLAB コマンドを直接実行する
- 外部モデルをインポートする際に、数値的同等性のテストを省略する
- ユーザーの明示的な許可を得ずに、ワークフローの次のステップに進む
compression-decision.mdの意思決定フローに沿ってユーザーに確認する前に、圧縮を適用する- インポートしたモデル(自動生成されたカスタムレイヤーを含む)を数値的な正解として使用する。必ず同梱の Python を使って元のモデルと照合し、検証する
- 系列モデルに書式
"CBT"の[C × T]配列を渡す。単一系列の推論では、必ず[C × 1 × T]に形状を変更する dlnetworkをprepareNetworkに渡す。R2026a では、この関数はdlquantizerオブジェクトを受け取り(prepareNetwork(quantObj))、オブジェクトを直接変更します。レガシー形式のnet = prepareNetwork(net)は、現在は定義されていません
関連するワークフロー(対象外)
このスキルは、MATLAB Coder と Embedded Coder を介した CPU ターゲット(Cortex-M、Cortex-A/R、
x86)向けの C/C++ コード生成と、パターン 2 の DeepLearningConfig オプションを介した
GPU ターゲット(CUDA/TensorRT)を対象としています。以下のデプロイターゲットでは異なるツールチェーンが使用されるため、対象外です。
| ターゲット | ツールチェーン | 備考 |
|---|---|---|
| FPGA / SoC | HDL Coder + Deep Learning HDL Toolbox | dlnetwork から HDL(VHDL/Verilog)を生成します |
| PLC | Simulink PLC Coder | Simulink モデルから PLC 向けの Structured Text を生成します |
ユーザーのターゲットがこれらのいずれかに該当する場合、このスキルではそのワークフローを 扱っていないことを伝え、該当するツールチェーンを案内してください。
MATLAB と Simulink は The MathWorks, Inc. の登録商標です。その他の商標については、www.mathworks.com/trademarks を参照してください。その他の製品名やブランド名は、それぞれの所有者の商標または登録商標である場合があります。
Copyright 2026 The MathWorks, Inc.