当前位置:首页>排行榜>手机上跑大模型,3个框架怎么选

手机上跑大模型,3个框架怎么选

  • 更新时间 2026-10-28 20:35:35
手机上跑大模型,3个框架怎么选
你想在手机上跑大模型,搜了一圈,发现大家都在提三个名字:llama.cpp、MNN、MLC-LLM。

然后你卡住了——三个都有人说好,教程也都能跑通,到底选哪个?

这篇不给你排名,不编跑分。只给你一张决策树:三问,每问挑一件事,落到一个框架上。命令可以直接抄,都是官方文档里的最短路径。

一、先别问"哪个好",先问"我要什么"

手机跑大模型,最容易被带偏的一句话是:"xx框架比yy快。"

问题在于,"快"这个字在手机上不成立。同一台手机,跑同一个模型,把输入改长一点,结论就可能反转。后面会解释为什么。

所以第一步不是比较,是把你的需求钉死。三个框架其实是三套不同的取舍,你只能选跟你匹配的那套:

  • llama.cpp:门槛最低,生态最大。是"地基",不是"专精"。
  • MNN-LLM:移动端优化最深,多模态和国内模型最省心。是"特化兵"。
  • MLC-LLM:移动 GPU 跑得最透,还能跑浏览器。是"加速器",但要门槛和首字速度来换。

记住这三句话就够了。这就是手机上跑大模型的全部选型逻辑——下面逐个看它们到底强在哪、代价是什么。

先举个真实的纠结,你可能也遇到过:

同事 A 用 llama.cpp 在旧手机上跑通了 7B,天天吹"手机也能跑大模型"。
同事 B 用 MNN 在旗舰机上跑 DeepSeek-R1,还发了张图——AI 直接看懂照片。
你两台手机都有,听谁?

听谁都不对,因为你俩的需求根本不是一回事。A 要的是"能出字",B 要的是"能看图和跑大模型"。这就是为什么不能听别人推荐,只能按自己的需求选。

二、我的环境(先说清楚,这篇没实测)

  • 机型/芯片:不指定。结论对 Android / iOS 通用,但"GPU 强弱"这条要看你自己的设备。
  • 模型参照:7B 量化模型(比如 Qwen2.5-7B,Q4_K_M 档)。
  • 框架版本:llama.cpp / MNN-LLM / MLC-LLM,2026 年的版本。
  • 量化方式:Q4_K_M 或 INT4。

为什么特意声明"没实测"?因为手机跑大模型的"快慢",跟具体哪台手机强绑定。同一个框架,旗舰机上能打,换到中端机可能翻车。网上那些"xx跑xx tok/s"的数字,换台手机就作废。所以这篇只给你判断依据和决策方法,不给你一个会过期的数字。

三、三个框架的性格

llama.cpp:门槛最低,生态最大

这是最"大众脸"的一个。纯 C/C++,零依赖,CPU 为主,GPU 加速是可选加分项(Metal / CUDA / Vulkan / OpenCL)。

它的强项是通用:

  • GGUF 单文件格式(本地推理的事实标准,社区生态都在它上面长),拷到手机就能加载
  • 量化档位最全(Q2 到 Q8),调优自由
  • 跨平台(Android / iOS / 电脑),教程最多

一句话:它是"地基"。你想最快跑通、想换档位对比、或者设备 GPU 不强,选它基本不会错。

但它不是"专精"。它文本为主,端侧多模态和移动端特化不是它的强项——真要多模态,它要你另外接视觉模型,不如 MNN 一步到位。

什么时候别选它:你要跑多模态(图像/音频),或者你设备 GPU 很强、想榨干性能上限。这两件事它都帮不上,硬用它等于自己绕远路。

MNN-LLM:移动端优化最深

阿里开源的,专为手机/嵌入式设计。CPU 优化做到 ARM 汇编级,还带动态量化。

它的强项是贴着手机:

  • 7B 以下跑得流畅(CPU 为主)
  • 多模态现成:MNN Chat 支持文本、图像、音频互转(text-to-text / image-to-text / audio-to-text / text-to-image),DeepSeek-R1 能跑
  • 对国内开源模型(Qwen / DeepSeek / GLM)适配最积极——阿里自家模型,国内社区案例多
  • 算子覆盖广,离线/隐私场景省心

一句话:它是"特化兵",专打移动端这仗。你要在 Android 上跑国内模型、要跑多模态、要离线,选它最省心。

