mcpField
M
matlab-deploy-ai-model

matlab-deploy-ai-model

github.com/matlab开发1.2k45 次安装1 天前更新
代码仓库

关于 matlab-deploy-ai-model

这是一个从 PyTorch 和 LiteRT 模型生成 C/C++ 或 CUDA 代码的 MATLAB 技能,涵盖模型加载、数值检查、MEX 和生产代码生成。适用于推理部署,也包括 Simulink 集成和可选的硬件部署。

主要功能

  1. 01加载 PyTorch 和 LiteRT 模型
  2. 02生成并验证 CPU 或 CUDA MEX
  3. 03生成 C/C++ 库或可执行文件
  4. 04将支持的模型集成到 Simulink
  5. 05对照 MATLAB 验证模型输出

适用场景

  1. 01从 .pt2 模型生成可部署代码
  2. 02将 .tflite 模型转换为 C/C++ 输出
  3. 03代码生成前检查模型数值
  4. 04在 Simulink 中使用 PyTorch 推理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-deploy-ai-model

安装后在 Claude Code 中输入/matlab-deploy-ai-model确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

manifest.yaml
references/
codegen-workflow.md
dnn-codegen-options.md
export-pytorch-models.md
litert-numeric-verification.md
litert-workflow.md
pytorch-api-reference.md
pytorch-data-layout.md
pytorch-export-gotchas.md
pytorch-export-patterns.md
pytorch-numeric-verification.md
pytorch-supported-models.md
pytorch-workflow.md
simulink-workflow.md
tensorflow-to-litert-conversion.md

详细介绍

从 AI 模型生成 C/C++/CUDA 代码

使用 MATLAB Coder 或 GPU Coder 从 AI 模型生成可部署的 C/C++ 或 CUDA 代码。无论模型框架如何,工作流都遵循相同的常见模式:加载、检查、编写入口函数、生成 MEX、验证,然后生成生产代码。

适用场景

  • 用户想从 AI 模型(PyTorch、LiteRT)生成 C/C++/CUDA 代码
  • 用户有模型文件(.pt2、.tflite),想将其加载到 MATLAB 中
  • 用户想为 AI 模型实现 MEX 加速
  • 用户想从 AI 模型生成 CUDA 代码或 GPU 加速的 MEX
  • 用户想将 AI 模型部署到硬件
  • 用户想在 Simulink 中使用 PyTorch 或 LiteRT 模型(用于仿真或代码生成)
  • 用户想验证源框架与 MATLAB 之间的 AI 模型数值结果

不适用场景

  • 常规 MATLAB Coder 用法(codegen 语法、配置调整、编写适用于 codegen 的代码)
  • 用于 Deep Learning Toolbox 工作流的可编辑 dlnetwork(量化、压缩、迁移学习)——使用 importNetworkFromPyTorch(PyTorch)、importNetworkFromTensorFlow(SavedModel)或 importNetworkFromKeras(.keras/.h5),这些函数会返回 dlnetwork。对于使用模型压缩(通过 dlquantizer 进行 INT8 量化、剪枝、投影)或 exportNetworkToSimulink 工作流部署可编辑 dlnetwork 的场景,请使用 matlab-deploy-embedded-ai(模式 1)。
  • 训练或微调——此技能仅用于推理代码生成

支持的框架

框架模型格式加载函数状态
PyTorch.pt2loadPyTorchExportedProgram支持(R2026a+)
LiteRT / TFLite.tfliteloadLiteRTModel支持(R2026a+)

有关 PyTorch 特定详情(API 路由、入口函数模式、导出工作流、数据布局、常见错误),请参见 references/pytorch-workflow.md。

有关 LiteRT 特定详情(API 路由、入口函数模式、可变尺寸输入、Simulink 集成、惯例),请参见 references/litert-workflow.md。 有关将 TensorFlow/Keras/.h5 转换为 .tflite 的说明,请参见 references/tensorflow-to-litert-conversion.md。

通用工作流

任何框架的代码生成工作流都遵循相同的步骤:

1. 加载并检查

加载模型并检查其输入/输出规格,以确定预期的形状和类型。

2. 编写入口函数

