
MNN Chat 手机跑多模态大模型文本、图像、音频、文生图四种任务的端侧完整方案【免费下载链接】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手机断网也能跑多模态大模型这件事 MNN Chat 已经做到了量产可用。它是 MNN 官方维护的 Android 工程内置模型市场文本生成、图像理解、语音转写、文生图四类模型全部在设备端完成推理驱动引擎是 MNN-LLM。装 APK 五分钟就能用想深挖的话还能一路读到 C 内核。能力速览一个 App 覆盖四类任务能力说明文本对话支持 Qwen、DeepSeek、Gemma、LFM、Llama含 TinyLlama、MobileLLM、Baichuan、Yi、InternLM、Phi、ReaderLM、Smolm 等供应商的模型图像理解图生文视觉模型与 LLM 同进程运行音频转文本语音输入走设备端 ASR0.6.8 起还有 ASRTTS 实时语音通话文生图基于扩散模型stable-diffusion-v1-5 系0.1 版就内置隐私推理全在本地模型权重与聊天记录不离开设备架构层面保证多轮对话靠历史消息回填提示词实现0.6.8 起聊天界面内可直接切模型历史会话收在侧边栏随时点开继续。三条上手路径按「多想马上用上」排序① APK 直装5 分钟跑起来版本信息在 apps/Android/MnnLlmChat 的 README.md Releases 章节当前是0.8.3versionCode 830APK 文件形如mnn_chat_0_8_3.apk下载后直接安装。使用路径打开应用 → 模型市场按标签/供应商筛选 → 下载模型 → 应用内开聊。顺带说一句如果你在仓库里看到旧的project/android/apps/MnnLlmApp目录那只是迁移提示页——工程已更名 MNN Chat 并搬到apps/Android/MnnLlmChat以新主页为准。② 源码构建NDK 对齐 一行 CMake 编译构建前确认 NDK 与app/build.gradle的ndkVersion一致当前是27.2.12479018export ANDROID_NDK${YOUR_NDK_ROOT} git clone https://gitcode.com/GitHub_Trending/mn/MNNproject/android/build_64.sh是 MNN 的 Android 通用构建脚本NDK 工具链、默认 arm64-v8a、c_staticSTL、android-21、Release 模式。建好目录后把参数一次传进去cd project/android mkdir build_64 cd build_64 ../build_64.sh -DMNN_LOW_MEMORYtrue -DMNN_CPU_WEIGHT_DEQUANT_GEMMtrue -DMNN_BUILD_LLMtrue -DMNN_SUPPORT_TRANSFORMER_FUSEtrue -DMNN_ARM82true -DMNN_USE_LOGCATtrue -DMNN_OPENCLtrue -DLLM_SUPPORT_VISIONtrue -DMNN_BUILD_OPENCVtrue -DMNN_IMGCODECStrue -DLLM_SUPPORT_AUDIOtrue -DMNN_BUILD_AUDIOtrue -DMNN_BUILD_DIFFUSIONON -DMNN_SEP_BUILDOFF -DCMAKE_SHARED_LINKER_FLAGS-Wl,-z,max-page-size16384 -DCMAKE_INSTALL_PREFIX. make installmake install后MNN、MNN_LLM、MNN_Audio、MNN_Diffusion等运行库装进build_64供应用工程引用。其中最影响结果的 5 个参数参数作用-DMNN_BUILD_LLMtrue编译 LLM 推理模块transformers/llm/engine没有它应用里没有大模型可跑-DMNN_ARM82true启用 ARMv8.2 扩展打开 fp16 半精度计算路径-DMNN_BUILD_DIFFUSIONON编译扩散模型推理能力承载文生图-DMNN_LOW_MEMORYtrue低内存模式优化权重存储布局降低运行时内存占用-DCMAKE_SHARED_LINKER_FLAGS-Wl,-z,max-page-size16384链接产物按 16KB 页对齐适配 16KB page 新内核设备其余 10 个参数分别负责 OpenCL GPU 后端、视觉/音频支持、Transformer 算子融合、图片编解码、logcat 日志、权重反量化 GEMM 等。运行库就绪后装应用cd ../../../apps/Android/MnnLlmChat ./installDebug.shinstallDebug.sh内部两步./gradlew assembleStandardDebug打 standard 渠道 Debug 包再adb install app/build/outputs/apk/standard/debug/app-standard-debug.apk装机。应用的网络与 UI 依赖均为开源件okhttp 4.12.0、retrofit 2.9.0、Android-SpinKit、expandable-fab版本写在app/build.gradle的 dependencies 里。③ 从 PC 远程调用手机大模型局域网直连 vs adb forwardMNN Chat 在手机上起 HTTP API默认 8080 端口apps/Android/MnnLlmChat 根目录的test_api.py一键回归。选哪种连法取决于你是否用回环地址模式命令说明局域网直连python3 test_api.py --host PHONE_LAN_IP --port 8080 --test all不走 adb forward 时禁止 127.0.0.1必须填手机局域网 IPadb forwardadb forward tcp:8080 tcp:8080后python3 test_api.py --adb-forward --host 127.0.0.1 --port 8080 --test all建一条端口隧道回退到本机回环地址test_api.py也支持--test models/chat/stream分项测试和--token鉴权。8080 上还有 Anthropic 兼容的/v1/messages端点把 Claude 客户端的ANTHROPIC_BASE_URL指向手机 IP即可把本地大模型当 Claude 用。性能拆解MNN-LLM 比 llama.cpp 快在哪上图是 qwen-7b 在 Android 上与 llama.cpp 的实测对比。官方口径的数字Android CPU 上 prefill 是 llama.cpp 的 8.6 倍、fastllm 的 20.5 倍解码分别是 2.3 倍与 8.9 倍GPU 侧 prefill 最高 25.3 倍、解码 7.1 倍对比 MLC-LLM 为 2.8 倍与 1.7 倍——但 Qwen2-7B 短提示词场景下因 MLC-LLM 采用对称量化MNN-LLM 略有落后。方法学细节见论文MNN-LLM: A Generic Inference Engine for Fast Large Language Model Deployment on Mobile Devices。速度来自四条优化路径权重量化即时反量化低比特权重在矩阵乘时按需反量化内存与带宽同时下降mmap 按需映射权重文件由操作系统当内存一样映射不必一次性全读进 RAM模型加载明显变快ARMv8.2 fp16 路径支持 Armv8.2 的机器走半精度计算CPU LinearAttention 专用路径0.8.2.2 引入随 MNN 运行库刷新打包进 App。配置入口在transformers/llm/engine/src/llmconfig.hpp的LlmConfig既能加载llm_config.json也兼容旧.mnn模型文件用法。按模型文件llm_model、llm_weight、visual_model、audio_model、后端backend_type默认 cpu、thread_num4、precisionlow、内存use_mmap、mmap_size默认 1024、kvcache_mmap、提示词模板四组组织另留了投机解码入口speculative_type可选 lookahead、mtp、draftmodel、eagle。生成质量由transformers/llm/engine/src/sampler.hpp控制最常动三个参数参数默认值含义temperature0.8越高输出越随机topP0.9只在累积概率到 90% 的前缀里挑词max_new_tokens512限制单次生成长度采样器默认按topK → tfs → typical → topP → min_p → temperature的多阶段混合流水线跑0.6.8 起混合模式还能挂 penalty 惩罚。应用设置页里的 sampler type、最大生成 Token 调的就是这几项。源码地图想改代码该看哪模型市场清单由app/src/main/assets/model_market.json描述当前version为 22Kotlin 侧由 modelmarket 包的ModelMarketViewModel、ModelMarketAdapter等解析渲染结构四块tagTranslations能力标签中文映射如Vision→图像理解、ImageGen→文生图、quickFilterTags快捷筛选入口深度思考、NPU、图像理解、文生图、音频等、vendorOrder供应商展示顺序、models模型条目每条含modelName、tags、categories、sources。同一模型通常在sources里同时给 HuggingFace 与 ModelScope 两个仓库路径中文系统默认走 ModelScope 源0.5.1 引入0.6.8 加热更新远端模型变化时增量更新不用整包重下。进度回调onDownloadProgress与更新标记onDownloadHasUpdate都归ModelDownloadManager管。回归验证下载链路可用adb -s YOUR_DEVICE_ID logcat -d | grep onDownloadProgress完成判据按钮变「对话」、状态显示文件大小且不出现「(有更新可用)」完整流程写在 apps/Android/MnnLlmChat/docs/mobile_use.md。会话与多模态由app/src/main/java/com/alibaba/mnnllm/android/llm/LlmSession.kt驱动load()先调checkAndMergeSplitFiles()合并拆分的大权重文件再经ModelConfig.loadMergedConfig合并默认与模型自定义配置启用 mmap 时先取 mmap 缓存目录最后传 C 层创建原生会话生成阶段 token 经GenerateProgressListener逐个回调 UI支持中途终止和切换思考模式。JNI 侧每种模态一个会话文件app/src/main/cpp/下llm_session.cpp管纯文本与多模态 LLM、diffusion_session.cpp管文生图、sana_session.cpp管 Sana 图像编辑、audio 目录承载语音Kotlin 层LlmSession、DiffusionSession、SanaSession与之一一对应四类任务因此同进程共存。设备红线与适合谁先说清楚门槛app/build.gradle锁定minSdk 26Android 8.0、targetSdk 35只打包arm64-v8a并开启 NDK r27 的 16KB 页大小支持ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZESON。32 位或老机型基本不用考虑。官方声明该版本只在OnePlus 13 和小米 14 Ultra上完成测试——大模型对设备性能要求高低配机上可能推理缓慢、不稳定甚至跑不起来其他设备不保证。想深挖看两处就够transformers/llm/engine是引擎本体src/llm.cpp是主推理流程app/mls.cpp与mls_server.cpp是模型服务和 API 服务端回答「为什么快」apps/Android/MnnLlmChat是完整应用工程回答「怎么串起来」。适合谁想在手机上验证 7B 级模型的开发者、需要隐私敏感场景数据不出设备的团队、研究端侧推理优化量化、mmap、fp16、投机解码的工程师。0.1 首个公开版就带模型搜索、下载、对话和 stable-diffusion-v1-5 文生图0.4.x 加入 Qwen3 深度思考开关与深色模式0.6.8 引入热更新与实时语音通话0.8.x 补上 CPU LinearAttention、Arm82 fp16 路径和 Anthropic 协议兼容——迭代节奏可以参考 Releases 章节。【免费下载链接】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),仅供参考