MNN × Qwen 实战:离线运行大模型的正确姿势

简介: 本期教程带你用MNN+Qwen在手机端部署大模型,从安装MNN Chat体验离线对话,到源码编译、模型转换与推理测试,再到Android/iOS移动端部署全流程实战,并提供精度与性能调优秘籍,助力端侧AI创新挑战赛。

image.png

👀 欢迎来到「端侧AI创新挑战赛」官方教程第四期!

上一期,我们把 Qwen3 装进了树莓派,用一块 OLED 屏和一个九键键盘,打造出了一台真正离线对话的“电子鹦鹉”。

本期,主战场转向你最熟悉的设备——手机。我们将通过 MNN + Qwen,手把手完成端侧大模型的部署、运行与调优。


本教程完全遵从你的开发习惯:先上手体验,再深入源码,最后进阶调优。无论你是想快速验证创意,还是希望深度定制自己的端侧 AI 应用,这里都提供一条清晰、可复现的全链路路径。

基础篇 认识我们的工具箱

在开始之前,让我们先快速了解一下本次实战的几位“主角”。


image.png

快速体验篇  安装 MNN Chat,一键玩转端侧大模型

在深入研究代码之前,最直观的方式是先体验一下最终成品的效果。我们强烈建议您先下载官方已经打包好的 MNN Chat APP 。


MNN Chat 是一个功能强大的示例应用,它集成了MNN-LLM的核心能力,支持文本、语音、图像等多种模态的交互。


如何安装


  • Android 用户
  1. 前往 MNN Github 的 Releases页面下载最新的APK安装包。
  2. (可选)在Google Play商店搜索“MNN Chat”。
  • iOS用户
  1. 在 App Store(美区)搜索“MNN Chat”。
  2. (可选)从 Github 下载源码,使用Xcode编译安装。
    image.png

如何使用


1、进入模型市场:打开 APP,在“模型市场”中,你可以看到MNN官方支持的各类模型。

2、下载Qwen模型:找到你感兴趣的 Qwen 模型(如 Qwen3-0.6B-MNN),点击下载。

3、开始对话:下载完成后,进入对话界面,即可开始与本地运行的 Qwen 模型进行交互!你甚至可以尝试图片问答等多模态功能。

image.png

实战篇  从零构建与测试

体验完 App 后,您一定想知道如何从源代码开始,构建一个属于自己的端侧大模型应用。下面,我们将完整走一遍从源码编译到命令行测试的全流程。


🟣 源码下载与编译

