
网站始于19年冬,马上建站满2000天喽。
本篇文章主要介绍在树莓派4b 8GB版本安装Qwen模型
Qwen2.5-7B-Q4_K_M,大约占用磁盘空间4G左右,在树莓派上主要瓶颈还是CPU。
一番折腾后你将失去时间和金钱,获得部署成功的快乐与疲惫。
前言
这个暑假,入了一台Raspberry Pi 4B 8GB版本,之前的3B性能比较差出了。当时买TF卡的时候图便宜在某小黄鱼上入二手的卡,结果就是在Win上烧录完系统一切正常,上机以后第一次开机接视频线可以看到自动进行磁盘修复,还能开机。重启后就会出现文件系统错误甚至找不到TF卡的情况。
因4B设备运行内存较大,之前试着开过一个MC服务器,运行还算流畅,就是开飞行跑图时会卡,纯生存服加一些轻量MOD应该问题不大。今天捣鼓着准备试试本地部署一个AI模型。
本来想用最近出的Kimi K2模型,因为相比上一个版本的Kimi来说,感觉这个K2语言更加自然生动,但是发现这个模型需要更大的运行内存和磁盘空间,目前我最多能提供50GB TF卡内存和6.5GB运行内存,这远低于Kimi的要求。随后想到之前也用过通义千问的模型,于是查找后决定安装Qwen2.5-7B-Q4_K_M
,这个版本比较符合我当前的配置。
Qwen2.5-7B-Q4_K_M 是通义千问 2.5 系列的 70 亿参数大模型,用 4bit 量化压缩,体积更小、速度更快,适合本地部署,推理质量接近原版 7B。
软硬件配置
树莓派:Raspberry Pi 4 Model B Rev 1.5,系统64-bit Raspberry Pi OS Lite(Debian Bookworm)
内存卡:Netac郎科,64GB TF卡。读取速度可能会影响开机后第一次运行AI的速度。
MicroHDMI线:纯SSH连接无需。如果需要连接显示屏可准备,连接电脑还需买视频采集卡
电源:不知名品牌适配器+Romoss Type-A to Type-C,15W
金属散热壳+风扇:警告,散热一定要好,推理时CPU会长时间100%。我用金属盔甲被动散热温度大概60度左右。
电脑安装PuTTY
安装依赖
如果是新鸡可以先换源(Bookworm),已换可跳过
备份原源文件
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
替换主源(Debian 官方源换为清华源)
1 | sudo sed -i 's|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list |
更新并升级
1 | sudo apt update && sudo apt upgrade -y |
安装编译链 + 构建系统 + 工具
1 | sudo apt install -y \ |
安装 OpenBLAS(ARM NEON 加速,推理速度↑)
树莓派的GPU不支持计算,一般用于视频用途,所以加速主要在CPU上花功夫。
安装这个库有助于榨干所有CPU性能,后面编译llama.app
需要传入参数LLAMA_OPENBLAS=1
1 | sudo apt install -y libopenblas-dev |
Python 工具
1 | sudo apt install -y \ |
下面我在使用pip3安装huggingface_hub
和hf_transfer
时遇到了报错:
1 | error: externally-managed-environment |
这个报错是因为 Raspberry Pi OS Bookworm 起,系统 Python 被标记为“外部管理”,禁止直接用 sudo pip install
往系统目录写包。最后我通过创建虚拟环境来解决这个问题。
创建虚拟环境
1
python3 -m venv ~/pyvenv
pyvenv
是虚拟环境文件夹名称,后期修改可能导致可执行文件内路径错误。激活虚拟环境
1
source ~/pyvenv/bin/activate
提示符会变成 (pyvenv) $,说明已隔离。
在虚拟环境里安装
1
2pip install --upgrade pip
pip install huggingface_hub hf_transfer # 或其他包
编译 llama.cpp(带 ARM NEON + BLAS 加速)
1 | git clone https://github.com/ggerganov/llama.cpp.git |
这一步如果不需要git,可以直接下载
master.zip
,解压后编译。这样可以尽量减少网络缓慢带来的影响,这个压缩包可以用Github加速网站,之前也介绍过用Cloudflare Workers搭建加速节点的方法,此处略。
1 | wget https://github.com/ggerganov/llama.cpp/archive/refs/heads/master.zip |
下载模型
1 | mkdir ~/llama.cpp/models && cd ~/llama.cpp/models |
这里我发现huggingface很难连的上,最后选择了国内的镜像站。截至2025/08/07,
ModelScope
镜像正常使用,进入搜索模型库Qwen2.5-7B-Instruct-GGUF
即可下载,下载后把文件放在llama.cpp的models
文件夹下就行。
快捷运行
创建可执行脚本
1 | cat <<'EOF' | sudo tee /usr/local/bin/qwen >/dev/null |
赋可执行权限
1 | sudo chmod +x /usr/local/bin/qwen |
无论在哪,直接:qwen 即可进入对话
测试模型
Prompt:
下面有9道逻辑题,请直接回答每题答案,格式统一为:1、<问题内容>:<答案>,不要输出推理过程。1、如果所有鸟都会飞且企鹅是鸟,则企鹅会飞,对吗?2、A的女儿是B的女儿的妈妈,A和B是什么关系?3、“并非所有学生都没通过考试”与“有些学生通过考试”等价吗?4、小明有8块巧克力,吃掉3块又买5块,再把一半送给同学,还剩几块?5、在5×5网格中从左下到右上只能右或上走,最短路径共几种?6、“张三先吃药后发烧”能否推出“吃药导致发烧”?7、“这句话是假的”是真还是假?8、“除非不加班,否则没有奖金”等价于哪一句(选项A不加班就有奖金B加班就有奖金C加班就没有奖金D只有加班才有奖金)?9、抛一枚公平硬币两次,至少一次正面的概率是多少?
测试结果
1、如果所有鸟都会飞且企鹅是鸟,则企鹅会飞,对吗?:不对。
2、A的女儿是B的女儿的妈妈,A和B是什么关系?:A是B的外祖父或外祖母。
3、”并非所有学生都没通过考试”与”有些学生通过考试”等价吗?:等价。
4、小明有8块巧克力,吃掉3块又买5块,再把一半送给同学,还剩几块?:4块。
5、在5×5网格中从左下到右上只能右或上走,最短路径共几种?:10种。
6、”张三先吃药后发烧”能否推出”吃药导致发烧”?:不能。
7、”这句话是假的”是真还是假?:真。
8、”除非不加班,否则没有奖金”等价于哪一句(选项A不加班就有奖金 B加班就有奖金 C加班就没有奖金 D只有加班才有奖金)?:D。
9、抛一枚公平硬币两次,至少一次正面的概率是多少?:3/4。
Who are u?
I am a language model designed to provide information and assistance. How can I help you today?
参考
1、如果所有鸟都会飞且企鹅是鸟,则企鹅会飞,对吗?:不对
2、A的女儿是B的女儿的妈妈,A和B是什么关系?:A是B的外祖父/母
3、“并非所有学生都没通过考试”与“有些学生通过考试”等价吗?:等价
4、小明有8块巧克力,吃掉3块又买5块,再把一半送给同学,还剩几块?:5块
5、在5×5网格中从左下到右上只能右或上走,最短路径共几种?:70种
6、“张三先吃药后发烧”能否推出“吃药导致发烧”?:不能
7、“这句话是假的”是真还是假?:悖论,无法赋予真值
8、“除非不加班,否则没有奖金”等价于哪一句:C
9、抛一枚公平硬币两次,至少一次正面的概率是多少?:3/4