ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MNN Chat Android App 完全指南:多模态端侧 LLM 应用的使用、构建与原理

MNN Chat Android App 完全指南:多模态端侧 LLM 应用的使用、构建与原理 MNN Chat Android App 完全指南多模态端侧 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导读本文围绕 MNN 仓库中的 Android 端全功能多模态大语言模型应用 MnnLlmChat 展开系统讲解它的核心能力文生文、图生文、语音转文本、基于扩散模型的文生图、从源码构建的完整流程NDK 环境、MNN 引擎库 CMake 参数、APK 打包安装、模型市场配置格式、PC 端 API 接入方式以及底层 MNN-LLM 推理引擎的性能表现与实现原理。读完本文你将掌握如何从当前仓库源码独立编译出一款可运行在安卓手机上的多模态 LLM 聊天应用并理解其端侧部署的关键工程决策。一、应用定位与核心能力MnnLlmChat 是 MNN 项目官方提供的Android 全功能多模态语言模型LLM应用同系列的 iOS 版见 apps/iOS/MNNLLMChat/README.md应用包名与版本信息定义在 app/build.gradlenamespace为com.alibaba.mnnllm.android当前版本号0.8.3versionCode 830minSdk 26、targetSdk 35。1.1 多模态支持应用覆盖四大类任务仓库 README 用四张界面截图展示了这四种能力见下文配图文生文text-to-text通用对话支持 Markdown 渲染工程内置 Markwon forkv4.6.2-mnnchat.1以支持 LaTeX 与表格流式渲染图生文image-to-text上传图片后由视觉模型如 Qwen2-VL、Qwen3-VL、MiniCPM-V 等分析描述支持多图输入0.7.6 版本起语音转文本audio-to-text语音输入与输出结合 ASR/TTS 实现实时语音通话0.6.8 版本起文生图text-to-image基于扩散模型生成图像例如stable-diffusion-v1-5MNN 的 OpenCL 路径。1.2 广泛的模型兼容性应用支持多家主流模型提供商与模型家族包括Qwen通义千问系列含 Qwen Omni、Qwen3、Qwen3-VL、Qwen3.5、Gemma含 Gemma 3/4、Llama含 TinyLlama 与 MobileLLM、Baichuan、Yi、DeepSeek、InternLM、Phi、ReaderLM、SmolLM等。视觉方向还覆盖 MiniCPM-V、SmoVLM、FastVLM、WebSailor、Lingshu 等扩散方向支持 stable-diffusion-v1-5、Sana 图像编辑等。1.3 本地优先与数据隐私应用完全在设备本地运行推理不上传任何数据到外部服务器从架构上保证了数据隐私。二、安装与快速使用2.1 获取应用有两种途径直接下载通过 README 的 Releases 小节下载官方发布的 APK历史版本见仓库 README 中# Releases一节的下载说明或通过 Google Play 渠道安装自行构建按下一章流程从源码编译。2.2 应用内使用流程安装完成后在模型市场Model Market浏览全部受支持的模型按本地/多模态类型/模型厂商等维度筛选0.5.0 版本起支持点击下载所需模型应用内会显示下载进度与模型文件大小下载完成后点击「对话」直接与模型交互通过侧边栏访问历史会话随时回看或继续之前的对话。2.3 设备适配注意事项官方明确提示当前版本仅在OnePlus 13与Xiaomi 14 Ultra上完成过测试。由于 LLM 对算力与内存要求很高许多低配或入门级设备可能出现推理缓慢、应用不稳定甚至无法运行的情况其他设备的稳定性无法保证。若遇到问题可提交 issue 寻求帮助。这与minSdk 26、模型动辄数 GB 权重、以及下述针对 Armv8.2 与 OpenCL 的深度优化路径直接相关。三、从源码构建 MNN Chat3.1 环境准备Android Studio用于打开与调试工程NDK版本需与 app/build.gradle 中声明的ndkVersion 27.2.12479018保持一致设置环境变量指向 NDK 根目录export ANDROID_NDK${YOUR_NDK_ROOT}当前仓库本身就是完整的 MNN 源码树构建脚本位于project/android/无需额外下载 MNN 依赖直接基于本仓库构建即可。3.2 构建 MNN 引擎库仓库 README 给出了库构建命令工程内 build.sh 则维护了一份更完整含 QNN/Plugin 开关的等价脚本其核心命令如下cd project/android mkdir -p 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 \ -DBUILD_PLUGINON \ -DMNN_QNNOFF \ -DCMAKE_SHARED_LINKER_FLAGS-Wl,-z,max-page-size16384 \ -DCMAKE_INSTALL_PREFIX. make install各关键 CMake 开关的作用与选择依据如下CMake 选项取值作用说明MNN_LOW_MEMORYtrue开启低内存模式通过按需加载/分片存储降低常驻内存是端侧运行大模型的必要配置MNN_CPU_WEIGHT_DEQUANT_GEMMtrue权重反量化与 GEMM 融合避免先解压权重再计算显著降低带宽占用MNN_BUILD_LLMtrue启用 MNN-LLM 推理框架LLM 专属优化路径MNN_SUPPORT_TRANSFORMER_FUSEtrue开启 Transformer 结构算子融合如 Attention、FFN 相关融合MNN_ARM82true启用 Armv8.2 特性如 fp16 指令集配合 README 0.8.2.2 提到的 Arm82 fp16 优化路径MNN_USE_LOGCATtrue日志输出到 Android logcat便于调试adb logcat观测下载/推理事件MNN_OPENCLtrue启用 OpenCL GPU 后端扩散模型文生图走*-mnn-opencl路径LLM_SUPPORT_VISIONtrue编译视觉模型VLM支持如 Qwen2-VL/Qwen3-VLMNN_BUILD_OPENCVtrue内置 MNN OpenCV 图像处理能力图像解码、预处理MNN_IMGCODECStrue内置图像编解码器用于图片输入LLM_SUPPORT_AUDIOtrue编译音频模型支持如 Qwen2-Audio、Qwen OmniMNN_BUILD_AUDIOtrue内置音频处理模块MNN_BUILD_DIFFUSIONON编译扩散模型stable-diffusion 等文生图支持MNN_SEP_BUILDOFF关闭分离构建统一打包运行时BUILD_PLUGINON启用插件机制build.sh 中补充README 命令行未列出MNN_QNNOFF关闭高通 QNN 后端如需骁龙 NPU 加速可打开并另行准备 QNN SDK参考 prepare_qnn_deps.shCMAKE_SHARED_LINKER_FLAGS-Wl,-z,max-page-size16384以 16KB 页对齐链接共享库适配 Android 15 的 16KB 页大小要求CMAKE_INSTALL_PREFIX.安装到当前目录供 Android 工程引用make install会把产物安装到build_64目录Android 工程通过 build_prebuilt.gradle 引用这套预编译运行时README 0.8.3 的 Bugfix 也提到「清理 Android 原生链接以匹配打包的 MNN 运行时库」。3.3 构建并安装 APK库构建完成后回到应用工程目录执行cd ../../../apps/Android/MnnLlmChat ./installDebug.shinstallDebug.sh 的实际内容只有两步——先由 Gradle 构建 Debug 包再通过 adb 安装到已连接的设备./gradlew assembleStandardDebug adb install app/build/outputs/apk/standard/debug/app-standard-debug.apk说明工程存在standard、googleplay等 flavorflavorDimensions store默认 Debug 包为app-standard-debug.apk。如需在包内附带内置模型可给 Gradle 传ADD_BUILTINtrue见 app/build.gradle 中downloadAndUnzipBuiltinModels相关任务。3.4 工程配置要点app/build.gradle16KB 页大小支持externalNativeBuild.cmake中传入-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZESON配合-Wl,-z,max-page-size16384共同保证应用在 16KB 页对齐的新一代安卓设备上可用权重免压缩androidResources.noCompress声明了weight/part1~part10/mnn/bin/jar/mdl/msc/mv/txt/json/md等扩展名不压缩避免模型文件在打包时被二次压缩导致 mmap 失效README 0.8.2.2 也提到修复了「部分初始化 mmap 权重导致的死锁」可选 Firebase通过-PENABLE_FIREBASEtrue并提供google-services.json才启用 Crashlytics 崩溃上报默认关闭Markdown 渲染默认使用 Markwon forkJitPack 分发也可设置USE_LOCAL_MARKWON指向本地 AAR支持 LaTeX 公式与表格流式渲染Sherpa MNN 原生库通过 downloadSherpaMnn.gradle 在preBuild阶段自动下载 ASR/TTS 所需的原生库对应实时语音通话能力。四、模型市场配置与下载链路4.1 模型清单配置格式应用内置的模型市场清单由 JSON 配置文件驱动仓库提供了模板 model-config.json.example{ models: [ { name: Qwen3-0.6B-MNN, url: http://30.7.194.163:8080/Qwen3-0.6B-MNN.zip, modelName: Qwen3-0.6B-MNN, vendor: Qwen, size_gb: 0.6, tags: [Think], categories: [recommended, qwen], extra_tags: [ThinkingSwitch], modelId: Builtin/MNN/Qwen3-0.6B-MNN, market_version: 6 } ] }字段含义字段说明name模型市场展示名称url模型压缩包下载地址zip内含 MNN 权重与配置modelName加载时使用的模型名vendor厂商标签Qwen、DeepSeek 等用于厂商筛选size_gb模型大小GB用于列表展示与空间预估tags功能标签如Think表示支持思考模式categories分类recommended推荐位、厂商分类等extra_tags附加能力标签如ThinkingSwitch表示支持思考开关modelId全局唯一模型标识Builtin/MNN/...表示内置模型market_version市场清单版本用于模型更新检测4.2 下载状态与观测模型下载是「列表 → 下载 → 解压 → 就绪」的状态机仓库配套的下载链路测试指南 docs/mobile_use.md 描述了完整的验证方式通过日志监听下载进度事件adb -s YOUR_DEVICE_ID logcat -d | grep onDownloadProgress下载完成后 UI 按钮从「下载」变为「对话」状态文本显示文件大小如626.72 MB且不应出现「(有更新可用)」标记更新检测依赖onRepoInfo回调中的hasUpdate标志由ModelDownloadManager的onDownloadFileFinished在下载完成后清除若状态错误地显示「有更新可用」可沿这条回调链排查该管理器位于应用源码app/src/main下。仓库还附带 mcp.json 与tests/目录用于移动端 MCP 自动化回归测试。五、把手机变成 API 服务PC 端接入应用内置了ApiService0.7.3.1 版本专门做过优化可把手机上的模型以 HTTP 服务形式暴露给 PC 调用。接入说明见 docs/api_access_from_pc.md。5.1 连接模式模式一局域网直连无需 adb forward——手机与 PC 处于同一局域网时直接用手机局域网 IPpython3 test_api.py --host PHONE_LAN_IP --port 8080 --test all # 示例 python3 test_api.py --host 192.168.1.23 --port 8080 --test all模式二adb forward——若希望使用127.0.0.1必须先用 adb 做端口转发adb forward tcp:8080 tcp:8080 python3 test_api.py --adb-forward --host 127.0.0.1 --port 8080 --test all重要规则未做 adb forward 时不要使用127.0.0.1/localhost必须使用手机的局域网 IP。5.2 Anthropic 兼容端点MnnLlmChat暴露了Anthropic 协议兼容的/v1/messages端点0.8.1 版本起持续优化该协议兼容性。支持自定义 Base URL 的 Claude 客户端可这样指向手机export ANTHROPIC_BASE_URLhttp://PHONE_LAN_IP:8080 export ANTHROPIC_API_KEYMNNLLMCHAT_API_KEY未使用 adb forward 时同样必须替换为真实局域网 IP。5.3 测试脚本与端点仓库根部的 test_api.py 实现了完整的 API 自测覆盖GET /v1/models列出当前已加载/可用的模型MnnApiTester.test_modelsPOST /v1/chat/completions非流式对话test_chat默认模型qwen2.5-7b-instruct参数含max_tokens、temperature流式对话test_stream_chat按 SSE 逐行解析data:前缀的增量以[DONE]结束。脚本默认使用Authorization: Bearer mnn-llm-chat头访问MnnApiTester构造函数的token默认值实测接入时需与手机上 ApiService 的配置保持一致。六、版本演进与功能时间线仓库 README 的 Releases 小节记录了从 0.1 到 0.8.3 的完整演进关键里程碑如下版本关键内容0.1首个公开版本支持模型搜索/下载/对话diffusionstable-diffusion-v1-5、audioqwen2-audio-7b、visionqwen-vl-chat、qwen2-vl-2b/7b0.2针对 DeepSeek R1 1.5B 优化支持 Markdown0.2.1 / 0.2.2支持 ModelScope 下载mmap 加速加载、版本更新检测0.3.0新增设置页、下载速度显示、modelers.cn 下载源0.4.0兼容 Qwen3 并支持 Deep Thinking 开关深色模式Material 3可配置 sampler、system prompt、max new tokens0.4.3 / 0.4.4支持 Qwen Omni、小米 Mimo UIQwen Omni 3B/7B 音频输出0.5.0Qwen3-30B-A3B、SmoVLM/FastVLM支持本地模型adb push精度、线程数等高级设置按本地/模态/厂商筛选隐藏思考过程0.5.1DeepSeek-R1-0528-Qwen3中文系统默认走 ModelScope0.6.8SmolLM3-3B、gemma-3-1b混合采样器支持 penalty聊天页内切换模型ASRTTS 实时语音通话0.7.0 / 0.7.1gpt-oss-20bMiniCPM-V-4、WebSailor-3B、Lingshu-7B 视觉模型0.7.5 / 0.7.6 / 0.7.7Qwen3-VL4B/8B/30B-A3B、smolvlm-video 视频输入多图输入Sana 图像编辑0.8.0 / 0.8.1支持 Qwen3.5Qwen3.5 思考模式切换Anthropic 协议兼容性提升0.8.2语音聊天实时视觉修复模型设置配置路径0.8.2.2引入 CPU LinearAttention 与 Arm82 fp16 优化路径TopKV2 覆盖 OpenCL/Metal 后端0.8.3Gemma 4 全系多模态 E2B/E4B、vision 26B-A4B/31B、LFM 模型家族、Qwen3.5 推理蒸馏模型整体演进趋势清晰从单模态聊天 → 多模态视觉/语音/扩散→ 端侧 API 服务 → 推理性能与稳定性打磨。七、MNN-LLM 推理引擎性能与原理7.1 引擎定位MNN-LLM 是 MNN 面向大模型部署的通用推理框架编译开关即上文MNN_BUILD_LLM设计目标是同时服务移动端与本地 PC通过模型量化、混合存储hybrid storage与硬件特化优化解决大模型的高内存占用与高计算成本问题。仓库 README 0.8.2.2 中的「CPU LinearAttention」「Arm82 fp16 优化路径」「TopKV2 在 OpenCL/Metal 的执行覆盖」等版本说明正是该框架持续迭代的侧面证据。7.2 官方文档给出的基准对比以下数据来自仓库 README「About MNN-LLM」一节均以官方自测为前提条件Android CPU 推理对比模型 qwen-7bMNN-LLM 的prefill预填充速度较 llama.cpp 快 8.6 倍、较 fastllm 快 20.5 倍decoding解码速度分别快 2.3 倍与 8.9 倍GPU 评测相对 llama.cpp 最高可达25.3 倍 prefill、7.1 倍 decoding加速相对 MLC-LLM 分别提升2.8 倍与 1.7 倍局限性在 Qwen2-7B 搭配较短 prompt 的场景下MNN-LLM 相对 MLC-LLM 略有下降官方归因于 MLC-LLM 采用了对该场景更有利的对称量化技术。说明以上为项目官方文档中的对比结论实际效果与设备、量化方案、prompt 长度强相关引用时请保留上述前提。更详细的评测方法可参考论文《MNN-LLM: A Generic Inference Engine for Fast Large Language Model Deployment on Mobile Devices》。7.3 相关源码与测试入口想深入验证引擎行为可关注仓库中的以下路径LLM 运行时实现transformers/llm37 个 C 实现文件与 LLM 相关工具扩散模型支持transformers/diffusionAndroid 构建脚本project/android/build_64.sh 与 project/android/build_32.sh应用测试资产test.sh、test_api.py、tests/目录。八、构建基础与致谢组件应用工程构建在多个开源组件之上见仓库 README「Acknowledgements」包括progress-dialog进度弹窗、okhttp / retrofit网络请求与下载、Android-SpinKit加载动画、expandable-fab悬浮按钮、Android-Wave-Recorder语音录制等原生侧则依赖 Markwon fork 与 Sherpa MNN 的 ASR/TTS 库。若需二次开发建议先阅读应用源码结构app/src/main下的ModelDownloadManager、ApiService、Chat Activity等模块见 app/src再结合 docs/mobile_use.md 与 docs/api_access_from_pc.md 验证下载链路与 API 服务。延伸阅读应用主 README多语言版本apps/Android/MnnLlmChat/README_CN.md、apps/Android/MnnLlmChat/README_TW.mdiOS 同款应用apps/iOS/MNNLLMChat/README.mdMNN LLM 通用文档docs/transformers/llm.md构建脚本apps/Android/MnnLlmChat/build.sh、apps/Android/MnnLlmChat/installDebug.sh模型清单模板apps/Android/MnnLlmChat/model-config.json.example【免费下载链接】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),仅供参考
返回列表