在panther x2(RK3566)中运行llama.cpp
手里有一台panther x2,这机器现在也不能挖矿了,最近看到armbian的社区支持列表里增加了这台设备,于是便对其进行刷机了,刷完通电吃灰了几天,突然想起通电吃灰的话还不如原来直接放着吃灰还能省电费,然后就想着弄点什么,然后突然想起语言模型和之前的画图,和以前rk3399经常被用于人脸/车辆识别,便想着试试能不能跑这2种东西.
前言
首先说结论,经过使用llama 7b 4bit和stable diffusion测试得到的结果,rk系列根本不适合跑这2个东西,此外自带的npu也不适合语言模型和画图的计算(github上似乎有相关的讨论)
然后是本文几乎是复制粘贴的废文,其内容基本来自如下文章.
- https://mestrace.github.io/posts/2023/Mar/15/llama-rpi/
- https://zhuanlan.zhihu.com/p/645426799
- https://github.com/ggerganov/llama.cpp/issues/722
编译llama.cpp
刷机和配网部分就不做说明了,google一大堆,直接从apt
开始,首先更新和安装一堆依赖
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
apt-get update
apt-get upgrade
apt-get install git git-lfs make gcc g++ python3 python3-dev python3-pip python-is-python3
python3 -m pip install torch numpy sentencepiece
然后clone一下llama.cpp的代码进行编译
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
编译这部分原文中有提到关于不同架构判断编译器的问题,通过指定UNAME_S
,UNAME_P
,UNAME_M
解决,这里补充一下,直接make
如果不报错就不需要指定那3个变量,就算编译信息里显示的是unknown也不要紧
下载和处理模型
这里和原文不同,没有使用原版的llama7b,模型换成了https://huggingface.co/LinkSoul/Chinese-Llama-2-7b-4bit
git clone https://huggingface.co/LinkSoul/Chinese-Llama-2-7b-4bit
拉模型需要用时很久,可以考虑使用网页中的网盘下载.
下载完后转换模型
python3 convert.py ./Chinese-Llama-2-7b/ --outfile /model/Chinese-Llama-2-7b-ggml.bin
./quantize /model/Chinese-Llama-2-7b-ggml.bin /model/Chinese-Llama-2-7b-ggml-q4.bin q4_0
rm /app/soulteary/Chinese-Llama-2-7b-ggml.bin
执行时间会很久,第三步的删除部分也可以不进行操作,只要你的磁盘空间足够大
执行
直接照葫芦画瓢执行问题
./main -m ./models/Chinese-Llama-2-7b-ggml-q4.bin -p "你谁啊" -t 8 -n 512
执行期间用dstat
看了下各项资源的占用,cpu占用基本100%,由于模型放在tf卡中的缘故,io只有40m,也是占满的状态.
停止了一次,然后将模型放到机器自带的emmc之后再次运行之后再看dstat
,io大概240m/s.
运行了5个小时,发现还没生成完,io一直是满的,怕把机器的emmc跑坏了,就直接退了.
,在上面github的那个issues上面有讨论关于npu减速问题,也没尝试用npu跑.