创建一个兼容 codegen 的入口函数,该函数:

  • 从文件路径加载模型
  • 对输入运行推理
  • 返回输出

模型文件路径必须使用 coder.Constant 封装,以便在编译时确定。

3. 验证数值结果

将 MATLAB 推理输出与源框架进行比较,以确认加载正确。在两个环境中使用相同的输入数据,并通过容差进行比较。

4. 生成 MEX(优先!)

始终先生成 MEX,再生成 lib/exe,以便在主机上进行验证:

CPU MEX:

cfg = coder.config("mex");
codegen -config cfg -args {coder.Constant("model_file"), input} entryPoint

CUDA MEX(GPU 加速):

cfg = coder.gpuConfig("mex");
codegen -config cfg -args {coder.Constant("model_file"), input} entryPoint

有关 CPU MEX SIMD 加速(Intel/AMD 上 AVX2 的 SIMDAcceleration = 'Full'),请参见 matlab-generate-code 技能。有关 DNN 推理专用 MEX 的 AVX2 上限,请参见 references/dnn-codegen-options.md。

5. 验证 MEX 输出

使用带容差的 matlab.unittest,将 MEX 输出与 MATLAB 参考结果进行比较:

refOut = entryPoint("model_file", input);
mexOut = entryPoint_mex("model_file", input);
testCase = matlab.unittest.TestCase.forInteractiveUse;
testCase.verifyThat(mexOut, matlab.unittest.constraints.IsEqualTo(refOut, ...
    'Within', matlab.unittest.constraints.AbsoluteTolerance(single(1e-5))));
6. 生成库/可执行文件

验证 MEX 后,生成生产代码:

cfgLib = coder.config("lib");
cfgLib.TargetLang = "C++";  % set to "C++" for C++ output; default is "C"
codegen -config cfgLib -args {coder.Constant("model_file"), input} entryPoint

对于 DLL:coder.config("dll")。对于可执行文件:coder.config("exe")。

CUDA 变体: 将 coder.config 替换为 coder.gpuConfig。

性能调优:

  • 通用选项(SIMD 指令集、归约循环向量化、多线程循环):请参阅 matlab-generate-code 技能。
  • MATLAB Coder 与 Simulink Coder 属性命名的对应关系,以及 slbuild set_param 模式:请参阅 matlab-deploy-embedded-code 技能。
  • DNN 推理专用选项(通过 DLTargetLibrary / DeepLearningConfig 禁用第三方 DL 库,通过 LargeConstantGeneration 将权重序列化到数据文件):请参阅 references/dnn-codegen-options.md。
7. 在 Simulink 中使用

如需与 Simulink 集成,请使用 dlosslib 中专用的 PyTorch ExportedProgram 模块——将 ModelFilePath 设置为 .pt2 文件,它会自动检测输入/输出形状。无需入口函数或 coder.Constant。

可以使用专用模块周围的 Simulink 模块进行预处理和后处理。如需将所有内容放在单个模块中,请使用 MATLAB Function 模块,并搭配 loadPyTorchExportedProgram + invoke(与入口函数采用相同模式,但模型路径是字符串字面量——无需 coder.Constant)。

两种方式都支持通过 slbuild 生成代码(需要固定步长求解器和 ERT 或 GRT 目标)。完整详情请参阅 references/simulink-workflow.md。

8. 部署到硬件(可选——需要 Embedded Coder)

对于嵌入式部署,请使用相同的入口函数,并配置 Embedded Coder。有关 ERT 配置、硬件设置、PIL/SIL 验证和特定目标选项,请参阅 matlab-deploy-embedded-code 技能。如果未安装该技能,请让用户安装。

关键函数

函数用途包起始版本
coder.Constant将参数设为编译时常量MATLAB CoderR2011a
coder.gpuConfig创建 GPU(CUDA)代码生成配置GPU CoderR2017b
codegen生成代码MATLAB CoderR2011a
loadPyTorchExportedProgram将 .pt2 加载到 MATLAB 中MATLAB Coder Support Package for PyTorch and LiteRT ModelsR2026a
loadLiteRTModel将 .tflite 加载到 MATLAB 中MATLAB Coder Support Package for PyTorch and LiteRT ModelsR2026a

