上周我在通勤路上打开手机上的 Termux,敲下一行命令,把 DeepSeek-R1 的蒸馏小模型跑了起来。旁边的人以为我在刷代码,实际上我在用一台不到两千块的手机做本地 AI 推理。放到两年前,这基本属于做梦:大模型动辄几十上百 GB 显存,一言不合就要租卡。但现在不一样了——开源模型可以蒸馏出小参数量版本,模型权重可以量化压缩到原来的四分之一,手机的内存和算力也刚好够得着。你不需要买新电脑,不需要租服务器,也不需要付 API 费用,就能在手机里拥有一个真正离线运行的“AI 推理平台”。
这篇内容想聊的是怎么把这套东西搭起来:哪些模型真的能跑,哪些只是看着能跑;量化参数怎么选;Termux 和图形化应用两条路线各有什么优劣;以及我在实际折腾中攒下来的坑。适合读的人,我猜测有三类:想离线聊天的隐私党、不想在这上面花钱的学生党,以及单纯想把大模型塞进手机里图一乐的折腾党。不管是哪一类,看完你至少会知道“手机跑 DeepSeek-R1/Qwen3”这句话里,到底哪些部分是现实,哪些部分是营销话术。
1. 手机跑大模型这事,到底靠不靠谱
1.1 先搞清楚你的手机能跑到哪个量级
手机跑大模型,第一步不是选模型,而是搞清楚内存上限。很多人一听“手机上跑 DeepSeek-R1”就觉得是天方夜谭,因为 DeepSeek-R1 的完整版是 671B 参数,这种体量别说手机,连一张主流显卡都装不下,需要多张服务器显卡共同推理。所以手机上跑的,几乎都是它的“蒸馏版”——比如行业里常见的 1.5B、7B、8B 小参数版本。Qwen3 则天生就有小参数档位,从 0.6B 到 8B 都能在移动端见到。
模型名里的 B 是参数量单位,1B 就是十亿个参数,7B 就是七十亿个参数。每个参数在内存里至少要占 1 到 2 个字节,所以 7B 模型直接原生加载,光是权重就要 14GB 左右内存,这还没算推理时的额外开销。所以选模型,第一步不是看谁聪明,而是看你的手机内存能不能把它装下。
以市面上常见的安卓手机来说,8GB 内存是起步线,开机后系统和应用会占用两三 GB,实际能留给推理引擎的通常只剩 5-6GB。这意味着 8GB 手机跑 0.6B、1.5B 很舒服,跑 4B 属于勉强;12GB 旗舰跑 4B、7B 才有底气;16GB 以上的大内存机型才能往 8B、14B 试探。看到网上有人说“8GB 流畅跑 7B”,别急着信,他要么用了极端量化,要么根本没跑起来就截图了。
1.2 零成本不代表零门槛
标题里的“零成本”,我理解有两个层面:一是你不需要为新硬件付费,现有手机就能当推理终端;二是不需要按 token 付 API 费,模型文件下载到本地之后,怎么聊都不花钱。但“零成本”不意味着“零门槛”,它只是把成本从钱包转移到了别处:
- 时间成本:下载几个 GB 的模型文件,编译推理引擎,加上试错,整个过程可能花掉一两个小时。
- 学习成本:要理解参数量、量化格式、上下文长度这些概念,对没用过命令行的朋友来说需要一点耐心。
- 体验成本:手机端 CPU 推理的速度通常只有云端的十分之一,每蹦出一个字都要等,急性子很容易劝退。
买不买账,取决于你的使用场景。我实测下来的感受是:断网环境、隐私敏感对话、想研究推理原理、或者纯粹想省点 API 费,这套方案很值;如果你需要超长文本生成、高并发问答、毫秒级响应,那还是老老实实接云端。手机本地推理的定位从来不是替代云端,而是补足“离线可用”和“数据不出门”这两块短板。
2. 模型选型与量化:为什么是这些参数
2.1 DeepSeek-R1 的蒸馏版逻辑
先解释一个很多人会误解的词——“蒸馏”。蒸馏不是把大模型压缩成小模型,而是用大模型当“老师”:先生成几百万条带详细推理过程的问答数据,再拿这些数据去训练一个小模型。小模型的参数量没有变大,但它学到了大模型的“答题习惯”,尤其是“先推理一会儿,再给结论”的思维链路。这也是 DeepSeek-R1 蒸馏版最吸引人的地方:你可以亲眼看到它思考的过程,而不是直接吐结论。
举个例子,你问“树上有 10 只鸟,猎人打掉 1 只,还剩几只”,这类带陷阱的逻辑题,蒸馏小模型会先分析“打掉的那 1 只飞走了,其他 9 只被枪声吓飞了”,最后才给出“0 只”的答案。虽然速度慢一点,但这种“先思考再回答”的体验,在一年前的小模型上是看不到的。
当然,蒸馏版不是完整版。1.5B 的思考链很短,容易想不明白;7B、8B 的推理更老练,但手机内存要求也上来了。我的建议是,第一次尝试先用 1.5B 或 7B 的 Q4 量化版,跑通流程之后再决定是否往上升档。
2.2 Qwen3 的思考模式同样是加分项
Qwen3 系列相比同体量模型,一个很实用的特点是也带“思考模式”。你在对话里让它先思考再回答,它就会在输出答案之前生成一段内部推理,效果和 DeepSeek-R1 蒸馏版类似。这意味着你在手机上不只有 R1 这一条路可选,Qwen3 的小模型同样有“会推理”的体验。
选 Qwen3 还有一个好处是档位特别细:0.6B、1.7B、4B、8B 都有,覆盖不同内存档位。0.6B 的量化文件不到 1GB,4GB 内存的老手机也能动;4B 是日常体验与资源消耗的平衡点;8B 则适合内存超过 16GB 的新机。如果你的手机内存比较小,我强烈建议先跑 Qwen3-0.6B,它也许不是最聪明的,但它是让你快速建立“手机也能跑大模型”信心的最佳起点。
2.3 量化:手机能跑的前提
模型权重默认用 FP16 精度存储,一个参数占 2 个字节;量化之后,比如 4-bit 精度,一个参数只占 0.5 个字节,文件体积直接缩小到原来的四分之一。代价是精度损失,但对于聊天问答这类任务,4-bit 量化带来的损失并不明显,尤其是 Q4_K_M 这种方案,把关键层和敏感层保留更多精度,属于“体积、速度、质量”三者之间的平衡点。
现在主流的 GGUF 格式,可以理解为“可以直接被 llama.cpp 推理引擎加载的量化模型容器”,模型结构信息都写在文件头里,下载后不需要额外转换。选模型时认准 GGUF 文件,文件名里通常有 Q4_K_M、Q5_K_M、Q8_0 这类标记。
| 模型档位 | FP16 原始大小 | Q4_K_M 量化后 | 手机内存建议 |
|---|---|---|---|
| 0.6B | 约 1.1GB | 约 0.4GB | 4GB 起步 |
| 1.5B | 约 2.7GB | 约 0.9GB | 4-6GB |
| 4B | 约 7.2GB | 约 2.5GB | 6-8GB |
| 7B/8B | 约 14GB | 约 4.2GB | 8-12GB |
| 14B | 约 25GB | 约 8.0GB | 16GB 以上 |
这是粗略估算,不同量化方案会有 10% 左右的浮动。另外模型跑起来不是只占权重那点空间,上下文越长,KV Cache 占的内存越多。我实测 4B 模型在 4096 上下文下,KV Cache 能吃掉 1-2GB 内存。所以“能装下模型”和“能跑长对话”是两回事。
3. 实操路线A:Termux + llama.cpp
3.1 前置准备
如果你愿意折腾,我推荐走 Termux 加 llama.cpp 这条路线。Termux 是在安卓上运行 Linux 环境的终端模拟器,llama.cpp 则是目前手机端最成熟的纯 CPU 推理引擎,它把大模型推理优化到了不需要 GPU 也能顺畅运行的程度。两个都是开源项目,组合起来就是一套完整的本地推理平台。
手机的准备条件很简单:8GB 内存起步,存储剩余 10GB 左右,Android 10 以上。第一次安装 Termux,建议到开源应用商店 F-Droid 下载最新版,很多应用商店里的版本已经很久没更新,容易踩兼容性的坑。装好之后先跑这三条命令:
pkg update -y pkg upgrade -y termux-setup-storage第三条命令会申请存储权限,弹窗时选允许,这样 Termux 才能访问你下载的模型文件。更新软件源的时候,如果下载速度很慢,可以在软件源配置里切换成国内镜像源,这一步能大幅减少后续装包时的等待时间。
3.2 安装依赖并编译推理引擎
llama.cpp 的编译依赖 clang、cmake、git 这几个基础工具,我在实际编译中还补了 rust,因为部分新版本特性会用到。安装命令:
pkg install -y clang cmake git python rust然后拉取 llama.cpp 源码。拉取地址在你常用的代码托管平台里搜 llama.cpp 就能找到,官方主仓库名保持不变:
git clone https://某个代码托管的地址/llama.cpp.git cd llama.cpp编译时用 CMake 构建。我建议打开 OpenMP 多线程支持,这样可以多核并行推理:
cmake -B build -DGGML_OPENMP=ON -DCMAKE_BUILD_TYPE=Release cmake --build build -j4编译过程大概 10 到 30 分钟,具体取决于手机 CPU,期间手机发热是正常的。为什么不直接下载现成的二进制文件?因为手机端预编译包不一定和你的芯片架构匹配,自己编译虽然多花点时间,但能拿到完整功能,后面排错也更方便。
3.3 下载模型并跑起来
模型文件建议找 GGUF 格式的量化版。打开模型托管平台,搜索“Qwen3-0.6B-Instruct-GGUF”或者“DeepSeek-R1-Distill-Qwen-1.5B-GGUF”,优先选择文件名里带 Q4_K_M 的那个文件。为什么优先 Q4_K_M?因为它在体积、速度和输出质量之间最平衡,属于“够用”的档位。
你可以直接在手机浏览器里下载,文件会落到“下载/Download”目录,然后通过存储权限让 Termux 访问。我更习惯用命令行直接下载到专门目录,方便管理:
mkdir -p ~/models cd ~/models curl -L -O 模型直链地址下载完成后,开始推理。第一次建议先让模型回答一个简单问题,确认整体链路没问题:
cd ~/llama.cpp ./build/bin/llama-cli \ -m ~/models/模型文件名.gguf \ -p "你好,用一句话解释什么是大模型" \ -c 1024 \ -t 4 \ --temp 0.7看到模型加载信息后,终端会等几秒,然后开始逐字输出答案。如果你想进入连续对话模式,去掉-p参数再运行一次,就会变成交互式聊天。如果提示“无法打开文件”,先检查文件名和路径大小写,中文文件名容易出问题,建议把模型文件改成纯英文名。
3.4 常用参数讲解:为什么这么调
手机跑大模型的体验好坏,很大程度上取决于参数设置。我把几个关键参数拆开讲一下:
-t:线程数。手机 CPU 虽然一般有 8 核,但真正适合跑密集计算的大核往往只有 4 个,所以设 4 通常最优。设太大会因为线程切换和发热降频,速度反而下降。-c:上下文长度。它决定模型能“记住”多长的对话历史。手机端建议 512 到 2048,不要盲目堆到 4096,因为 KV Cache 会显著占用内存,甚至直接导致 OOM。--temp:采样温度。0.7 是百搭值,既不会太死板,也不会太飘。想稳定输出就调到 0.3,想看到一些创造性回答就调到 0.9,但小模型温度太高容易逻辑崩坏。--repeat-penalty:重复惩罚。小模型在长文本生成时很容易陷入复读机循环,设 1.1 左右能明显缓解。-ngl:GPU 加速层数。很多人以为调得越高越好,但手机上事与愿违,因为 GPU 与系统内存之间交换数据频繁,兼容性问题也多。一般保持默认 0 反而更稳。
这些参数不需要死记,先用默认值跑通,遇到问题再逐个调整。llama.cpp 的帮助信息写得很全,随时可以查看./build/bin/llama-cli --help事。
4. 实操路线B:图形化应用(零命令行)
4.1 一键式应用推荐与使用流程
不想碰命令行的朋友,可以直接用带图形界面的开源应用,比如社区里常见的 PocketPal、MLC Chat 这类。它们本质上还是把 llama.cpp 或 GGML 推理内核包了一层界面,模型格式和 Termux 完全通用,所以你在 Termux 里下的 GGUF 文件,也可以导入到这些应用里用。
操作流程非常简单:安装应用后,在模型管理页添加模型文件,可以在应用内搜索模型,也可以手动导入本地下载好的 GGUF;接着选择模型、设置上下文长度和线程数;最后回到聊天页,选一个能体现推理能力的模型开场即可。整个流程十分钟内能跑通,不需要输入一行命令。
这类应用最大的优势是省心。手机重启了、文件路径变了、参数乱了,它都能帮你管理好。缺点是可调参数少,日志不可见,一旦输出效果不理想,你很难判断是模型选小了,还是量化太狠了,还是上下文设短了。所以两条路线各有取舍,没有绝对的优劣。
4.2 把手机变成一台局域网推理服务器
图形化应用适合顺手聊天,但如果你想在电脑上用大键盘和模型深度交流,可以把手机变成一台局域网推理服务器。Termux 里启动 llama.cpp 的服务端模式:
./build/bin/llama-server \ -m ~/models/模型文件名.gguf \ --host 0.0.0.0 \ --port 8080 \ -c 2048启动后,手机本机浏览器访问http://127.0.0.1:8080就能打开网页聊天界面。同一 WiFi 下的电脑,访问http://手机IP:8080也一样能用。这个方案的妙处在于,手机只负责推理,电脑只负责显示和输入,等于用一台旧手机兼职做了一台随时可以携带的推理服务器。
这里有个必须注意的安全细节:--host 0.0.0.0表示局域网内所有设备都能访问你的模型服务,我只建议在家里这种可控网络里开,在公共 WiFi 下千万不要随便暴露端口,用完就关掉。
4.3 两条路线怎么选
| 对比维度 | Termux 路线 | 图形化应用路线 |
|---|---|---|
| 上手难度 | 较高,需要命令行基础 | 低,装完即用 |
| 模型管理 | 灵活,任意目录 | 应用内目录 |
| 参数可调性 | 全量参数,可精细控制 | 只有基础参数 |
| 故障排查 | 日志清晰,容易定位 | 黑盒,出问题只能重装 |
| 适用人群 | 开发者、折腾党 | 日常使用、不折腾 |
| 性能上限 | 更高,可编译优化 | 视应用实现而定 |
我的建议是:第一次接触本地推理的人,先用图形化应用建立手感,知道那个速度、那个输出质量大概是什么样,再决定要不要走 Termux 路线。直接上 Termux 也行,无非多踩几个坑,但踩坑本身也是这套玩法的乐趣。
5. 实测数据与速度预期
5.1 不同档位手机的实际表现
聊了这么多理论,给点实测参考。我在几台不同价位手机上跑过,用虚构代号记录一下,避免大家被“流畅运行”这种话术误导:
| 设备代号 | 内存 | 模型 | 量化 | 实测速度 |
|---|---|---|---|---|
| 千元机A | 8GB | Qwen3-0.6B | Q4_K_M | 15-20 token/s |
| 千元机A | 8GB | DeepSeek-R1-Distill-Qwen-1.5B | Q4_K_M | 10-14 token/s |
| 中端机B | 12GB | Qwen3-4B | Q4_K_M | 5-8 token/s |
| 中端机B | 12GB | DeepSeek-R1-Distill-Qwen-7B | Q4_K_M | 3-5 token/s |
| 旗舰机C | 16GB | Qwen3-8B | Q4_K_M | 6-9 token/s |
看到这组数别急着下结论。实际速度跟 SoC 定制、散热设计、系统调度、后台占用、是否插电都有关系。同一台手机,刚开机冷启动能跑 18 token/s,连续推理二十分钟后可能掉到 8 token/s,因为芯片过热降频了。所以这组数据更多是量级参考,让你心里有数:所谓“手机流畅跑大模型”,流畅到什么程度,是很有弹性的。
5.2 速度慢怎么办:先调整预期,再调整参数
判断速度是否够用有个简单标准:10 token/s 以上,体感接近打字输入;5 token/s 左右,等得起,但连续长文会让人焦虑;3 token/s 以下,只适合让它写结构化碎片,不适合长对话。
想提速,按优先级来:
- 换更小的模型。从 7B 降到 4B,速度提升可能接近一倍。
- 降量化精度。Q8 换 Q4_K_M,提速明显,质量损失有限。
- 缩短上下文。
-c 2048降到-c 512,内存压力小很多,加载也更快。 - 关后台、拆手机壳、保持散热。物理手段比任何软件调参都直接。
- 不要边充电边满载跑。充电发热会让你功亏一篑,尽管看起来能维持电量。
还有一个建议:手机端跑模型,天然适合短轮次任务,比如做翻译、改摘要、解释概念、生成代码片段,而不是让它写 8000 字小说。任务选对了,慢一点也能用得很舒服。
6. 常见问题与避坑清单
6.1 模型加载到一半就闪退
这是手机端最常见的故障,几乎都是同一个原因:内存不够,Android 系统把 Termux 或应用进程杀了。排查思路是先看内存余量:
free -h如果可用内存只剩一两百 MB,基本没戏。解决办法按优先级试:把上下文降到-c 512立刻省出几百 MB;换 Q3_K_S 等更小的量化版本;关掉所有后台任务;把 Termux 锁定进最近任务列表,防止被系统“自动清理”掉。如果厂商后台管理特别激进,还得去电池设置里把 Termux 设为不限制后台。
6.2 下载慢、下到一半失败
模型文件动辄一两 GB 起步,下载失败非常常见。我的经验是两条路:
一是用命令行断点续传,下到一半断了也能接着下:
curl -L -C - -O 模型直链地址二是绕过下载环节,直接用电脑下载模型,通过局域网传输或数据线拷贝到手机。电脑端网络更稳定,下载工具也更多。另外,千万别手滑下载 FP16 原始模型,那是手机根本跑不动的体积,只有 GGUF 量化版才适合手机。
6.3 发热严重、电池飞降
手机跑大模型是重度负载,发热是常态。我第一次编译完跑了五分钟,手机背板就烫到不敢拿。关键是别让芯片过热降频到“越跑越慢”的恶性循环。实操办法:
- 把线程数从 4 降到 2,速度慢一点,但稳很多。
- 拆掉手机壳,让机身热量尽量散出去。
- 把上下文调短,减少单次推理的计算量。
- 不要在大太阳底下玩,更别边充电边跑满负载。
如果手机已经烫到系统弹温度警告,别硬撑,退出去凉快几分钟再继续。真触发保护性重启,对手机寿命也没好处。
6.4 输出重复、乱码、答非所问
如果模型回答质量差,先别怪模型,大概率是参数或 Prompt 的问题。我踩过几个坑:
- 重复绕圈,加
--repeat-penalty 1.1,把重复的惩罚提到 1.15。 - 回答太飘,把
--temp从 0.7 降到 0.4,稳定很多。 - 答非所问,检查 Prompt 模板。小模型对提示格式很敏感,Qwen3 和 DeepSeek-R1 蒸馏版在模型托管平台页面都会给出推荐模板,直接用那个,不要自己“自由发挥”。
- 输出乱码,检查模型文件字节数是否完整,不要用“不完全下载”直链续传后的坏文件。
这些排查步骤能解决九成以上的质量问题。要是都试过了还是不行,那就真是模型能力上限或者量化损失太大,换个大档位模型比继续调参更有效。
6.5 中文输入在终端里不生效
用过 Termux 跑 llama.cpp 的人,大概率都遇到过中文输入失效的问题。在交互模式下,手机输入法弹出的中文无法上屏,敲出去的拼音直接变成乱码。我在这个坑上浪费了不少时间。
现在的解法很简单:不开交互模式,直接用-p参数把问题塞给模型;或者干脆启动 llama-server,用手机浏览器打开网页界面聊天,那个输入框对中文没有任何限制。如果你特别想在终端里聊中文,也可以给llama-cli传--in-prefix参数手动指定前缀,但体验依然不如 Web 界面顺畅。
写到这里,正好想起我第一次编译 llama.cpp 时把线程数设成 8,手机热到能做煎蛋,速度反而掉得惨不忍睹。后来老老实实-t 4,凉爽又顺畅。如果你也想在手机上搭这套东西,我的建议是别把目标定成“超越云端”,它做不到;但当你在地铁里没信号却还能问本地模型一个专业问题,那种感觉确实很值。模型文件下载好之后,这套推理平台就完全属于你了,不用连网、不用授权、不用担心对话记录被传到别处,这也是我后来一直在用的最大理由。