☰
MNN Chat 手机跑多模态大模型:文本、图像、音频、文生图四种任务的端侧完整方案
2026/10/16 5:47:43 网站建设 项目流程

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 同进程运行
音频转文本语音输入走设备端 ASR,0.6.8 起还有 ASR+TTS 实时语音通话
文生图基于扩散模型(stable-diffusion-v1-5 系),0.1 版就内置
隐私推理全在本地,模型权重与聊天记录不离开设备,架构层面保证

多轮对话靠历史消息回填提示词实现,0.6.8 起聊天界面内可直接切模型;历史会话收在侧边栏,随时点开继续。

三条上手路径:按「多想马上用上」排序

① APK 直装:5 分钟跑起来

版本信息在 apps/Android/MnnLlmChat 的 README.md Releases 章节,当前是0.8.3(versionCode 830),APK 文件形如mnn_chat_0_8_3.apk,下载后直接安装。使用路径:打开应用 → 模型市场按标签/供应商筛选 → 下载模型 → 应用内开聊。

顺带说一句:如果你在仓库里看到旧的project/android/apps/MnnLlmApp目录,那只是迁移提示页——工程已更名 "MNN Chat" 并搬到apps/Android/MnnLlmChat,以新主页为准。

② 源码构建:NDK 对齐 + 一行 CMake 编译

构建前确认 NDK 与app/build.gradle的ndkVersion一致,当前是27.2.12479018:

export ANDROID_NDK=${YOUR_NDK_ROOT} git clone https://gitcode.com/GitHub_Trending/mn/MNN

project/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_MEMORY=true -DMNN_CPU_WEIGHT_DEQUANT_GEMM=true -DMNN_BUILD_LLM=true -DMNN_SUPPORT_TRANSFORMER_FUSE=true -DMNN_ARM82=true -DMNN_USE_LOGCAT=true -DMNN_OPENCL=true -DLLM_SUPPORT_VISION=true -DMNN_BUILD_OPENCV=true -DMNN_IMGCODECS=true -DLLM_SUPPORT_AUDIO=true -DMNN_BUILD_AUDIO=true -DMNN_BUILD_DIFFUSION=ON -DMNN_SEP_BUILD=OFF -DCMAKE_SHARED_LINKER_FLAGS='-Wl,-z,max-page-size=16384' -DCMAKE_INSTALL_PREFIX=." make install

make install后MNN、MNN_LLM、MNN_Audio、MNN_Diffusion等运行库装进build_64,供应用工程引用。其中最影响结果的 5 个参数:

参数作用
-DMNN_BUILD_LLM=true编译 LLM 推理模块(transformers/llm/engine),没有它应用里没有大模型可跑
-DMNN_ARM82=true启用 ARMv8.2 扩展,打开 fp16 半精度计算路径
-DMNN_BUILD_DIFFUSION=ON编译扩散模型推理能力,承载文生图
-DMNN_LOW_MEMORY=true低内存模式,优化权重存储布局降低运行时内存占用
-DCMAKE_SHARED_LINKER_FLAGS='-Wl,-z,max-page-size=16384'链接产物按 16KB 页对齐,适配 16KB page 新内核设备

其余 10 个参数分别负责 OpenCL GPU 后端、视觉/音频支持、Transformer 算子融合、图片编解码、logcat 日志、权重反量化 GEMM 等。运行库就绪后装应用:

cd ../../../apps/Android/MnnLlmChat ./installDebug.sh

installDebug.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 forward

MNN 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,必须填手机局域网 IP
adb 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为 22),Kotlin 侧由 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 26(Android 8.0)、targetSdk 35,只打包arm64-v8a,并开启 NDK r27 的 16KB 页大小支持(ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON)。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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询