安卓手机部署阿里的Qwen3-0.6B(llama.cpp,ollama)

1,300 阅读4分钟

背景

利用闲置的手机部署阿里的Qwen3-0.6B,对比了llama.cpp和ollama部署所占用的资源。

效果

我这里使用的是小米Xiaomi Pad 5(骁龙860 八核 最高2.96GHZ)

部署模型大小内存CPUtoken速度
llama.cppQwen3-0.6B-Q8_0.gguf609MB14.9%686%16.18 tokens/秒
llama.cppQwen3-1.7B-Q8_0.gguf1.70G30.9%681%8.16 tokens/秒
ollamaqwen3:0.6b-q8_0832MB23.6%722%14.93 tokens/秒
ollamaQwen3-0.6B-Q8_0.gguf609MB21.0%721%12.97 tokens/秒

ollama模型久不调用会释放内存的。

llama.cpp 部署模型

1、手机需要安装Termux

在Github Releases 选择termux-app_v0.118.2+github-debug_arm64-v8a.apk下载,并且安装到手机。

Releases · termux/termux-app

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下来,估计网络不行)

微信截图_20250521193833.png

通过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

微信截图_20250521194939.png

通过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

微信截图_20250521210114.png

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就能将模型下载下来并且运行,但是相对资源要求的比较多。