首先,我们需要编译 MNN 引擎本身,获取模型转换和推理所需的工具。(建议在 macOS, Linux 或 WSL 环境下操作, Windows 环境准备参考:https://mnn-docs.readthedocs.io/en/latest/compile/engine.html#windows-visual-studio)

# 1. 下载MNN源码
git clone https://github.com/alibaba/MNN.git
cd MNN

# 2. 创建编译目录并编译
mkdir build && cd build
cmake -DMNN_BUILD_LLM=ON -DMNN_BUILD_LLM_OMNI=ON -DMNN_BUILD_CONVERTER=ON ..
make -j8

💡核心:-DMNN_BUILD_LLM=ON 等参数是关键,它会确保编译出LLM所需的所有组件。

🟣 模型下载与转换

接下来,我们使用 MNN-LLM 提供的脚本,将官方的 Qwen 模型转换为 MNN 格式。



# 1. 进入MNN-LLM的export目录
cd MNN/transformers/llm/export

# 2. 安装python依赖
pip install -r requirements.txt

# 3. 从ModelScope下载模型 (以Qwen3-0.6B为例)
modelscope download Qwen/Qwen3-0.6B --local_dir Qwen3-0.6B

# 4. 执行转换脚本
python llmexport.py --path Qwen3-0.6B --dst_path Qwen3-0.6B-MNN --export mnn -hqq

💡 核心:--export mnn 代表导出为 MNN 格式,-hqq 是推荐开启的量化选项,可以有效提升模型精度。

🟣 模型推理测试

模型转换完成后,使用我们第一步编译出的 llm_demo 工具,在命令行进行快速测试。

# 1. 回到编译目录
cd MNN/build

# 2. 准备一个prompt文件
echo "你好,请问你是谁?</no_think>" > prompt.txt

# 3. 运行命令行demo./llm_demo 
../transformers/llm/export/Qwen3-0.6B-MNN/config.json prompt.txt

当你看到 AI 助手流畅地回答出“您好,我是AI助手...”时,恭喜你,已经成功在本地跑通了整个流程!

移动端部署篇  编译Android & iOS APP

命令行测试成功,只是万里长征的第一步。接下来,我们将深入介绍如何将这一切能力完整地移植到手机 APP 上。这一步将分为 Android 和 iOS 两部分,请根据您的目标平台进行操作。

部署到 Android

🟣 第1步:编译 MNN Android 核心库

首先,我们需要为 Android 平台编译出MNN引擎的动态库(.so文件)。这个库是 APP 运行的核心。

# 1. 进入MNN的Android工程目录
cd MNN/project/android

# 2. 创建编译目录
mkdir build_64 && cd build_64

# 3. 执行编译脚本 (包含了LLM、VISION、OPENCL等关键模块)
../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=."

# 4. 安装编译产物
make install

🟣 第2步:编译并安装 MNN Chat APP

核心库准备好后,我们就可以编译作为示例的 MNN Chat 应用了。

# 1. 进入MNN Chat的Android工程目录
cd MNN/apps/Android/MnnLlmChat

# 2. 执行安装脚本
./installDebug.sh

💡 前提:请确保您的电脑已正确配置 Android 开发环境(SDK/NDK),并且手机已通过 USB 连接并开启开发者模式,adb devices 命令可以正常发现您的设备。该脚本会自动编译并安装APP到您的手机。

🟣 第3步:推送模型到手机

刚安装好的 APP 是一个“空壳”,我们需要把之前转换好的模型文件推送到手机的特定目录中,APP 就可以运行我们推送的模型。

# 1. 进入存放转换后模型的目录
cd MNN/transformers/llm/export

# 2. 在手机上创建模型文件夹
adb shell mkdir -p /data/local/tmp/mnn_models

# 3. 将模型文件夹推送到手机
adb push Qwen3-0.6B-MNN /data/local/tmp/mnn_models/

现在,打开您手机上的 MNN Chat,它应该就能在“我的模型”中找到您刚刚推送的 Qwen 模型了! image.png

部署到 iOS

🟣第1步:编译MNN iOS核心库 (Framework)

与 Android 类似,我们首先需要为 iOS 平台编译出 MNN 的 .framework 静态库。

# 1. 回到MNN根目录
cd MNN

# 2. 执行iOS编译脚本 (同样包含一系列编译参数)
sh package_scripts/ios/buildiOS.sh "-DMNN_BUILD_LLM=ON -DMNN_METAL=ON ..."

# 3. 将编译产物移动到Xcode工程目录中
mv MNN-iOS-CPU-GPU/Static/MNN.framework apps/iOS/MNNLLMChat

💡 提示:编译 iOS 库通常需要在 macOS 环境下进行。

🟣 第2步:使用Xcode编译和运行

核心库就位后,我们使用 Xcode 来完成 APP 的最终编译和安装。

# 1. 进入MNNLLMChat的iOS工程目录
cd MNN/apps/iOS/MNNLLMChat

# 2. 使用Xcode打开工程文件
open MNNLLMiOS.xcodeproj

💡 操作:在 Xcode 中,选择您的真机设备作为目标,然后点击“▶️”(Run)按钮即可完成编译和安装。

🟣 第3步:添加模型文件到 Xcode 工程

对于 iOS,我们不是通过命令行推送模型,而是直接将模型文件作为资源打包进 APP。

1、在 Xcode 左侧的文件导航器中,找到 MNNLLMChat 下的 model 目录。

2、打开访达(Finder),找到您之前转换好的模型文件夹(例如 Qwen3-0.6B-MNN)。

3、将整个模型文件夹拖拽到 Xcode 的 model 目录下。

4、在弹出的对话框中,务必勾选“Copy items if needed”,并选择“Create folder references”。

image.png

💡 提示:在Signing & Capabilities 界面中,Team栏选择你的账号;修改一个可用的Bundle Identifier。

💡 注意:如果你的账号不是苹果开发者账号,请删除该界面下面的 Extended Virtual Addressing 和 Increased Memory Limit 两个权限,否则无法编译。

完成以上步骤后,再次运行 APP,它就能在内置的资源目录中找到并加载 Qwen 模型了。

image.png

进阶篇  精度与性能调优秘籍

为了在比赛中获得更高分数,你需要对模型的导出和运行参数进行精细化调优。

🟣 1、模型导出参数调优

在执行 llmexport.py 时,可以附加不同参数以获得不同的效果:

• 精度调优:

• --quant_bit 8:使用 INT8 量化,精度更高,但体积更大。

• --quant_block 32:使用更小的 block,可以提升精度。

• --awq:开启 AWQ 量化,需要校准数据集,速度稍慢但精度更高。

• 内存/体积调优:

• --quant_block 128:使用更大的 block,牺牲部分精度换取更小的体积。

• --lm_quant_bit 4: 对 lm_head 使用更低的位数,进一步降低权重大小。

🟣 2、模型运行时参数调优

模型导出后,可以通过修改 config.json 文件来控制运行时的行为:

• backend_type:指定后端,cpu 或 opencl/metal(GPU)。

• thread_num:调整线程数,通常设置为大核数量。

• precision:精度模式,low 模式(如fp16)速度更快。

• use_mmap:在手机上建议设为 true,内存不足时可避免闪退。

• sampler_type 等采样参数:调整可以改变模型生成文本的“性格”,如创造性、随机性等。

从快速体验 APP,到亲手编译运行,再到进阶性能调优,相信通过这篇教程,你已经掌握了使用 MNN 部署 Qwen 大模型的全链路技术。端侧 AI 的想象空间是巨大的,真正的挑战在于如何将这些强大的技术与创新的应用场景相结合。


希望这篇教程能成为你通往成功的垫脚石。期待在“端侧AI创新挑战赛”中看到你的精彩作品!

相关文章
|
25天前
|
人工智能 固态存储 Linux
树莓派这种“玩具级”设备,真能跑大模型吗?
本期教程带你用树莓派5部署Qwen3模型,打造完全离线、自带屏幕与键盘的“AI小终端”。基于C语言实现,不依赖Python或llama.cpp,支持多尺寸Qwen3模型,实现本地化私有推理。跟随步骤,轻松搭建属于你的端侧AI助手。
317 23
|
21天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
373 203
|
25天前
|
人工智能 自然语言处理 算法
GEO战略指南:如何选择服务商,让AI大模型主动成为你的“推荐官”!
生成式AI时代,GEO成企业转型关键。本文基于技术架构、服务闭环等四大维度,结合阿里云标准,精选五家核心服务商,助企业实现可量化、可追溯的智能升级决策。
251 30
|
28天前
|
Python
LBA-ECO ND-06 土地利用对土壤养分的影响:1950-2001 年研究综述
本数据集整合了1950–2001年亚马逊地区39项研究的土壤养分数据,评估不同土地利用对土壤碳、氮、磷及阳离子交换能力的影响,检验五大假设,揭示知识空白,指导未来研究。包含CSV数据及文献列表。
123 23
|
26天前
|
监控 安全 Linux
Linux如何部署服务并设置为开机自启
系统ctl命令用于管理Linux服务,包括启动、停止、重启和重载配置等操作。journalctl命令可查看特定服务日志。编写服务文件时需定义[Unit]、[Service]和[Install]部分,通过systemctl管理新服务并设置开机自启。
204 14
|
11天前
|
人工智能 自然语言处理 人机交互
《智能词汇》:十进制编码驱动的构词体系与极简语法应用机制研究
摘要 《智能词汇》作为一套创新性人工语言的词汇系统,其核心优势集中体现于词汇构词体系与语法应用机制的逻辑化设计。本文聚焦《智能词汇》的核心功能,系统解析其基于十进制编码的构词方法(语义场层级分类、词汇关系网络构建、无限扩展规则)与极简语法应用机制(词本位原则、无形态变化特征、语序主导语义表达)。研究表明,《智能词汇》以“道生万物”哲学思想为内核,以十进制数学逻辑为骨架,构建了“编码即语义、关系即规则、语法即秩序”的完整体系,实现了词汇构词的规则化、语义关联的精准化与语法应用的简洁化,为人工语言的词汇与语法设计提供了新范式,兼具语言学习的高效性与跨场景应用的适配性。
199 114
《智能词汇》:十进制编码驱动的构词体系与极简语法应用机制研究
|
25天前
|
存储 人工智能 安全
把大模型“塞”进手机分几步?
「端侧AI创新挑战赛」教程第二期:教你用PocketPal AI在手机本地部署Qwen3-0.6B模型,无需联网、不写代码,实现离线对话。支持iOS/Android,保障隐私安全,轻松打造口袋里的AI助手。
541 2
|
24天前
|
人工智能 自然语言处理 安全
妙妙妙妙!公文、合同、标书…全妙闭环了
阿里云百炼|全妙,是面向政企、媒体等专业领域的智能创作平台,集“妙策、妙搜、妙笔、妙读”于一体,覆盖公文撰写、合同审查、标书生成、内容采编等高合规场景,助力用户降本增效,释放创造力。
250 25

热门文章

最新文章