代价是上手比 llama.cpp 复杂:模型要先转成 MNN 的格式,还要编译。而且生态主要在国内圈子,英文资料少。

什么时候别选它:你要跨 iOS + Android + 电脑一套代码全跑,或者你依赖 Ollama/LM Studio 那套生态、想要社区里现成的教程。MNN 在这些地方不如 llama.cpp 通用,硬上容易卡在"网上没人遇到过这个错"。

MLC-LLM:移动 GPU 跑得最透

基于 TVM 编译,把模型编译到目标 GPU 的指令(Vulkan / Metal / OpenCL),还能跨到浏览器(WebGPU)。

它的强项是上限高:

  • 移动 GPU 利用率最高,生成阶段(decode)领先
  • WebLLM 同栈:手机和浏览器共用一套编译产物
  • 动态形状,编译优化深

一句话:它是"加速器",榨干你的 GPU。旗舰机、想要最高生成速度、或者要 Web 复用,选它。

但这里有个容易被打脸的坑,必须说清:它不是"性能天花板"。MLC 在移动 GPU 上 decode(逐字生成)快,可prefill(处理你输入的那段)明显慢于 llama.cpp。你的输入越长,这个劣势越明显。而且上手门槛最高(两段编译),中低端 GPU 上它的优势可能反而不如 llama.cpp 跑 CPU。

什么时候别选它:你的设备 GPU 不强(中低端机),或者你的场景是"长文档输入、短回答"(prefill 会拖后腿),或者你不想碰两段编译。这时候选它,等于花了最高门槛,拿到最差体验。

这里补一句 prefill / decode 到底差在哪,懂了这个你就不容易被"谁快"骗到:

大模型生成回答,分两段。prefill是"读你的输入"——你打 1000 个字,它要一口气把这 1000 个字全算一遍,算完才开始生成。decode是"一个字一个字往外蹦"——每蹦一个字,才多算一步。

这两段吃的资源不一样:prefill 吃的是"算力"(并行),decode 吃的是"带宽"(串行)。

MLC 在移动 GPU 上,是decode 快(因为 GPU 并行强);但prefill 慢,因为编译出来的 kernel 在"读长输入"这段上,不如 llama.cpp 手写的 CPU kernel 讨巧。

所以你看到"MLC 每秒 30 token"别急着信——那是 decode 的速度。你输入一长,prefill 就把时间吃回去了。这也是为什么"谁快"必须分两段看,只看一个数都是耍流氓。

四、根因:为什么没有"最好的框架"

看到这你应该明白了:三个框架不是"谁比谁强",是三套不同的取舍。

  • llama.cpp:预定义计算图 + 手写 kernel。门槛低、档位全,GPU 是加分项。
  • MNN:图优化 + 汇编级 CPU kernel。移动端特化,多模态/国内模型强。
  • MLC:编译到目标 GPU 指令。decode 快、能上 Web,但 prefill 慢、门槛高。

那为什么没人能给你一个"统一答案"?

因为手机 GPU 能力差异巨大。旗舰和中低端,GPU 差着几个量级。同一个 MLC,在旗舰上 decode 优势能兑现;到中端机上,优势变负,prefill 的劣势反而被放大。

再加上decode 快 ≠ 整体快:MLC 单看生成速度赢,但你一输入长 prompt,prefill 就把时间吃回去了。所以网上那些"谁快"的单一评测,换个设备、换个输入长度,结论就反转。

结论:选框架 = 设备能力 × 场景需求的匹配题。别拿单一"谁快"的评测结论去选,那个会过期。

五、解法:三问决策树

先看最想要的那件事,一次只挑一个,别贪:

 第 1 问  你要不要多模态(图像/音频)?  要 → MNN-LLM(MNN Chat 现成,别犹豫)     不要 ↓ 第 2 问  你要不要 Web/浏览器也复用同一套模型?  要 → MLC-LLM(WebGPU 同栈)  不要 ↓第 3 问  你的设备 GPU 强不强?(旗舰 vs 中低端)  强 → 要最高生成速度 → MLC-LLM(decode 快,但长输入看 prefill)  弱/不确定 → llama.cpp(CPU 通用,GPU 弱时最稳)

