旧手机别扔!三台安卓手机搭建本地大模型实战指南
旧手机别扔!三台安卓手机搭建本地大模型实战指南
从 4GB 老爷机到 12GB 千元机,手把手教你在手机上跑 Ollama,搭建私有 AI 服务器
写在前面
很多人以为跑大模型必须买显卡、配服务器。但其实,你抽屉里吃灰的旧手机就能跑。
我手头有三台安卓设备,配置从弱到强:华为畅享 9 Plus(4GB)、OnePlus 3(6GB)、vivo Y300i(12GB)。经过一周折腾,全部成功部署 Ollama,实现了手机端本地推理。
这篇文章把整个过程记录下来,包括硬件选型、模型选择、常见坑和最终推荐配置。
一、硬件清单:三台设备概况
| 设备 | RAM | 处理器 | 系统 | 定位 |
|---|---|---|---|---|
| vivo Y300i | 12GB | 天玑 | Android + Termux | 主力机 |
| OnePlus 3 | 6GB | 骁龙 820 | Kali NetHunter | 备用机/7×24 服务器 |
| 华为畅享 9 Plus | 4GB | 麒麟 710 | EMUI + Termux | 极弱,勉强跑 |
关键结论:
- 12GB 内存:可以流畅跑 7-8B 模型,体验接近 GPT-3.5
- 6GB 内存:可以跑 3-4B 模型,代码补全够用
- 4GB 内存:只能跑 0.5B 极限小模型,聊胜于无
二、环境准备
2.1 安装 Termux(普通安卓)
# 通过 F-Droid 安装 Termux(不要用 Google Play 版本,太旧)
# 安装后更新并安装基础工具
pkg update && pkg upgrade
pkg install wget proot # proot 用于运行 Linux 环境
2.2 Kali NetHunter(OnePlus 3 专属)
OnePlus 3 刷了 Kali NetHunter,自带完整 Linux 环境,不需要 Termux 那一层。
优势:
- 功耗低(骁龙 820 比天玑省电)
- 适合 7×24 开机当服务器
- 直接跑
ollama serve暴露给局域网
2.3 安装 Ollama
# 所有设备通用安装命令
curl -fsSL https://ollama.com/install.sh | sh
# 安装后验证
ollama --version
如果官方脚本不兼容(常见于 ARM 设备),手动下载 ARM64 二进制:
# 下载 ARM64 版本
wget https://github.com/ollama/ollama/releases/latest/download/ollama-linux-arm64.tar.gz
tar -xzf ollama-linux-arm64.tar.gz
# OnePlus 3 手动安装示例
mkdir -p ~/Ollama/bin
mv ollama ~/Ollama/bin/
三、模型选型与 L 等级
3.1 什么是 L 等级
L 等级是我根据社区经验和实测得出的能力分级:
| 等级 | 能力描述 | 对标 |
|---|---|---|
| L1 | 闲聊、讲笑话、极简单问答 | 无 |
| L2 | 知识问答、简单写作、基础理解 | GPT-3 |
| L3 | 复杂推理、代码生成、长文写作 | GPT-3.5 |
| L4 | 强推理、专业代码、接近人类专家 | GPT-4o / Claude Sonnet |
手机端一般能达到 L2-L3,日常使用足够了。
3.2 vivo Y300i(12GB)可用模型
| 模型 | 大小 | L等级 | 拉取命令 |
|---|---|---|---|
| qwen3:8b | 5.2GB | L3+ | ollama pull qwen3:8b |
| qwen2.5-coder:7b | 4.7GB | L3 | ollama pull qwen2.5-coder:7b |
| qwen2.5-coder:14b | 9.0GB | L3+ | ollama pull qwen2.5-coder:14b |
| qwen3:14b | 9.3GB | L3+ | ollama pull qwen3:14b |
| qwen3:4b | 2.5GB | L2+ | ollama pull qwen3:4b |
推荐组合:
ollama pull qwen3:8b # 通用主力,综合能力强
ollama pull qwen2.5-coder:7b # 写代码专用
14B 虽然能跑但接近内存上限,推理速度会明显下降,不太推荐。
3.3 OnePlus 3 Kali(6GB)可用模型
| 模型 | 大小 | L等级 | 拉取命令 |
|---|---|---|---|
| qwen3:4b | 2.5GB | L2+ | ollama pull qwen3:4b |
| qwen2.5-coder:3b | 1.9GB | L3 | ollama pull qwen2.5-coder:3b |
| qwen3:1.7b | 1.4GB | L2 | ollama pull qwen3:1.7b |
| qwen2.5-coder:1.5b | 986MB | L2 | ollama pull qwen2.5-coder:1.5b |
| qwen3:0.6b | 523MB | L1 | ollama pull qwen3:0.6b |
| tinyllama:1.1b | 638MB | L1 | ollama pull tinyllama |
推荐组合:
ollama pull qwen3:4b # 主力通用
ollama pull qwen2.5-coder:3b # 代码专家(这反而是 L3!)
注意:6GB 跑不了 8B 模型(需要 5.5GB 内存,系统不够用)。
3.4 华为畅享 9 Plus(4GB)可用模型
| 模型 | 大小 | L等级 | 拉取命令 |
|---|---|---|---|
| qwen2.5-coder:0.5b | 398MB | L1 | ollama pull qwen2.5-coder:0.5b |
| qwen3:0.6b | 523MB | L1 | ollama pull qwen3:0.6b |
| tinyllama:1.1b | 638MB | L1 | ollama pull tinyllama |
唯一实用选择:qwen2.5-coder:0.5b,能做简单代码补全。说实话 4GB 设备跑大模型的体验很差,建议考虑卖掉换钱。
四、启动与联网
4.1 暴露到局域网
默认情况下 Ollama 只监听 127.0.0.1,其他设备无法访问。需要修改启动参数:
# 暴露给局域网(所有设备都能连)
OLLAMA_ORIGINS=* OLLAMA_HOST=0.0.0.0:11434 ollama serve &
# OnePlus 3(手动安装版)
OLLAMA_ORIGINS=* OLLAMA_HOST=0.0.0.0:11434 ~/Ollama/bin/ollama serve &
4.2 获取手机 IP
# Termux / Kali 通用
ip addr show wlan0 | grep "inet " | awk '{print $2}'
# 输出类似:192.168.1.10/24 → IP 是 192.168.1.10
4.3 从电脑连接
电脑端通过 WorkBuddy MCP、Chatbox 等客户端连接手机上的 Ollama:
# 在电脑上测试连接
curl http://192.168.1.10:11434/api/tags
4.4 SSH 远程管理
# 从电脑 SSH 到 vivo(Termux)
ssh [email protected] -p 8022
# 从电脑 SSH 到 OnePlus 3(Kali,默认 22 端口)
ssh [email protected]
五、Chatbox 连接配置
Chatbox 是手机上常用的 AI 聊天客户端。
连接方式:选择「Ollama 原生模式」,不要选「OpenAI Compatible」。
| 配置项 | 值 |
|---|---|
| 协议 | HTTP |
| 主机 | 你手机的 IP(如 192.168.1.10) |
| 端口 | 11434 |
| 模型路径 | 自动识别(不需要填 /v1) |
常见错误:如果选了 OpenAI 格式,会返回 403 错误——Chatbox 发的是 /v1/chat/completions,Ollama 不认。
六、踩坑实录 —— 我亲自趟过的雷
整个部署过程横跨三台设备、两种系统(Android Termux + Kali NetHunter),踩过的坑比成功多得多。以下是完整的「翻车记录 + 修复过程」。
坑① 第一次就跑 bf16 模型,直接被 OOM Kill
场景:vivo Y300i(12GB),满怀期待地在 Termux 里执行了第一条命令:
ollama run qwen3.5:2b-bf16
报错:
signal: killed
原因:bf16(bfloat16)是 HuggingFace 上的原始权重格式,qwen3.5:2b-bf16 并非 Ollama 标准 tag(标准 tag 是 qwen3.5:2b,默认 q4_K_M 量化)。bf16 加载到内存后实际占用 5-6GB,Android 的 OOM Killer 检测到进程吃太多内存,直接杀掉。
后来不死心又试了一次,这次侥幸加载成功了,但推理到一半又炸了:
unexpected EOF
——内存不够了,进程在回答中途被系统一刀切,连接断开。
修复:永远不要用 bf16 格式。手机上只能用 q4_K_M 或更低的量化版本。最终换成了 qwen2.5-coder:7b(q4_K_M),12GB 手机完美运行。
教训:手机上不跑任何非量化模型。q4_K_M 是甜点,q3_K_M 也能用但质量下降明显。
坑② 以为量化标签要写全,结果根本搜不到模型
场景:在 vivo 上拉模型,手写了完整量化标签:
ollama pull qwen2.5-coder:7b-instruct-q4_K_M
ollama pull qwen3:8b-q4_K_M
结果:前者拉下来了(碰巧 Ollama 做了模糊匹配),但后者和各种带 -instruct-q4_K_M 后缀的都严重混乱,根本不确定自己拉的是什么。
原因:Ollama 的官方拉取命令是不带量化标签的,写 qwen3:8b 就行,它会自动选最优量化版本(默认就是 q4_K_M)。
修复:统一用最简名称:
ollama pull qwen3:8b # ✅ 正确
ollama pull qwen2.5-coder:7b # ✅ 正确
ollama list 可以查看已安装模型的精确信息。
坑③ 把不存在的东西当存在,浪费大量时间搜索
这是最尴尬的坑——我在 Ollama 官网上反复核实之前,推荐了多个根本不存在的模型。
| 我推荐过的(误报) | 真相 |
|---|---|
qwen3-coder:8b |
qwen3-coder 系列只有 30B 和 480B,没有 8B |
qwen3-coder:8b-q4_K_M |
同上,不存在 |
tinyllama:1.1b-q4 |
正确名称是 tinyllama 或 tinyllama:1.1b,没有 -q4 tag |
OnePlus 3 跑 qwen3:8b |
一开始兴奋地说 6GB 能跑 8B,算完才发现 5.5GB 模型 + 系统开销 ≈ 6.5GB,根本不够 |
修复:去 ollama.com/search 逐模型核实。现在这篇文章里的所有模型名称都已验证。
坑④ OnePlus 3(Kali NetHunter)拉模型报 file does not exist
场景:OnePlus 3 刷了 Kali NetHunter,手动下载了 ARM64 版 Ollama 放在 ~/Ollama/bin/ 目录。执行拉取命令:
./bin/ollama pull qwen3:4b
报错:
Error: pull model manifest: file does not exist
原因:根本乌龙——ollama serve 没启动。普通 Termux 安装后 service 自动启动,但手动安装版必须手动启动服务。没 serve 就 pull,Ollama 找不到本地模型存储路径。
修复:
# 先启动服务
~/Ollama/bin/ollama serve &
# 再拉模型
~/Ollama/bin/ollama pull qwen3:4b
教训:Kali NetHunter 手动安装 Ollama 后,每次开机都要先 serve,且必须用全路径——系统不在 PATH 里。
坑⑤ Chatbox 连不上,一直 403
场景:手机端装好 Chatbox,想连上 vivo 的 Ollama。
Chatbox 的「添加模型」里有一个「OpenAI Compatible」选项。我心想 Ollama 的 API 格式不就是兼容 OpenAI 的吗?果断选了。
填上 http://192.168.1.11:11434/v1,点击测试连接——403 Forbidden。
原因:选 OpenAI Compatible 模式后,Chatbox 实际发的请求路径是 /v1/chat/completions。但 Ollama 的 API 路径是 /api/chat,完全不同。
修复:在 Chatbox 中选择 「Ollama 原生模式」(不是 OpenAI Compatible),协议填 HTTP,端口填 11434,模型路径留空让它自动识别。
坑⑥ 下载中断留下损坏文件,死活拉不下来
场景:vivo 上拉 qwen3:8b,网络波动导致下载中断。重新执行 ollama pull,每次都报错:
Error: pull model manifest: unexpected EOF
原因:中断留下了 .partial 损坏文件,Ollama 检测到已有文件就直接用了,导致每次都读损坏数据。
修复:
# 清理所有损坏的部分下载文件
rm -f ~/.ollama/models/blobs/*partial*
# 重新拉取
ollama pull qwen3:8b
坑⑦ 华为畅享 9 Plus 高估,以为能跑 1.5B 模型
场景:拿到华为畅享 9 Plus(4GB RAM)时想,虽然内存小但跑个 qwen2.5-coder:1.5b(约 1GB)总行吧?
结果拉是拉下来了,跑起来直接卡到手机发烫,终端一个字一个字往外蹦,比打字还慢。
原因:4GB 内存里系统就占了接近 2GB,剩下不到 2GB 可用。1.5B 的 q4 模型加载需要约 1.5GB,再加上推理时的上下文缓冲,内存直接爆炸,触发 swap 疯狂读写闪存。
修复:认命。4GB 设备唯一能用的就是 qwen2.5-coder:0.5b(398MB),输出质量勉强能看,做简单代码补全还行。旁边 6GB 的 OnePlus 3 跑 3B 模型都流畅,这就是硬件的残酷。
坑⑧ OLLAMA_HOST 忘了加 OLLAMA_ORIGINS
场景:服务启动成功,curl http://手机IP:11434/api/tags 在电脑上能返回数据。但 Chatbox 或其他 Web 客户端连过去就是报跨域错误。
原因:只设了 OLLAMA_HOST=0.0.0.0:11434 开放网络,但没设 OLLAMA_ORIGINS=* 允许跨域请求。Chatbox 前端发的是浏览器请求,浏览器有 CORS 限制。
修复:
# 两个环境变量要一起设
OLLAMA_ORIGINS=* OLLAMA_HOST=0.0.0.0:11434 ollama serve &
# ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# 允许跨域 允许局域网访问
# 缺一不可! 缺一不可!
踩坑总结
| 编号 | 坑 | 关键词 | 血泪指数 |
|---|---|---|---|
| ① | bf16 直接 OOM Kill | 量化格式 | 🩸🩸🩸 |
| ② | 量化标签写太全反而搜不到 | 模型名称 | 🩸🩸 |
| ③ | 推荐不存在的模型 | 模型名称 | 🩸🩸🩸🩸 |
| ④ | OnePlus 3 忘记 serve 就 pull | 手动安装 | 🩸🩸🩸 |
| ⑤ | Chatbox 选错模式 403 | 客户端连接 | 🩸🩸 |
| ⑥ | 下载中断 partial 损坏 | 网络 | 🩸🩸 |
| ⑦ | 高估 4GB 手机能力 | 硬件上限 | 🩸🩸🩸 |
| ⑧ | 忘记设 OLLAMA_ORIGINS | CORS | 🩸🩸 |
如果这些坑能帮你少走弯路,那这周折腾就值了。
七、最终推荐方案
vivo Y300i(主力)
# 安装
ollama pull qwen3:8b # L3+ · 通用主力
ollama pull qwen2.5-coder:7b # L3 · 代码主力
# 启动
OLLAMA_HOST=0.0.0.0:11434 ollama serve &
能力:复杂推理、代码生成、长文写作,日常使用足够。
OnePlus 3 Kali(备用/服务器)
# 安装
~/Ollama/bin/ollama pull qwen3:4b # L2+ · 通用主力
~/Ollama/bin/ollama pull qwen2.5-coder:3b # L3 · 代码专家
# 启动(先 serve 再 pull,否则报错)
OLLAMA_HOST=0.0.0.0:11434 ~/Ollama/bin/ollama serve &
优势:低功耗,适合 7×24 开机当局域网 AI 服务器。
华为畅享 9 Plus(放弃或极限使用)
ollama pull qwen2.5-coder:0.5b # L1 · 唯一实用
诚实建议:卖掉换钱。4GB 设备跑模型的体验太差了。
八、总结
| 设备 | 主力模型 | L等级 | 定位 |
|---|---|---|---|
| vivo Y300i | qwen3:8b | L3+ | 主力机 |
| OnePlus 3 | qwen3:4b | L2+ | 7×24 服务器 |
| 华为畅享 9 | 0.5b | L1 | 放弃 |
几个关键认知:
- 6GB 是实用门槛——低于这个配置体验很差
- 8B 模型是甜点——能力接近 GPT-3.5,12GB 手机就能跑
- q4_K_M 量化最稳——兼顾质量与内存
- OLLAMA_HOST=0.0.0.0 是联网关键——别忘了加
- IP 会漂移——每次开机后要确认
旧手机不需要吃灰,装个 Ollama,它就是你的私有 AI 服务器。
最后更新:2026-06-22
附录:模型名称验证记录
以下所有推荐模型均已通过 ollama.com 逐一核实(核查日期:2026-06-22):
| 模型名称 | 官方页面 | 验证状态 |
|---|---|---|
qwen3:0.6b |
ollama.com/library/qwen3 | ✅ 523MB |
qwen3:1.7b |
ollama.com/library/qwen3 | ✅ 1.4GB |
qwen3:4b |
ollama.com/library/qwen3 | ✅ 2.5GB |
qwen3:8b |
ollama.com/library/qwen3 | ✅ 5.2GB |
qwen3:14b |
ollama.com/library/qwen3 | ✅ 9.3GB |
qwen2.5-coder:0.5b |
ollama.com/library/qwen2.5-coder | ✅ 398MB |
qwen2.5-coder:1.5b |
ollama.com/library/qwen2.5-coder | ✅ 986MB |
qwen2.5-coder:3b |
ollama.com/library/qwen2.5-coder | ✅ 1.9GB |
qwen2.5-coder:7b |
ollama.com/library/qwen2.5-coder | ✅ 4.7GB |
qwen2.5-coder:14b |
ollama.com/library/qwen2.5-coder | ✅ 9.0GB |
tinyllama |
ollama.com/library/tinyllama | ✅ 638MB |
tinyllama:1.1b |
ollama.com/library/tinyllama | ✅ 同上(latest 即 1.1b) |
确认不存在:
| 名称 | 原因 |
|---|---|
qwen3-coder:8b |
qwen3-coder 仅有 30B 和 480B,无 8B 版本 |
tinyllama:1.1b-q4 |
官方 tag 为 tinyllama 或 tinyllama:1.1b,无 -q4 后缀 |
qwen3.5:2b-bf16 |
非 Ollama 标准 tag;标准为 qwen3.5:2b(默认 q4_K_M) |
评论区