约定

  • 始终检查模型的输入规格,确保输入形状和类型正确
  • 始终先生成 MEX 并验证,然后再继续生成库/可执行文件
  • 始终对模型文件路径参数使用 coder.Constant
  • 输入数据通常为单精度(请检查模型输入规格以确认)
  • 在此技能中不要使用 importNetworkFromPyTorch、importNetworkFromTensorFlow 或 importNetworkFromKeras——它们会通过不同路径返回 dlnetwork。如果用户需要在代码生成前使用 dlnetwork 进行量化、投影、剪枝或调用 exportNetworkToSimulink,请转到 matlab-deploy-embedded-ai

参考资料

  • references/pytorch-workflow.md — 完整的 PyTorch 专用工作流:API 路由、入口点模式、导出指南、常见错误和约定。处理任何 PyTorch/.pt2 模型代码生成任务时,请参阅此文档。 其中还链接了更深入的 PyTorch 参考资料(API 签名、数据布局、数值验证、支持的模型)。
  • references/export-pytorch-models.md — 使用 torch.export 将 eager 模式的 PyTorch 模型导出为 .pt2(加载前的步骤)。如果用户有 PyTorch 模型但还没有 .pt2 文件,或遇到 torch.export SerializeError / kwarg 不匹配错误,请参阅此文档。 其中还链接了 pytorch-export-patterns.md(按来源分类的模板)和 pytorch-export-gotchas.md(torch 2.11 序列化修复)。
  • references/simulink-workflow.md — Simulink 集成:专用的 PyTorch ExportedProgram 模块(路径 A)与 MATLAB Function 模块(路径 B)、模块掩码参数、代码生成配置,以及与命令行代码生成的主要差异。
  • references/litert-workflow.md — 完整的 LiteRT 专用工作流:API 路由(loadLiteRTModel → inputSpecifications → invoke)、入口点模式、可变大小输入处理、Simulink 集成和约定。处理任何 LiteRT/.tflite 模型代码生成任务时,请参阅此文档。
  • references/tensorflow-to-litert-conversion.md — 通过 Python tf.lite.TFLiteConverter API 将 TensorFlow SavedModel/Keras/.h5 转换为 .tflite。如果用户有 TensorFlow 模型但还没有 .tflite 文件,请参阅此文档。
  • references/litert-numeric-verification.md — 针对 LiteRT 模型,将 MEX 数值结果与 MATLAB 参考结果进行验证(容差指南、常见不匹配情况)。
  • references/codegen-workflow.md — PyTorch 和 LiteRT 通用的代码生成步骤:MEX 生成、MEX 验证、库/可执行文件目标、coder.Constant 用法,以及 coder.DeepLearningConfig 说明。
  • references/dnn-codegen-options.md — DNN 推理专用的代码生成选项:用于纯 C DL 路径的 DLTargetLibrary / DeepLearningConfig('none')、用于将大型 DNN 权重序列化为数据文件的 LargeConstantGeneration,以及 DNN 推理场景下的 MEX SIMD 上限。当通用文件中的选项需要结合 DNN 特定背景来说明时(例如,“MEX SIMD 上限之所以重要,是因为目标是推理”),请阅读此文档。

另请参阅

  • matlab-generate-code — 通用 MATLAB Coder 调优(SIMD 指令集、OpenMP 多线程、归约循环向量化)。对于非 DNN 推理专用的性能选项,请参阅此文档。
  • matlab-deploy-embedded-ai — 基于 dlnetwork 的代码生成,包含模型压缩(量化、剪枝、投影)和 exportNetworkToSimulink 工作流(模式 1)。如果源模型是 MATLAB 中可编辑的 dlnetwork,而不是 .pt2 / .tflite 文件,请使用此工具。
  • matlab-optimize-gpu-codegen — 当部署目标为 NVIDIA GPU,而非 CPU 或嵌入式硬件时,用于 CUDA 目标代码生成调优(coder.gpuConfig、内核融合、内存层级选项)。

版权所有 2026 The MathWorks, Inc.


评论

支持 Markdown