在 Android 设备上利用 Termux 安装 llama.cpp 并启动 WebUI
llama.cpp 没有发布官方 aarch64 的二进制,需要自己编译,好在 Termux 已经有编译好的包可用。
1. 安装 llama-cpp 软件
在 Termux 中安装 llama-cpp 包:
$ apt update
$ apt install llama-cpp
如果找不到这个包,请先执行 apt update 更新目录。为简单起见,先不安装 llama-cpp-backend-vulkan,用 CPU 来执行 llama.cpp。
2. 下载模型文件
下载 Qwen3.5-0.8B-UD-Q4_K_XL.gguf 模型。该模型是 Q4 量化的,比原版减少了一半空间,而能力差不多。
$ mkdir model
$ cd model
$ curl -LO https://hf-mirror.com/unsloth/Qwen3.5-0.8B-GGUF/resolve/main/Qwen3.5-0.8B-UD-Q4_K_XL.gguf
3. 使用 llama-cli 交互工具加载模型并对话
$ llama-cli -m Qwen3.5-0.8B-UD-Q4_K_XL.gguf --ctx-size 16384 -cnv
加载成功后,可以输入问题进行交互。例如:
用因式分解法解方程 x^2-x-20=0
模型输出结果后,输入 /exit 退出:
> /exit
Exiting...
由于模型较小,智能相对有限,但基本功能正常。
4. 利用 llama-server 内置的 WebUI 功能
启动服务器以提供 Web 界面访问:
$ llama-server -m ./Qwen3.5-0.8B-UD-Q4_K_XL.gguf --jinja -c 0 --host 127.0.0.1 --port 8033
系统检测到 CPU 有 8 个线程,用了 7 个,输出一堆参数后等待用浏览器访问 http://127.0.0.1:8033。
在浏览器中输入问题,输出速度比命令行慢一些,大约 3t/s。
服务端日志如下:
srv log_server_r: done request: GET / 127.0.0.1 200
srv params_from_: Chat format: peg-constructed
slot get_availabl: id 3 | task -1 | selected slot by LRU, t_last = -1
slot launch_slot_: id 3 | task -1 | sampler chain: logits -> ?penalties -> ?dry -> ?top-n-sigma -> top-k -> ?typical -> top-p -> min-p -> ?xtc -> temp-ext -> dist
slot launch_slot_: id 3 | task 0 | processing task, is_child = 0
slot update_slots: id 3 | task 0 | new prompt, n_ctx_slot = 262144, n_keep = 0, task.n_tokens = 23
slot update_slots: id 3 | task 0 | n_tokens = 0, memory_seq_rm [0, end)
srv log_server_r: done request: POST /v1/chat/completions 127.0.0.1 200
slot init_sampler: id 3 | task 0 | init sampler, took 0.01 ms, tokens: text = 23, total = 23
slot update_slots: id 3 | task 0 | prompt processing done, n_tokens = 23, batch.n_tokens = 23
slot print_timing: id 3 | task 0 | prompt eval time = 1447.31 ms / 23 tokens ( 62.93 ms per token, 15.89 tokens per second)
eval time = 171453.86 ms / 569 tokens ( 301.32 ms per token, 3.32 tokens per second)
total time = 172901.17 ms / 592 tokens
slot release: id 3 | task 0 | stop processing: n_tokens = 591, truncated = 0
srv update_slots: all slots are idle

