ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MNN 深度学习推理引擎全解析:从端侧轻量部署到本地 LLM 推理的完整技术指南

MNN 深度学习推理引擎全解析:从端侧轻量部署到本地 LLM 推理的完整技术指南 MNN 深度学习推理引擎全解析从端侧轻量部署到本地 LLM 推理的完整技术指南【免费下载链接】MNNMNN: A blazing-fast, lightweight inference engine battle-tested by Alibaba, powering high-performance on-device LLMs and Edge AI.项目地址: https://gitcode.com/GitHub_Trending/mn/MNN导读MNNMobile Neural Network是阿里巴巴开源的高效轻量级深度学习推理引擎同时支持模型推理与训练已深度集成于手机淘宝、天猫、优酷、钉钉、闲鱼等 30 应用覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、安全风控等 70 场景并可用于 IoT 等嵌入式设备。本文以 README.md 为骨架结合仓库源码与配套文档系统讲解 MNN 的轻量性、通用性、高性能、易用性四大特性硬件架构与精度支持矩阵模型转换MNN-Converter、压缩、表达式计算、CV、训练五大工具链以及基于 MNN 的本地大语言模型MNN-LLM与多模态应用的部署方案帮助你掌握从模型转换到端侧部署的完整闭环。MNN 是什么定位与核心能力MNN 是一个高度高效且轻量级的深度学习框架支持深度学习模型的推理与训练在端侧设备的推理与训练性能上处于行业领先水平。它不是一个只能运行固定模型的引擎而是一个覆盖转换 → 优化 → 推理 → 训练全流程的张量计算平台。在阿里巴巴内部MNN 还作为 Walle 目录。MNN 生态中另有两套基于引擎之上的高层运行方案MNN-LLM基于 MNN 引擎开发的大语言模型运行方案目标是在手机 / PC / IoT 等本地平台上高效部署 LLM支持千问Qwen、百川Baichuan、智谱Zhipu、LLAMA 等主流开源大模型MNN-Diffusion基于 MNN 引擎开发的 Stable Diffusion 文生图模型运行方案解决扩散模型在本地设备的高效部署问题仓库实现位于 transformers/diffusion。以下架构图展示了 MNN 的总体分层结构图片来源仓库 doc/architecture.png四大核心特性轻量性面向设备的零依赖设计MNN 主体功能模型推理 CPUGPU无任何依赖代码精简可以方便地部署到移动设备和各种嵌入式设备中。README 给出的关键体积数据如下iOS 平台功能全开的静态库armv7arm64约 12MB链接生成可执行文件的体积增量约 2MB可裁剪主体功能后静态库约 6.1MB链接增量约 600KBAndroid 平台主体功能 armv7ac_shared动态库约 800KB支持MNN_BUILD_MINI迷你编译选项可在此基础上进一步降低约 25% 的包体积代价是限制为固定模型输入尺寸支持 FP16 / Int8 量化可减少模型体积 50%–70%。从 CMakeLists.txt 源码可以看到MNN_BUILD_MINI的实现机制开启该选项后CMake 会强制打开MNN_SKIPBUILD_GEOMETRY跳过 Geometry 计算图优化层只支持固定形状模型和MNN_REDUCE_SIZE移除不常用算子并优化代码后者又会进一步关闭MNN_SUPPORT_DEPRECATED_OP、MNN_SUPPORT_DEPRECATED_OPV2、MNN_SUPPORT_QUANT_EXTEND与稀疏计算从而实现体积裁剪。通用性多框架、多算子、多设备MNN 对模型的兼容能力体现在三个层面模型格式支持Tensorflow、Caffe、ONNX、Torchscripts以及 CNN、RNN、GAN、Transformer 等主流网络结构模型结构支持多输入多输出、任意维度格式、动态输入输入尺寸可变以及带控制流的模型算子覆盖转换器Converter支持 178 个 Tensorflow Op、52 个 Caffe Op、163 个 Torchscripts Op、158 个 ONNX OpONNX 基本完整支持运行设备支持 iOS 8.0、Android 4.3 以及具有 POSIX 接口的嵌入式设备支持 CPU 与 GPU 混合计算并可通过后端扩展支持 CoreML、HIAI、NNAPI、QNN 等 NPU。高性能汇编级优化与多后端加速对 iOS / Android / PC / Server 的 CPU 架构进行适配通过 SIMD 指令与手写汇编实现核心计算充分发挥 ARM / x64 CPU 算力使用Metal / OpenCL / Vulkan在移动端 GPU 上推理使用CUDA 与 TensorCore在 NVIDIA GPU 上推理卷积与转置卷积算法高效稳定广泛运用Winograd 卷积算法加速 3x3、4x4、5x5、6x6、7x7 等对称卷积针对 ARMv8.2 新架构提供 FP16 半精度计算支持推理速度翻倍利用 ARMv8.2 与 VNNI 的sdot指令可再提升约 2.5 倍。易用性从 C 到 Python 的全方位接口支持使用 MNN 算子进行类似 numpy 的数值计算MNN-Express提供轻量级图像处理模块 MNN-CV类似 OpenCVarmv7a 架构下小于 100KB支持在 PC / 移动端构建模型并训练MNN-TrainMNN Python API 让 ML 工程师无需接触 C 即可完成推理、训练与图像处理。硬件架构与精度支持矩阵README 定义了四级支持评级作为选择后端与精度的依据S支持且工作良好深度优化推荐使用A支持且工作良好可以使用B支持但有 bug 或未优化不推荐使用C不支持各架构与精度组合的支持情况摘自 README.mdArchitecture / PrecisionNormalFP16BF16Int8CPUNativeBCBBx86/x64-SSE4.1ACCAx86/x64-AVX2SCCAx86/x64-AVX512SCCSARMv7aSS (ARMv8.2)SSARMv8SS (ARMv8.2)S (ARMv8.6)SGPUOpenCLASCSVulkanAACAMetalASCSCUDAASCANPUCoreMLACCCHIAIACCCNNAPIBBCBQNNCBCC从表格可以提炼出几条实用的选型结论移动端 CPU 推理首选 ARMv7a / ARMv8FP16 与 Int8 均已深度优化BF16 需要 ARMv8.6x86 平台推荐 AVX2 / AVX512两者在 Normal 与 Int8 下均为 S 级GPU 后端中 OpenCL 与 Metal 的 FP16、Int8 达到 S 级是端侧 GPU 推理的主力Vulkan 目前 FP16 为 A 级NPU 后端CoreML / HIAI / NNAPI / QNN整体成熟度低于 CPU/GPU使用时需结合具体硬件验证精度与性能。对照 source/backend 目录可以看到上述评级对应的实际后端实现cpu、arm82、opencl、vulkan、metal、cuda、opengl、coreml、hiai、nnapi、qnn、musa、tensorrt、hexagon、rknn、neuropilot。这些后端通过统一的 Backend.hpp 抽象接入 MNN 核心调度层Schedule.cpp这解释了为何 MNN 能够在不同硬件上实现一套模型、多端运行。构建从源码编译 MNNMNN 使用 CMake 构建核心编译选项定义在 CMakeLists.txt。与 README 中四大特性直接相关的选项包括CMake 选项默认值说明MNN_BUILD_SHARED_LIBSON构建动态库或静态库MNN_BUILD_MINIOFF迷你构建强制打开MNN_SKIPBUILD_GEOMETRY与MNN_REDUCE_SIZE约减 25% 体积MNN_BUILD_TRAINOFF构建 MNN 训练框架MNN_BUILD_CONVERTEROFF构建模型转换工具 MNN-ConverterMNN_OPENCLOFF启用 OpenCL GPU 后端MNN_VULKANOFF启用 Vulkan GPU 后端MNN_METALOFF启用 Metal GPU 后端Apple 平台MNN_CUDAOFF启用 CUDA GPU 后端MNN_ARM82ON启用 ARMv8.2 FP16 计算MNN_AVX512OFF启用 AVX512 指令集MNN_BUILD_LLMOFF构建 LLM 库基于 MNNMNN_LOW_MEMORYOFF支持权重量化模型的低内存推理MNN_SUPPORT_TRANSFORMER_FUSEOFF使能 Transformer 算子融合LLM 推理必需MNN_HEXAGONOFF启用高通 Hexagon DSP 后端MNN_SUPPORT_BF16OFF启用 BF16 算子MNN_BUILD_OPENCVOFF构建 MNN 的 OpenCV APIMNN_BUILD_AUDIOOFF构建 MNN 音频 API需要特别注意的是选项间的级联关系CMakeLists.txt开启MNN_BUILD_LLM会自动强制打开MNN_LOW_MEMORY与MNN_SUPPORT_TRANSFORMER_FUSE若同时开启MNN_BUILD_LLM_OMNI多模态还会自动打开MNN_BUILD_OPENCV、MNN_BUILD_AUDIO与MNN_IMGCODECS开启MNN_BUILD_DIFFUSION同样会强制打开低内存、Transformer 融合与 OpenCV 支持。因此当 README 的 LLM 编译示例显式给出-DMNN_LOW_MEMORYtrue -DMNN_BUILD_LLMtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue时其语义与源码中的强制级联是一致的显式写出有助于阅读者理解。仓库还提供了统一构建脚本 build_lib.sh支持--android、--ios、--ios-simulator、--harmony、--python等构建目标例如# 构建所有平台 ./build_lib.sh --android --ios --harmony --python --ndk ~/Library/Android/sdk/ndk/29.0.13599879 # 仅构建 Android ./build_lib.sh --android --ndk ~/Library/Android/sdk/ndk/29.0.13599879 # 构建 Python 版本带 LLM 与 OpenCL 支持 ./build_lib.sh --python --python-deps llm,opencl针对 iOS 平台还可使用 package_scripts/ios/buildiOS.sh 等脚本并配合 MNN.podspec 以 CocoaPods 方式集成。各平台详细编译说明见 docs/compile/cmake.md 与 docs/compile/engine.md。五大工具围绕张量计算引擎的工具链基于 MNN 张量计算引擎仓库提供了推理、训练与通用计算的系列工具MNN-Converter模型转换与图优化将 Tensorflow(Lite)、Caffe、ONNX、Torchscripts 等模型转换为 MNN 模型并执行图优化以减少计算量。转换器由 Frontends负责不同训练框架的前端解析与 Graph Optimize通过算子融合、算子替代、布局调整等方式优化计算图一般离线运行两部分构成。转换器主入口为 tools/converter/source/MNNConverter.cpp命令行参数解析实现在 tools/converter/source/common/cli.cpp。核心参数包括参数说明-f, --framework模型类型可选TF,CAFFE,ONNX,TFLITE,MNN,JSON编译 Torch 支持后另有TORCH--modelFile输入模型文件如*.pb、*.caffemodel、*.onnx--MNNModel输出的 MNN 模型文件*.mnn--keepInputFormat是否保持输入维度格式默认 true--optimizeLevel图优化级别0 不优化仅 MNN 源1 常规优化2 更激进但个别场景可能出错默认 1--optimizePrefer优化偏好0 常规、1 最小体积、2 最快速度--weightQuantBits将 Conv/MatMul/LSTM 浮点权重量化为 int82–8 bit默认 0不量化--weightQuantBlock分块权重量化的块大小默认 -1 即通道级量化--weightQuantAsymmetric使用非对称量化提升精度旧版 MNN 不兼容默认 false--fp16将 Conv 权重/偏置保存为 half 浮点--transformerFuse融合注意力等关键 Transformer 算子默认 falseLLM 模型必需--allowCustomOp转换时允许自定义算子默认 false--saveExternalData将权重保存到外部 bin 文件--forTraining是否保留 BN、Dropout 等训练算子默认 false--benchmarkModel不保存大尺寸权重数据仅用于测速--OP打印框架支持的算子列表典型用法示例将 ONNX 模型转为 4bit 量化的 MNN 模型同时开启 Transformer 融合./MNNConvert --modelFile model.onnx --MNNModel model.mnn \ --keepInputFormat --weightQuantBits4 --weightQuantBlock128 \ -f ONNX --transformerFuse1 --allowCustomOp --saveExternalDataMNN-Compress模型压缩在允许一定精度误差的前提下对 MNN 模型进行压缩减少模型体积并提升运行性能。相关工具脚本位于 tools/mnncompressPython 实现配套文档见 docs/tools/mnncompress.md。MNN-Express表达式计算支持带控制流的模型运行并支持调用 MNN 算子进行自定义计算覆盖 numpy 常用功能。核心实现位于 express 目录Expr.cpp、Executor.cpp 等上层接口见 include/MNN/expr 下的Expr.hpp、Module.hpp、Executor.hpp等头文件。MNN-CV轻量图像处理库类似 OpenCV 但核心计算基于 MNN 实现支持图像仿射变换与归一化等常用操作体积远小于 OpenCV。实现位于 tools/cv 与 source/cv/ImageProcess.cpp头文件为 include/MNN/ImageProcess.hpp。MNN-Train端侧训练支持各平台上的模型训练尤其是移动端训练。训练框架位于 tools/trainPython 侧可通过 pymnn/src 中的nn、optim、loss、data等模块使用训练教程见 docs/train。此外MNN 还提供 Codegen 能力codegen 目录可针对 CPU / CUDA / Metal / OpenCL 生成算子源码用于深度定制部署。MNN-LLM在本地设备部署大语言模型README 明确指出 MNN-LLM 是当前生态的重点方向。完整使用指南位于 transformers/README.md其功能分为模型导出与模型推理两部分。模型导出llmexportllmexport是 LLM 模型导出工具可将 LLM 导出为 ONNX 与 MNN 两种格式。脚本位于 transformers/llm/export/llmexport.py。基本使用流程以 Qwen2-0.5B-Instruct 为例# 1. 克隆待导出的 LLM 项目到本地 git clone https://www.modelscope.cn/qwen/Qwen2-0.5B-Instruct.git # 2. 导出模型、tokenizer、embedding 及对应的 MNN 模型 cd ./transformers/llm/export python llmexport.py \ --path /path/to/Qwen2-0.5B-Instruct \ --export mnn导出的产物及其用途如下目录结构见 transformers/README.md文件说明config.json运行时配置文件可手动修改embeddings_bf16.binEmbedding 权重二进制文件推理时使用llm.mnnMNN 模型文件推理时使用llm.mnn.jsonMNN 模型对应的 JSON 文件用于应用 LoRA 或 GPTQ 量化权重llm.mnn.weightMNN 模型权重推理时使用llm.onnx/llm.onnx.data不带权重的 ONNX 模型文件onnx/子目录推理时不使用llm_config.json模型配置hidden_size、层数、KV 形状等推理时使用tokenizer.txt分词器文件llmexport.py的全部参数摘自 transformers/README.mdusage: llmexport.py [-h] --path PATH [--type TYPE] [--lora_path LORA_PATH] [--dst_path DST_PATH] [--test TEST] [--export EXPORT] [--quant_bit QUANT_BIT] [--quant_block QUANT_BLOCK] [--lm_quant_bit LM_QUANT_BIT] [--mnnconvert MNNCONVERT]--path PATH必填。可为本地的模型目录如../chatglm-6b--type TYPE预训练 LLM 模型类型可选--lora_path LORA_PATHLoRA 权重目录默认None表示不应用 LoRA--dst_path DST_PATH导出目录默认./model--test TEST以查询串TEST测试模型推理--export EXPORT导出为 onnx / mnn 模型--quant_bit QUANT_BITMNN 量化位宽4 或 8默认 4--quant_block QUANT_BLOCKMNN 量化块大小默认 0 表示通道级channel-wise--lm_quant_bit LM_QUANT_BITlm_head 层权重量化位宽默认与quant_bit一致--mnnconvert MNNCONVERT本地 MNNConvert 工具路径若无效则使用 pymnn。导出方式的选择直接转 MNN--export mnn需满足安装了 pymnn或通过--mnnconvert指定 MNNConvert 路径二者之一若都不满足脚本会在../../../build/目录下搜索 MNNConvert。该方式目前支持 4bit 与 8bit 量化导出先转 ONNX 再转 MNN若直接转换遇到问题或需要 5bit / 6bit 等其他位宽可先用--export onnx导出 ONNX再手动调用 MNNConvert./MNNConvert --modelFile ../transformers/llm/export/model/onnx/llm.onnx \ --MNNModel llm.mnn --keepInputFormat --weightQuantBits4 --weightQuantBlock128 \ -f ONNX --transformerFuse1 --allowCustomOp --saveExternalData模型推理编译 LLM 运行时LLM 推理需要额外的编译宏详细说明见 transformers/README.md。基础宏-DMNN_LOW_MEMORYtrue -DMNN_BUILD_LLMtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue多模态扩展宏# 视觉VL能力 -DLLM_SUPPORT_VISIONtrue -DMNN_BUILD_OPENCVtrue -DMNN_IMGCODECStrue # 音频能力 -DLLM_SUPPORT_AUDIOtrue -DMNN_BUILD_AUDIOtrue各平台编译示例macOS / Linuxmkdir build cd build cmake ../ -DMNN_LOW_MEMORYtrue -DMNN_BUILD_LLMtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue make -j16x86 架构额外增加MNN_AVX512cmake ../ -DMNN_LOW_MEMORYtrue -DMNN_BUILD_LLMtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue -DMNN_AVX512trueAndroid增加MNN_ARM82与MNN_OPENCLcd project/android mkdir build_64 ../build_64.sh -DMNN_LOW_MEMORYtrue -DMNN_BUILD_LLMtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue -DMNN_ARM82true -DMNN_OPENCLtrue -DMNN_USE_LOGCATtrueiOSsh package_scripts/ios/buildiOS.sh -DMNN_ARM82true -DMNN_LOW_MEMORYtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue -DMNN_BUILD_LLMtrueWebWASM使用 emcmake 编译产生libMNN.a、libMNN_Express.a、libllm.a三个库并通过emcc编译llm_demo.cpp生成llm_demo.js随后可用node llm_demo.js config.json prompt.txt测试。构建细节参考 docs/compile/engine.md 的 Web 章节。推理配置config.json 全参数详解将所有导出文件放入同一目录并添加config.json描述模型名与推理参数。配置项分为四组完整定义见 transformers/README.md模型文件信息均为base_dir下的相对路径base_dir默认取config.json所在目录配置项默认值说明llm_configconfig.jsonllm_config.json路径llm_modelllm.mnnMNN 模型文件路径llm_weightllm.mnn.weight模型权重路径block_modelblock_{idx}.mnn分段模型的 block 文件lm_modellm.mnn分段模型的 lm 文件embedding_modelembedding.mnnEmbedding 使用模型时的路径embedding_fileembeddings_bf16.binEmbedding 使用二进制文件时的路径tokenizer_filetokenizer.txt分词器路径visual_modelvisual.mnnVL 模型的视觉模型路径推理配置max_new_tokens最大生成 token 数默认512reuse_kv多轮对话是否复用 KV Cache默认falsequant_qkv已废弃改用attention_modeattention_modeCPU 注意力算子中 Q/K/V 是否量化可选 0、1、2、8、9、10默认80运行时不用 Flash AttentionQ/K/V 均不量化1不用 Flash AttentionQ/K 采用 8bit 非对称量化V 不量化2不用 Flash AttentionQ/K/V 全部 8bit 非对称量化8使用 Flash AttentionQ/K/V 均不量化9使用 Flash AttentionQ/K 8bit 非对称量化V 不量化10使用 Flash AttentionQ/K/V 全部 8bit 非对称量化use_mmap内存不足时是否用mmap将权重写入磁盘以避免溢出默认false移动端建议设为truekvcache_mmap内存不足时是否对 KV Cache 使用mmap落盘默认falsetmp_path启用 mmap 相关特性时的磁盘缓存目录iOS 上可设为NSTemporaryDirectory()。硬件配置backend_type推理后端默认cpuAndroid GPU 支持openclmacOS/iOS GPU 支持metalthread_numCPU 推理线程数默认4OpenCL 推理建议使用68precision推理精度策略默认low优先使用 fp16memory内存策略默认low启用运行时量化。Sampler 采样配置sampler_type采样器类型支持greedy、temperature、topK、topP、minP、tfs、typical、penalty8 种基础类型及mixed按序依次执行mixed_samplers中的采样器。默认greedy追求输出多样性建议mixed/temperature避免重复建议penaltymixed_samplerssampler_type为mixed时生效默认[topK, tfs, typical, topP, min_p, temperature]temperaturetemperature / topP / minP / tfsZ / typical 策略的温度值默认1.0topKtopK 采样保留的 token 数默认40topPtopP 采样值默认0.9minPminP 采样值默认0.1tfsZtfs 采样的 Z 值默认1.0typicaltypical 采样的 p 值默认1.0penalty重复 token 惩罚因子默认0.0不惩罚n_gram受惩罚的最大 n-gram重复 token n_gram 时强制不生成默认8ngram_factorn1 时对重复 n-gram 的额外惩罚默认1.0penalty_sampler惩罚后的采样策略可为greedy或temperature默认greedy。llm_config.json示例摘自 transformers/README.md{ hidden_size: 1536, layer_nums: 28, attention_mask: float, key_value_shape: [ 2, 1, 0, 2, 128 ], prompt_template: |im_start|user\n%s|im_end|\n|im_start|assistant\n, is_visual: false, is_single: true }推理运行llm_demo 用法transformers/llm/engine/demo/llm_demo.cpp 是标准推理示例支持交互式对话与按行回复两种模式# 使用 config.json ./llm_demo model_dir/config.json # 交互式对话 ./llm_demo model_dir/config.json prompt.txt # 逐行回复 prompt 文件中的每一行 # 不使用 config.json采用默认配置 ./llm_demo model_dir/llm.mnn # 交互式对话 ./llm_demo model_dir/llm.mnn prompt.txt # 逐行回复多模态提示词写法在 prompt 中嵌入标签图像输入imghttps://.../demo.jpeg/imgDescribe the content of the image.可用imghw280, 420/hw.../img指定输入尺寸音频输入audiohttps://.../translate_to_chinese.wav/audioDescribe the content of the audio.LoRA 与 GPTQ参数高效微调与量化权重的接入GPTQ 权重导出时通过--gptq_path指定 GPTQ 量化模型目录python llmexport.py --path /path/to/Qwen2.5-0.5B-Instruct \ --gptq_path /path/to/Qwen2.5-0.5B-Instruct-GPTQ-Int4 --export mnnLoRA 权重支持两种接入方式详见 transformers/README.md合并 LoRA导出时指定--lora_path PATH权重直接合并进模型使用方式与原模型完全相同简单快速但不支持运行时切换分离 LoRA导出时同时指定--lora_path与--lora_split额外生成独立的lora.mnn文件支持运行时切换适合多 LoRA 场景。通过lora.json配置直接加载{ llm_model: lora.mnn, llm_weight: base.mnn.weight }运行时切换示例同一对象串行使用多个 LoRA或创建多个对象并发使用// 创建并加载基础模型 std::unique_ptrLlm llm(Llm::createLLM(config_path)); llm-load(); // 在基础模型之上叠加 lora_1其索引为 lora_1_idx size_t lora_1_idx llm-apply_lora(lora_1.mnn); llm-response(Hello lora1); size_t lora_2_idx llm-apply_lora(lora_2.mnn); llm-response(Hello lora2); // 按索引选择当前 LoRA llm-select_module(lora_1_idx); llm-response(Hello lora1); // 释放已加载的 LoRA llm-release_module(lora_1_idx); llm-release_module(lora_2_idx); // 切回基础模型 llm-select_module(0); llm-response(Hello base);多模态与前沿后端从 LLM Chat 到 Hexagon DSPREADME 的 News 板块展示了 MNN 在 LLM 与多模态应用上的持续演进完整历史见 README.mdMNN Chat Appapps/Android/MnnLlmChat完整的端侧多模态 LLM 应用支持文本生成、图像理解、语音理解与文生图Android 端支持 Qwen3、Qwen2.5 Omni3B/7B、DeepSeek R1 1.5B 等模型及深色模式MNN TaoAvatarapps/Android/Mnn3dAvatar离线 3D 数字人对话应用LLM、ASR、TTS、A2BS、NNR 模型全部本地运行iOS 多模态 LLM Appapps/iOS/MNNLLMChatMNN-Sana-Edit-V2apps/sana基于 Sana 的卡通风格照片编辑输出固定 512x512推荐 10 步采样Qwen3-VL / Qwen3.5 系列支持MNN 3.6.1 新增 Hexagon 后端可在高通 Hexagon DSP 上加速模型推理实现细节见 source/backend/hexagon/README.md。在端侧启用 Hexagon DSP 加速以最新引入的 Hexagon 后端为例source/backend/hexagon/README.md部署流程分为三步1. 编译自定义 HTP 算子库需先安装高通 Hexagon SDK 并设置HEXAGON_SDK_ROOT环境变量cd source/backend/hexagon/htp-ops-lib # 传入目标 DSP 架构版本如 v73 / v75 / v79 bash build.sh v79该脚本在htp-ops-lib/outputs/下生成两个关键库libMNN_htpops.so运行于 CPU 的 Android AArch64 stub 库与libMNN_htpops_skel.so运行于 Hexagon NPU/DSP 的 skeleton 库。2. 编译开启 Hexagon 后端的 MNN无需 Hexagon SDKmkdir build cd build cmake .. -DMNN_HEXAGONON # 其余编译选项按需追加如 Android 交叉编译 make -j83. 设备端部署将可执行文件与两个库推送到设备配置环境变量export ADSP_LIBRARY_PATH/data/local/tmp/hexagon_libs;/vendor/lib/rfsa/adsp;/system/lib/rfsa/adsp export LD_LIBRARY_PATH/data/local/tmp/hexagon_libs:$LD_LIBRARY_PATHLD_LIBRARY_PATH负责让 CPU 侧找到libMNN_htpops.soADSP_LIBRARY_PATH负责让 DSP 加载libMNN_htpops_skel.so。该后端的 CMake 入口同样定义在根 CMakeLists.txt 与后端目录的构建脚本中。文档、社区与论文引用官方文档托管于 Read the Docsdocs目录下的 Sphinx 工程也可按 docs/README 在本地编译 HTMLpip install -r requirements.txt make html产物位于_build/html/MNN 工作台MNN 官网提供 MNN Workbench涵盖开箱即用模型、可视化训练工具与一键部署到多端设备的能力社区交流钉钉讨论群群 4 可加入160170007549群 1/2/3 已满讨论以中文为主也欢迎英文用户LicenseApache 2.0见 LICENSE.txt论文引用若 MNN 或 Walle 的设计对你的研究或生产有所助益可按 README.md 中的 BibTeX 引用 OSDI22 论文WalleMNN 作为移动端推理引擎的早期版本论文发表于 MLSys 2020MNN: A Universal and Efficient Inference Engine同样提供了 BibTeX 条目。快速上手路径建议针对不同的读者角色建议的探索路径如下只想快速跑通推理阅读 docs/start/quickstart_cpp.mdC或 docs/start/quickstart_python.mdPython配合 demo/exec 中的示例程序需要将自有模型接入先读 docs/tools/convert.md 掌握 MNN-Converter 参数再按上文LLM 导出流程处理大模型需要端侧部署 LLM / 多模态模型直接进入 transformers/README.md 与 apps/Android/MnnLlmChat/README.md参考其中的编译宏与config.json配置需要性能调优或新增算子阅读 docs/perf 下的低比特 GEMM、Gemv 带宽等专项文档以及 skills 目录中针对 OpenCL / Vulkan / Metal / Hexagon 等后端的工程实践指南。通过以上内容你可以从零开始完成MNN 编译 → 模型转换 → 端侧推理 → LLM 本地部署的完整技术闭环并依据架构-精度支持矩阵为你的目标设备选择最优的后端与量化组合。【免费下载链接】MNNMNN: A blazing-fast, lightweight inference engine battle-tested by Alibaba, powering high-performance on-device LLMs and Edge AI.项目地址: https://gitcode.com/GitHub_Trending/mn/MNN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表