为什么这么问,一句一个理:

  • 第 1 问多模态是硬门槛。llama.cpp 文本为主,硬塞多模态要自己接视觉模型,不如 MNN 一步到位。
  • 第 2 问 Web 复用是独有需求。只有 MLC 的 WebGPU,能让你手机和浏览器共用一套编译产物。注意:这一问落到 MLC 是"没得选"——想要 Web 就它一家,跟你 GPU 强不强无关。
  • 第 3 问 GPU 强弱是分水岭。旗舰 GPU 上 MLC 的 decode 优势能兑现;中低端 GPU 上 MLC 的 prefill 劣势会放大,llama.cpp 跑 CPU 反而稳。这一问落到 MLC 是"图快",跟第 2 问的"图 Web 复用"是两个不同理由。

一句话区分第 2、3 问:第 2 问的 MLC 是"只有它能";第 3 问的 MLC 是"它最快"。前者看需求,后者看设备。

什么时候回 llama.cpp?不是"首选",是"回退":

  • 要频繁调量化档位对比(Q2~Q8 最全)
  • 只想最快跑通、能出字就行(教程最多)
  • 上面三问都"不要",且不想碰编译(MNN / MLC 都要转换 + 编译)

快速上手(最短路径,都来自官方):

  • llama.cpp(官方 README):
    llama-cli -m model-Q4_K_M.gguf -cnv --jinja --temp 0 -n 1024 -c 4096 
  • MNN-LLM(官方仓库 wangzhaode/mnn-llm):先导出 ONNX → 再用 MNNConvert 转成 MNN 格式 → 编译 llm_demo(Android Studio 或 NDK)。
  • MLC-LLM(官方两段式):第一阶段在开发机 mlc_llm convert_weight(转换+量化)→ 第二阶段 mlc_llm compile(生成设备 GPU kernel)。所以门槛高在"要一台开发机先折腾一遍",不是手机里敲条命令就完。

止损线(承接上一篇):7B 的 Q4 在 6GB 以下内存跑不动,别硬塞。换 1.5B~3B,或者砍上下文。能跑且够用,比"跑满"重要。

走一遍(拿三个真实场景举例):

小明:一台中端 Android,就想在 Termux 里跑个 7B 聊天,能出字就行。
第 1 问:要多模态吗?不要。第 2 问:要 Web 复用吗?不要。第 3 问:GPU 强吗?中端机,不强。
→ llama.cpp。他不需要碰编译,装个 Termux 就能跑,最省事。

小红:旗舰机,想把 DeepSeek-R1 跑起来,还想要 AI 看懂照片。
第 1 问:要多模态吗?要。
→ MNN-LLM。别往下问了,MNN Chat 现成支持,一步到位。

老张:旗舰机,纯文本场景,想要最高生成速度,还打算把同一套模型丢到网页版。
第 1 问:不要多模态。第 2 问:要 Web 复用。
→ MLC-LLM。WebGPU 同栈,手机和浏览器一套产物。

三个人,三台设备,三种需求,落到三个框架。没有一个"对所有人最优"的答案,只有"对你这台设备这个需求"的答案。

六、五个坑

1、用"谁快"的单一评测选框架:不同设备、不同输入长度会反转(MLC decode 快但 prefill 慢)。至少看两台差距大的设备,并且分开看 prefill 和 decode。
2、拿旗舰机的 GPU 结论套中端机:GPU 弱时 MLC 优势变负,llama.cpp 跑 CPU 反而稳。所以决策树第 3 问先看设备。
3、忽略多模态/算子需求:llama.cpp 文本强,真要多模态就得 MNN,否则选完才发现接不了图。
4、模型格式不兼容:GGUF 和 MNN 是两套格式,换框架要重新转换 + 量化,不是把文件拷过去就行。
5、内存只算模型体积:还要算 KV cache + 运行时。7B 的 Q4,实际要 6GB 以上可用内存,不是文件大小 4.2GB 就够。

最后

选框架这事,先回答"我要什么",再选"用哪个",别反过来。

很多人一上来就问"哪个快",然后被一个会过期的数字带偏。正确的顺序是:先钉死需求(多模态?Web?GPU 强不强?),再落框架。

三问走完,手机上跑大模型该选哪个,答案通常就自己冒出来了——不是因为它最好,是因为它最配你。


相关阅读:

上面这套三问选型,我压成了一张《三框架选型速查卡》:三问决策树 + 每个框架的最短命令 + 五个坑。

关注后回复「框架表」,直接拿这张速查卡。

#端侧AI #手机AI #llama.cpp #端侧部署 #科技科普

随机文章