1. 项目概述
在移动设备上本地运行大语言模型一直是个技术挑战,特别是对老旧手机而言。最近我在一台2018年发布的安卓手机上成功部署了通义千问大模型,整个过程仅使用Termux终端和Llama.cpp框架。这个方案最大的优势是完全离线运行,不需要依赖云端服务,而且对硬件要求相对友好。
实测下来,即便是4GB内存的中低端设备,也能流畅运行70亿参数的模型版本。下面我会完整分享从环境准备到模型推理的全过程,包括每一步可能遇到的坑和解决方案。这个教程特别适合想体验大模型能力但又不想购买昂贵设备的开发者,或者单纯想折腾老旧设备的极客玩家。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具选型
2.1 硬件要求分析
首先需要明确的是,大模型本地部署对硬件有一定要求。经过多次测试,建议设备至少满足:
- 安卓8.0及以上系统
- 4GB以上可用内存(实际运行时会占用约3.5GB)
- 64位ARM架构处理器
- 至少5GB存储空间(用于模型文件)
注意:如果手机内存不足4GB,可以尝试30亿参数的模型版本,但推理质量会明显下降。
2.2 软件工具选型
为什么选择Termux+Llama.cpp这个组合?主要基于以下几点考虑:
- Termux:提供了完整的Linux环境,不需要root权限
- Llama.cpp:专门为边缘设备优化的推理框架,支持4-bit量化
- 通义千问:中文理解能力优秀,70亿参数版本在移动端表现平衡
替代方案对比:
| 方案 | 优点 | 缺点 |
|---|---|---|
| Termux+Llama.cpp | 资源占用低,支持量化 | 需要手动编译 |
| MLCC+TensorFlow Lite | 官方支持 | 模型兼容性差 |
| Docker+ONNX Runtime | 部署简单 | 内存需求高 |
3. 完整安装步骤
3.1 Termux基础环境配置
首先在安卓设备上安装Termux(建议从F-Droid获取最新版):
bash复制pkg update && pkg upgrade
pkg install git cmake python
然后配置必要的环境变量:
bash复制echo 'export PATH=$PATH:$HOME/.local/bin' >> ~/.bashrc
source ~/.bashrc
3.2 Llama.cpp编译安装
这个步骤最容易出问题,需要特别注意:
bash复制git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j4
常见问题处理:
- 编译失败:尝试
make clean后重新执行 - 内存不足:添加交换分区
termux-setup-storage && fallocate -l 2G ./swapfile - 缺少依赖:根据错误提示安装对应包
3.3 模型下载与量化
通义千问的模型需要先转换为gguf格式:
bash复制python convert.py --outfile qwen.gguf --model qwen-7b
然后进行4-bit量化(节省75%内存):
bash复制./quantize qwen.gguf qwen-7b-q4_0.gguf q4_0
量化过程可能需要30-60分钟,建议连接充电器操作。
4. 模型运行与优化
4.1 基础启动命令
最简单的启动方式:
bash复制./main -m qwen-7b-q4_0.gguf -p "你好"
但这样直接运行效率很低,需要添加优化参数:
bash复制./main -m qwen-7b-q4_0.gguf \
-t 4 \
-c 2048 \
-b 512 \
--temp 0.7 \
--repeat_penalty 1.1
参数说明:
-t:线程数(建议CPU核心数)-c:上下文长度-b:批处理大小--temp:温度参数(控制随机性)--repeat_penalty:重复惩罚系数
4.2 性能优化技巧
通过实测发现几个关键优化点:
- 使用
taskset绑定大核:bash复制
taskset -c 4-7 ./main [参数] - 调整swappiness值:
bash复制echo 10 > /proc/sys/vm/swappiness - 关闭后台服务:
bash复制termux-wake-lock && termux-notification -t "模型运行中"
5. 常见问题解决方案
5.1 内存不足处理
当看到killed提示时,通常是OOM导致的。解决方法:
- 创建swap文件(至少2GB)
- 使用
-ngl 0参数禁用GPU加速 - 改用更小的模型版本
5.2 响应速度优化
如果推理速度过慢,可以尝试:
- 降低上下文长度(
-c 1024) - 使用
--prompt-cache缓存提示词 - 启用
--mlock锁定内存
5.3 中文乱码问题
Termux默认可能不支持中文显示,需要:
bash复制pkg install termux-exec
export LANG=zh_CN.UTF-8
6. 进阶使用技巧
6.1 持久化运行方案
想让模型在后台持续运行:
bash复制nohup ./main [参数] > output.log 2>&1 &
查看运行状态:
bash复制tail -f output.log
6.2 API服务搭建
通过curl与模型交互:
bash复制./server -m qwen-7b-q4_0.gguf -c 2048
然后另开终端测试:
bash复制curl http://localhost:8080/completion \
-H "Content-Type: application/json" \
-d '{"prompt": "你好", "temperature": 0.7}'
6.3 模型微调方法
虽然移动端不适合训练,但可以做轻量微调:
- 准备LORA适配器:
bash复制
python finetune.py --model qwen-7b-q4_0.gguf --data dataset.json - 应用适配器推理:
bash复制
./main -m qwen-7b-q4_0.gguf --lora adapter.bin
7. 实测性能数据
在不同设备上的表现对比:
| 设备 | RAM | 推理速度(tokens/s) | 内存占用 |
|---|---|---|---|
| 骁龙835 | 4GB | 2.1 | 3.4GB |
| 骁龙855 | 6GB | 3.8 | 3.6GB |
| 天玑1000 | 8GB | 4.5 | 3.5GB |
温度控制建议:
- 连续推理超过15分钟时,建议暂停5分钟
- 避免边充电边运行
- 可以安装
termux-sensor监控温度
8. 安全与维护建议
- 模型文件加密:
bash复制openssl enc -aes-256-cbc -salt -in qwen-7b-q4_0.gguf -out model.enc - 定期清理缓存:
bash复制rm -rf ~/.cache/llama.cpp - 备份重要配置:
bash复制
tar -czvf llama_backup.tar.gz ~/llama.cpp
经过两周的持续测试,这个方案在老设备上的稳定性出乎意料。我的备用机(小米8)已经可以7x24小时稳定运行,响应速度虽然比不上高端设备,但完全满足日常问答需求。最关键的是整个方案完全离线,没有任何隐私顾虑。
