最近两年AI技术发展迅猛,各种大语言模型层出不穷。但大多数人都只能通过云端API来使用这些AI服务,不仅需要联网,还存在隐私泄露的风险。想象一下,如果你能把一个强大的对话AI模型直接装进手机,随时随地离线使用,那该有多酷?
我在实际使用中发现,本地部署的ChatGLM模型特别适合这些场景:
Termux这个神器让安卓手机变身为一台微型Linux电脑,而fastllm则让大模型在手机端高效运行成为可能。实测下来,即使是6B参数的ChatGLM模型,在主流安卓手机上也能达到可用的推理速度。
首先从F-Droid或Google Play下载Termux。建议选择F-Droid版本,因为更新更及时。安装完成后,你会看到一个简陋的命令行界面——别担心,这就是我们的"魔法实验室"。
我建议先执行这几个基础命令:
bash复制pkg update && pkg upgrade
pkg install git wget python
termux-setup-storage
这些命令分别完成了:
为了让Termux用起来更顺手,我通常会做这些优化:
bash复制pkg install proot openssh
tsu
passwd
配置SSH特别实用,这样就能用电脑的键盘来操作手机了。具体操作是:
ifconfig查看手机IPssh username@手机IP -p 8022连接踩过的坑:部分手机厂商会限制8022端口,如果连接失败可以尝试修改Termux的sshd配置。
fastllm是一个用C++编写的高效推理框架,特别适合移动端部署。编译过程虽然有点耗时,但操作很简单:
bash复制git clone https://github.com/ztxz16/fastllm
cd fastllm
mkdir build && cd build
cmake .. -DCMAKE_CXX_FLAGS="-march=native"
make -j4
这里有个小技巧:添加-march=native参数可以让编译器针对你的手机CPU做优化,实测能提升约15%的推理速度。编译完成后,build目录下会生成几个关键可执行文件:
main:交互式对话程序benchmark:性能测试工具webui:网页版界面ChatGLM-6B的INT4量化版本是最适合手机部署的,模型文件大约3.8GB。我试过几种传输方法:
推荐第三种方法,先在电脑和手机都安装Resilio Sync,然后创建一个私有同步文件夹。实测传输速度比USB线还快,而且支持断点续传。
模型文件需要放在Termux能访问的目录,比如:
bash复制mkdir ~/models
mv /storage/emulated/0/Download/chatglm-6b-int4.flm ~/models/
基础启动命令很简单:
bash复制cd ~/fastllm/build
./main -p ~/models/chatglm-6b-int4.flm
但这样直接运行可能会遇到内存不足的问题。我的优化方案是:
bash复制./main -p ~/models/chatglm-6b-int4.flm --max_mem 3000
这个参数告诉程序最多使用3GB内存,避免被系统杀掉进程。
在我的骁龙865手机(一加8T)上测试,不同配置下的表现:
| 参数设置 | Tokens/s | 内存占用 |
|---|---|---|
| 默认参数 | 0.8 | 3.5GB |
| --threads 4 | 1.2 | 3.5GB |
| --max_mem 3000 | 0.9 | 3.0GB |
| 组合优化 | 1.5 | 3.0GB |
关键发现:
配合python脚本,可以把ChatGLM变成私人助理:
python复制import os
import sys
question = sys.argv[1]
cmd = f'echo "{question}" | ./main -p ~/models/chatglm-6b-int4.flm'
os.system(cmd)
保存为ask.py后,就能用python ask.py "问题内容"来快速查询了。我常用它来:
虽然速度不如专业翻译APP,但在没网络时非常救命。我写了个简单的shell脚本:
bash复制#!/bin/bash
echo "将以下中文翻译成英文:$1" | ./main -p ~/models/chatglm-6b-int4.flm -t 1
使用时直接./translate.sh "要翻译的内容",虽然每次需要3-5秒响应,但准确度相当不错。
在小米手机上编译时报错"undefined reference to 'sqrtf'":
bash复制# 解决方法:
pkg install ndk-multilib
export CXXFLAGS="-stdlib=libc++"
模型加载到一半闪退:
--max_mem参数值推理速度突然变慢:
--threads 2经过三个月的实际使用,这套方案最让我满意的就是隐私性。所有对话数据都留在手机本地,处理工作邮件和文档时特别安心。虽然速度比不上云端API,但在应急场景下已经足够实用。