ARTICLE DETAIL

资讯详情

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

MNN Chat 端侧多模态 Android 大模型应用完全指南

MNN Chat 端侧多模态 Android 大模型应用完全指南 MNN Chat 端侧多模态 Android 大模型应用完全指南【免费下载链接】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 就是为此而生的 Android 应用——由 MNN 开源仓库官方出品底层由 MNN-LLM 推理引擎驱动把文生文、图生文、语音转文本、文生图四类任务全部放在设备本地完成。本文带你从安装、构建、模型市场一路走到采样器源码把这个应用彻底讲透。先装得上获取、安装与设备门槛 拿到 MNN Chat 有两条路。其一直接在 apps/Android/MnnLlmChat/README.md 的 Releases 章节找对应版本的 APK 下载链接如mnn_chat_0_8_3.apk点击安装即可其二从源码自行编译下文会完整展开。装好之后的使用路径很直接进入应用首页的模型市场浏览全部受支持的模型挑选并下载下载完成后就能直接对话侧边栏则保存着历史会话随时可以回到旧话题。不过官方有一句话必须先说清楚当前版本只在 OnePlus 13 和小米 14 Ultra 上完成了实测。大模型对算力和内存的要求很高中低端设备可能出现推理缓慢、卡顿甚至无法运行的情况。从 app/build.gradle 的配置也能印证这种「旗舰取向」minSdk 26Android 8.0、targetSdk 35、只打包arm64-v8a架构并开启了 NDK r27 的 16KB 页大小支持ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZESON这是为了适配采用 16KB 内存页的新设备内核。性能方面官方给出的 CPU 基准结论是在 Android 上用 qwen-7b 跑推理时MNN-LLM 的预填充prefill即模型处理输入提示词、生成首个词元前的阶段速度是 llama.cpp 的 8.6 倍、fastllm 的 20.5 倍解码decoding即逐个生成后续词元的阶段则分别快 2.3 倍和 8.9 倍。下面是 llama.cpp 与 MNN-LLM 在同机上的直观对比动画改得动NDK 环境对齐与一次编译如果你只想跑官方 APK这一章可以跳过但想改参数、换模型、深度调试就需要自己编译。整个流程分两步先编译 MNN 运行库再构建 Android 应用。环境准备与仓库克隆需要 Android Studio、与app/build.gradle中ndkVersion完全一致的 NDK当前为27.2.12479018以及一个指向 NDK 根目录的环境变量。先把仓库克隆下来再导出 NDK 路径git clone https://gitcode.com/GitHub_Trending/mn/MNNexport ANDROID_NDK${YOUR_NDK_ROOT}编译运行库并逐项看懂 CMake 参数project/android/build_64.sh 是 MNN 面向 Android 的通用构建脚本它基于 NDK 自带的 CMake 工具链默认以arm64-v8a架构、c_staticSTL、android-21最低 API 级别做 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 install参数很多按主题拆成三组就清楚了推理核心开关——决定 LLM 跑得多快、多省内存MNN_LOW_MEMORYtrue低内存模式调整权重的存储布局压低运行时内存峰值MNN_CPU_WEIGHT_DEQUANT_GEMMtrue让低比特量化权重在矩阵乘算子里即时反量化参与计算省去提前整体解量化的开销MNN_BUILD_LLMtrue编译 LLM 推理模块源码位于 transformers/llm/engine/MNN_SUPPORT_TRANSFORMER_FUSEtrue把 Transformer 里反复出现的算子组合做结构级融合减少调度开销MNN_ARM82true启用 ARMv8.2 扩展打开 fp16 半精度计算路径版本 0.8.2.2 的 Arm82 fp16 优化就依赖它MNN_USE_LOGCATtrue把 C 侧日志打到 Android logcat方便定位问题。多模态能力开关——对应应用的看图、听音、画图三大场景LLM_SUPPORT_VISIONtrue让 LLM 引擎能加载视觉编码器支撑图像理解MNN_BUILD_OPENCVtrue与MNN_IMGCODECStrue内置 OpenCV 图像处理与图片编解码保证图像预处理不依赖系统库LLM_SUPPORT_AUDIOtrue与MNN_BUILD_AUDIOtrue打开语音识别所需的音频链路MNN_OPENCLtrue编译 OpenCL GPU 后端让支持的设备可以 GPU 加速MNN_BUILD_DIFFUSIONON编译基于扩散模型的文生图推理能力。链接器与安装配置MNN_SEP_BUILDOFF关闭分离构建所有产物合并打包简化应用引用CMAKE_SHARED_LINKER_FLAGS-Wl,-z,max-page-size16384让动态库按 16KB 页对齐与应用的 16KB 页支持相呼应CMAKE_INSTALL_PREFIX.把安装产物留在当前构建目录方便上一步的make install原地产出。make install完成后build_64目录下会生成MNN、MNN_LLM、MNN_Audio、MNN_Diffusion等运行库供应用工程引用。构建应用并推送到设备最后回到应用目录执行安装脚本。installDebug.sh 内部就是两条命令先用 Gradle 构建standard渠道变体的 Debug 包再用 adb 装到已连接的设备上cd ../../../apps/Android/MnnLlmChat ./installDebug.sh顺带一提 app/build.gradle 里的两个细节applicationId为com.alibaba.mnnllm.android按store维度区分standard与googleplay两个渠道noCompress名单里列了weight、mnn、bin、json、md等扩展名避免 APK 打包时把动辄几 GB 的模型文件再压缩一遍。用得动模型市场配置与双源下载 ⬇️模型市场是 MNN Chat 的入口其清单由 app/src/main/assets/model_market.json 描述当前version为 22Kotlin 侧由modelmarket包里的ModelMarketViewModel、ModelMarketAdapter、FilterDialogFragment负责解析与渲染。这个 JSON 的骨架有四块tagTranslations把能力标签翻译成中文如Vision→图像理解、ImageGen→文生图、Think→深度思考quickFilterTags是顶部快捷筛选行包括Think、NPU、Vision、ImageGen、Audio、Video等vendorOrder规定供应商的展示顺序覆盖 Qwen、DeepSeek、Gemma、LFM、Smol、stability.ai、Llama、FastVLM、MiMo、ERNIE、Baichuan、Phi、MobileLLM、TinyLlama、THUDM、InternLM、01.AI、Hunyuan、MiniCPM、Lingshu 等家族models数组则是每个模型的条目含modelName、tags、categories和sources。sources字段体现了双下载源设计同一模型通常同时挂在 HuggingFace 与 ModelScope 两个仓库下例如gemma-4-E2B-it-MNN同时有taobao-mnn/...和MNN/...两条源应用会按系统语言自动挑选默认源中文环境倾向 ModelScope下载失败时可切换备用源。围绕下载还有一批实用机制远程模型更新后支持增量热更新不必删旧重下支持通过 adb push 本地导入模型下载进度、「有更新可用」等状态由ModelDownloadManager统一管理。想回归验证下载链路可参考 docs/mobile_use.md 里的流程——用adb logcat -d | grep onDownloadProgress盯进度事件下载完成后确认按钮变为「对话」、状态文案显示文件大小且不出现「(有更新可用)」。看得深推理引擎、采样器与会话管理安装和使用只是表象MNN Chat 的真正价值在底层。它把「模型怎么加载、词元怎么采样、会话怎么维持」三件事分别交给了 C 引擎和 Kotlin 层。LlmConfig一份 JSON 管住所有模型引擎侧的配置集中在 transformers/llm/engine/src/llmconfig.hpp 的LlmConfig类中既能读 JSON 配置也兼容直接传.mnn模型文件的旧用法。配置大致分五组模型文件组llm_model、llm_weight、visual_model、audio_model、tokenizer_file等默认名分别为llm.mnn、llm.mnn.weight、visual.mnn、audio.mnn、tokenizer.txt生成参数组max_all_tokens默认 2048、max_new_tokens默认 512、reuse_kv、prompt_cache后端参数组backend_type默认cpu、thread_num默认 4、precision默认low另有power与memory档位内存优化组use_mmap用内存映射加载权重、use_cached_mmap、mmap_size默认 1024、kvcache_mmap模板组system_prompt_template默认形如 system\n%s【免费下载链接】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),仅供参考
返回列表