MNN 是阿里巴巴开源的轻量级深度学习推理框架,专注于移动端和嵌入式设备的模型部署。它支持高效的模型推理和训练,广泛应用于阿里巴巴的多种业务场景,如淘宝、钉钉和优酷等。MNN 提供跨平台的兼容性,支持 iOS、Android 以及嵌入式设备,优化了 CPU 和 GPU 的计算性能。它的核心优势在于轻量化、高性能和易用性,能大幅降低模型部署的资源消耗。MNN-LLM 是基于 MNN 开发的语言模型运行方案,支持多种大型语言模型在本地运行,保障数据隐私。框架开源在 GitHub 上,社区活跃,提供丰富的文档和示例,适合开发者快速上手。
功能列表
- 支持多种深度学习模型格式,包括 TensorFlow、Caffe、ONNX 和 TorchScript。
- 提供高效的模型推理,支持 CNN、RNN、GAN 和 Transformer 等神经网络。
- 支持多设备混合计算,涵盖 CPU 和 GPU(Metal、OpenCL、Vulkan)。
- 提供 MNN-LLM,实现在移动端和 PC 上运行大型语言模型。
- 支持模型量化(如 FP16 和 Int8),减少模型大小 50%-70%。
- 提供 MNN-Express,支持控制流模型和通用计算。
- 内置 MNN-CV,轻量化的类 OpenCV 图像处理库。
- 支持 MNN-Train,用于训练 MNN 模型。
- 提供多模态应用,如 MNN-LLM-Android,支持文本、图像和音频处理。
使用帮助
安装流程
要在本地使用 MNN,首先需要从 GitHub 仓库克隆项目代码。以下是详细的安装步骤:
- 克隆仓库
打开终端,运行以下命令克隆 MNN 仓库:git clone https://github.com/alibaba/MNN.git
- 安装依赖
MNN 支持 iOS 8.0+、Android 4.3+ 以及 POSIX 接口的嵌入式设备。确保系统安装了必要的编译工具:- Linux/macOS:安装 CMake(3.10 或以上)、Git 和 GCC/Clang。
sudo apt-get install cmake git build-essential
- Android:安装 Android NDK(r17 或以上)。
- iOS:确保安装 Xcode 和 Metal 支持。
- Linux/macOS:安装 CMake(3.10 或以上)、Git 和 GCC/Clang。
- 编译 MNN
进入 MNN 目录,创建构建文件夹并运行 CMake:cd MNN mkdir build && cd build cmake .. -DMNN_BUILD_MINI=ON make -j4
使用
MNN_BUILD_MINI
可减少约 25% 的包大小,适合资源受限的设备。编译完成后,生成的可执行文件和库文件位于build
目录。 - 安装 MNN-LLM Android 应用
对于 MNN-LLM Android 应用,可从 GitHub Releases 页面下载预编译的 APK 文件,或自行构建:- 下载源码:
project/android/apps/MnnLlmApp
。 - 使用 Android Studio 打开项目,配置 NDK 路径,点击 Build > Build APK。
- 安装 APK 到 Android 设备,设备需支持 Android 4.3 或以上。
- 下载源码:
使用 MNN 进行模型推理
MNN 的核心功能是模型推理。以下是具体操作步骤:
- 模型转换
MNN 支持 TensorFlow、Caffe、ONNX 等模型格式。需将模型转换为 MNN 格式:- 假设有一个 TensorFlow 模型
model.pb
,运行以下命令:./MNNConvert -f TF --modelFile model.pb --MNNModel model.mnn --bizCode MNN
- 转换后的
model.mnn
文件即可用于推理。
- 假设有一个 TensorFlow 模型
- 加载和运行模型
MNN 提供 C++ 和 Python API 用于推理。以下是一个简单的 C++ 示例:#include <MNN/Interpreter.hpp> int main() { auto mnnNet = MNN::Interpreter::createFromFile("model.mnn"); auto session = mnnNet->createSession(); // 输入数据 auto input = mnnNet->getSessionInput(session, nullptr); // 运行推理 mnnNet->runSession(session); // 获取输出 auto output = mnnNet->getSessionOutput(session, nullptr); return 0; }
开发者可参考
demo/
目录中的示例代码。 - 使用 MNN-LLM
MNN-LLM 支持在移动端运行大型语言模型(如 Qwen、Llama)。安装 MNN-LLM Android 应用后:- 打开应用,浏览支持的模型列表。
- 点击下载模型(如 Qwen-7B),模型会存储在设备本地。
- 输入文本提示,应用将返回生成结果。
- 支持多模态任务,如图像描述或音频转文本,操作类似,上传对应文件即可。
应用运行完全离线,数据不上传至服务器,保障隐私。
- 优化性能
- 使用
FP16
或Int8
量化模型,降低内存占用。 - 启用 GPU 加速(需设备支持 Metal 或 Vulkan)。
- 对于复杂模型,可通过
MNN-Express
优化控制流计算。
- 使用
使用 MNN-CV 进行图像处理
MNN-CV 提供轻量化的图像处理功能,类似 OpenCV。示例代码:
#include <MNN/ImageProcess.hpp>
int main() {
MNN::CV::ImageProcess::Config config;
config.destFormat = MNN::CV::RGB;
auto process = MNN::CV::ImageProcess::create(config);
// 加载图像
process->convert(imageData, width, height, 0, output);
return 0;
}
开发者可参考 include/MNN/ImageProcess.hpp
获取更多功能。
应用场景
- 移动端 AI 应用
MNN 在淘宝、钉钉等应用中支持图像搜索、推荐系统和直播特效。例如,淘宝使用 MNN 进行商品图像识别,用户上传图片即可快速找到相似商品。 - 嵌入式设备部署
MNN 支持 IoT 设备,用于智能家居或工业场景。例如,在智能摄像头中运行人脸检测模型,单帧处理仅需 5 毫秒。 - 本地化语言模型
MNN-LLM 允许用户在手机上运行大型语言模型,适合隐私敏感场景,如本地文档摘要或语音助手。 - 多模态任务
MNN-LLM Android 应用支持图像描述、音频转文本等功能,适用于家庭维修、语音笔记等场景。
QA
- MNN 支持哪些模型格式?
MNN 支持 TensorFlow、Caffe、ONNX 和 TorchScript 格式,覆盖 178 个 TensorFlow 操作、158 个 ONNX 操作等。 - 如何在低端设备上运行 MNN?
使用MNN_BUILD_MINI
编译选项减少包大小,并启用Int8
量化降低内存占用。 - MNN-LLM 是否支持外部模型?
当前需重新编译应用以加载外部模型,官方计划未来改进模型导入方式。 - MNN 的性能如何?
MNN 在 MobileNet 等模型上比 TensorFlow Lite 快 20% 以上,MNN-LLM 在 Android 上推理速度比 llama.cpp 快 8.6 倍。