背景
利用闲置的手机部署阿里的Qwen3-0.6B,对比了llama.cpp和ollama部署所占用的资源。
效果
我这里使用的是小米Xiaomi Pad 5(骁龙860 八核 最高2.96GHZ)
| 部署 | 模型 | 大小 | 内存 | CPU | token速度 |
|---|---|---|---|---|---|
| llama.cpp | Qwen3-0.6B-Q8_0.gguf | 609MB | 14.9% | 686% | 16.18 tokens/秒 |
| llama.cpp | Qwen3-1.7B-Q8_0.gguf | 1.70G | 30.9% | 681% | 8.16 tokens/秒 |
| ollama | qwen3:0.6b-q8_0 | 832MB | 23.6% | 722% | 14.93 tokens/秒 |
| ollama | Qwen3-0.6B-Q8_0.gguf | 609MB | 21.0% | 721% | 12.97 tokens/秒 |
ollama模型久不调用会释放内存的。
llama.cpp 部署模型
1、手机需要安装Termux
在Github Releases 选择termux-app_v0.118.2+github-debug_arm64-v8a.apk下载,并且安装到手机。
2、Termux启动SSH(非必须)
# 查看当前用户 (SSH连接需要)
whoami
# 设置当前用户密码 (SSH连接需要)
passswd
# 查询IP (SSH连接需要)
ifconfig
# 更新源
pkg upgrade
# 安装SSH
pkg install openssh
# 启动
sshd
3、SSH连接手机Termux(非必须)
ssh u0_a456@192.168.31.44 -p 8022
4、下载llama.cpp
# 切换国内源
termux-change-repo
apt list --upgradable
# 安装依赖工具
pkg install -y cmake git build-essential
# 下载 llama.cpp
git clone https://github.com/ggml-org/llama.cpp.git
# 如果git下不下来,通过scp拷贝进去
scp -P 8022 .\llama.cpp-master.zip u0_a456@192.168.31.44:~
5、编译llama.cpp
# 进入目录
cd llama.cpp
# 创建build文件,并且进入文件夹
mkdir build && cd build
# 生成编译配置,-DGGML_CUDA=OFF 关闭GPU
cmake .. -DGGML_CUDA=OFF
# 4个线程编译
make -j4
# 编译完成目录在/bin
ls ~/llama.cpp/build/bin
# bin添加到环境变量中
echo 'export PATH=$PATH:~/llama.cpp/build/bin/' >> ~/.bashrc
source ~/.bashrc
6、Hugging face查找量化模型
通过千问的Qwen3-0.6B点击Quantizations(量化),llama.cpp需要GGUF格式,可以找到下面
Qwen/Qwen3-0.6B-GGUF · Hugging Face
下载下来,(当然你也可以在Termux中wget下来,估计网络不行)
通过scp传到手机
scp -P 8022 .\ Qwen3-0.6B-Q8_0.gguf u0_a456@192.168.31.44:~
7、llama.cpp部署模型
简单以客户端方式启动:
llama-cli -m Qwen3-0.6B-Q8_0.gguf
通过server方式启动,并且允许外部访问
llama-server -m Qwen3-0.6B-Q8_0.gguf --port 8080 --host 0.0.0.0
8、通过python访问
import requests
import json
import time
# API_URL = "http://192.168.31.86:8080/v1/chat/completions"
API_URL = "http://192.168.31.44:8080/v1/chat/completions"
# API_URL = "http://127.0.0.1:8080/v1/chat/completions"
payload = {
"model": "Qwen3-0.6B-Q8_0", # llama-server 中可随意写
"messages": [
{"role": "system", "content": "你是一个英语学习助手。"},
{"role": "user", "content": "请用中文解释单词 ability 的含义,并给出一个英文例句。"}
],
"temperature": 0.7,
"max_tokens": 256,
"stream": False
}
# 记录开始时间
start_time = time.time()
# 发送请求
response = requests.post(API_URL, headers={"Content-Type": "application/json"}, data=json.dumps(payload))
# 记录结束时间
end_time = time.time()
if response.ok:
result = response.json()
message = result['choices'][0]['message']['content']
print("模型回复:\n", message)
# 处理 token usage 和速度统计
usage = result.get("usage", {})
total_tokens = usage.get("total_tokens", "未知")
elapsed = end_time - start_time
print(f"\n总 tokens: {total_tokens}")
print(f"耗时: {elapsed:.2f} 秒")
if isinstance(total_tokens, int) and elapsed > 0:
print(f"生成速度: {total_tokens / elapsed:.2f} tokens/秒")
else:
print("请求失败,状态码:", response.status_code)
print(response.text)
效果:
PS C:\Users\22787\Documents\python\word> python .\0.3b.py
模型回复:
<think>
嗯,用户让我解释“ability”的含义,并给出一个英文例句。首先,我需要确认“ability”这个词的常见含义。通常,ability指能力,比如数学能力、语言能力等等。然后,用户可能是在学习英语,想了解这个词的用法,或者用于写作或口语。接下来,我需要确保解释准确,例句也正确。
用户可能没有说出来的需求是希望例句能够准确传达“ability”的含义,同时例句适合不同场景。比如,学术写作、日常对话或者教学材料。我需要考虑例句的多样性,避免重复。此外,可能需要确认用户是否需要例句的结构,比如是否需要更多上下文或者是否有特定的用法要求。
还要注意用户的深层需求,可能他们想巩固“ability”的概念,或者需要它在某个特定语境中的应用。因此,在解释时要简明扼要,例句也要清晰,帮助用户理解。
</think>
**ability** 的含义是:**能力、能力、能力**。它可以指某人或某事物在某个领域中的表现或能力。
**英文例句**:
"Her ability to solve complex problems is what sets her apart as a creative thinker."(她
总 tokens: 290
耗时: 13.87 秒
生成速度: 20.91 tokens/秒
PS C:\Users\22787\Documents\python\word>
ollama 部署模型
ollama 部署模型和llama.cpp的步骤差不多,只是更换编译ollama,而且模型直接通过ollama下载。
我的安卓手机是ARM架构,需要自己下载和编译ollama,官网的安装脚本安装不了。
准备环境:
# 切换国内源
termux-change-repo
apt list --upgradable
# 拉取ollama
git clone https://github.com/ollama/ollama.git
# 安装工具依赖
pkg install git cmake wget golang
编译ollama:
# 进入目录
cd ollama
# 创建build文件,并且进入文件夹
mkdir build && cd build
# 使用 Go 的 国内镜像代理
echo 'export GOPROXY=https://goproxy.cn,direct' >> ~/.bashrc
source ~/.bashrc
# 生成go代码
go generate ../...
# 构建
go build ..
# 编译好的ollama添加环境变量
echo 'export PATH=$PATH:~/ollama/build:$PATH' >> ~/.bashrc
source ~/.bashrc
一个控制台启动ollama服务
# 配置host,允许外部访问
echo 'export OLLAMA_HOST=0.0.0.0' >> ~/.bashrc
source ~/.bashrc
# 启动
ollama start
另一个控制台运行qwen3:0.6b-q8_0服务
ollama run qwen3:0.6b-q8_0
python访问
import requests
import json
import time
API_URL = "http://192.168.31.86:11434/v1/chat/completions" # Ollama 默认端口为 11434
payload = {
"model": "qwen3:0.6b-q8_0", # ⚠️ 使用你已加载的 Ollama 模型名称(用 `ollama list` 查看)
"messages": [
{"role": "system", "content": "你是一个英语学习助手。"},
{"role": "user", "content": "请用中文解释单词 ability 的含义,并给出一个英文例句。"}
],
"temperature": 0.7,
"stream": False # 也支持 True
}
start_time = time.time()
response = requests.post(API_URL, headers={"Content-Type": "application/json"}, data=json.dumps(payload))
end_time = time.time()
if response.ok:
result = response.json()
message = result['choices'][0]['message']['content']
print("模型回复:\n", message)
usage = result.get("usage", {})
total_tokens = usage.get("total_tokens", "未知")
elapsed = end_time - start_time
print(f"\n总 tokens: {total_tokens}")
print(f"耗时: {elapsed:.2f} 秒")
if isinstance(total_tokens, int) and elapsed > 0:
print(f"生成速度: {total_tokens / elapsed:.2f} tokens/秒")
else:
print("请求失败,状态码:", response.status_code)
print(response.text)
效果:
PS C:\Users\22787\Documents\python\word> python .\0.3b_ollama.py
模型回复:
<think>
好的,用户让我解释“ability”这个词的意思以及一个英文例句。首先,我需要确认“ability”的基本含义。能力,通常指个人或事物能够完成某项任务或实现目标的能力。接下来,我应该举一个例子 ,比如一个学生学习英语的能力,这样更直观。
然后,用户可能需要这个解释来学习英语,或者在写作中使用。我要确保用词准确,比如“能力”用“ability”比较合适。例句部分要自然,比如“Her ability to solve complex problems makes her a great mathematician.” 这样既说明了例子,又符合语法。
还要检查有没有遗漏的信息,比如是否需要区分不同的能力和能力的其他方面,但用户可能只需要基础解释。确认无误后,就可以组织回答了。
</think>
**解释**:
"Ability" 指的是一个人或事物能够完成某项任务或实现目标的能力。例如,一个人有“ability to learn”,表示他/她具备学习新技能的能力。
**英文例句**:
"My teacher has an ability to make complex math problems easy for us. (我的老师有能力把复杂的数学问题变得简单易懂。)"
总 tokens: 283
耗时: 19.28 秒
生成速度: 14.68 tokens/秒
ollama 加载 GGUF模型,创建Modefile文件,内容如下:
FROM ./Qwen3-0.6B-Q8_0.gguf
PARAMETER stop ["<|endoftext|>", "</s>", "###", "用户:", "User:", "\n\n"]
PARAMETER num_predict 512
很奇怪上面设置结束符,好像没有感知到,一直输出
注册和运行模型:
# 注册模型
ollama create Qwen3-0.6B-Q8_0.gguf -f Modelfile
# 运行模型
ollama run Qwen3-0.6B-Q8_0.gguf
总结
手机上CPU跑Qwen3-0.6B,感觉速度还是可以的。llama.cpp部署相对没那么占资源,而ollama部署简单,直接run就能将模型下载下来并且运行,但是相对资源要求的比较多。