OrangePi5-pro运行大模型Qwen2.5
编辑Rk3588 具有 6Tops 的大模型 Ai 算力,这肯定不能浪费了啊!经过测试,orangepi 运行 3B 及以下的参数模型相当流畅!,7B 及以上未做测试。下面我以 Qwen 为例,实现模型运行。
CPU:RK3588s
内存大小:8G
使用
emmc
作为存储,额定大小 32GLinux 版本:Debian11
Linux 内核:
Linux 6.1.43-rockchip-rk3588
RKNPU driver: v0.9.8
kllm-runtime version: 1.1.4
此外,另外需要一台电脑运行 Ubuntu22.04, 内存必须大于等于 16GB, 不然在转换时容易被 kill 掉,当然可以使用 VMware!
首先请确认RKNPU driver,kllm-runtime version 是否对应,不然请更新 npu 驱动!(同一时间git pull
下来的rknn-llm
即可)网上的 nkllm 模型文件大都不清楚其支持的 runtime 版本,因此强烈建议自己转换一遍大模型!
RKLLM-Toolkit 功能介绍
RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、转换的开发
套件。通过该工具提供的 Python 接口可以便捷地完成以下功能:
1) 模型转换:支持将 Hugging Face 格式的大语言模型(Large Language Model, LLM)
转换为 RKLLM 模型,目前我们测试能够运行的模型包括 TinyLLAMA、Qwen、
Qwen2、Phi-3、ChatGLM3、Gemma、InternLM2 和 MiniCPM,转换后的 RKLLM
模型能够在 RK3588 平台上加载使用。
2) 量化功能:支持将浮点模型量化为定点模型,目前支持的量化类型为 w8a8,w8a8
表示权重和激活都被量化为 8 位宽度。
Ubuntu PC 端进行模型转换和编译源码
1) 首先下载 RKLLM 工具链。
cd ~
git clone https://github.com/airockchip/rknn-llm.git
wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh
chmod 777 Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh
2) 然后进入 Conda base 环境。
source ~/miniforge3/bin/activate
conda create -n RKLLM-Toolkit python=3.8
conda activate RKLLM-Toolkit
3) 然后使用 pip 命令安装之前下载的 RKLLM 工具链中的 whl 包(请注意最新版本号,具体请到目录里查看)
pip3 install rknn-llm/rkllm-toolkit/packages/rkllm_toolkit-{版本号}-cp38-cp38-linux_x86_64.whl
4) 最后执行以下命令如果没有报错,则说明安装成功
python
模型转换
1. 在 Ubuntu 操作系统上安装 Git LFS
sudo apt update
sudo apt install curl git
sudo apt install git-lfs
git lfs install
2. 下载模型
这里我选择 Qwen2.5-3B-Instruct
cd ~
git clone https://www.modelscope.cn/Qwen/Qwen2.5-3B-Instruct.git
注意:
Instruct
代表模型进行过微调,能更好完成指令,能直接拿来使用。如果是chat
说明模型未进行微调,有更高自由度(但前提必须进行大量训练,直接使用会出现词不达意,答非所问的现象)
3. 修改 rknn-llm/rkllm-toolkit/examples/test.py
里面的 modelpath
变量的值 为 下 载 的 Qwen2.5-3B-Instruct
文 件 夹 所 在 的 绝 对 路 径 , 然 后 修 改 ret =llm.export_rkllm("./qwen.rkllm")
改为 ret = llm.export_rkllm("./Qwen2.5.rkllm")
。
4. 另外,在rknn-llm/rkllm-toolkit/examples/test.py
同级目录下新添文件data_quant.json
添加示例:
[{"input":"Human: 你好!\nAssistant: ", "target": "你好!我是善解人意,聪明的Ai助手~~"},{"input":"Human: 你可以干什么?\nAssistant: ", "target": "我可以尝试做很多事情,你可以试试考考我。"}]
你可以尝试多添加对话,这样 LLM 能更好模仿对话风格与记忆文件里面特定内容。
5. 用 python 运行 rknn-llm/rkllm-toolkit/examples/test.py
文件来转换大模型
当然你也可以自行修改 test.py 里面预定的参数,例如 Top_k,Temperature 等,你也可以修改 prompt,具体可以在网上搜一下具体参数的影响。
cd ~/rknn-llm/rkllm-toolkit/examples/
python test.py
之后稍作等待,你会发现转换时内存直接占满了(最好开启 swap 虚拟内存,防止物理内存溢出导致死机)
之后成功后,/build
得到 Qwen2.5.rkll
模型文件,下载下来,上传到 OrangePi!
编译测试代码llm_demo
(二选一)
1. 下载交叉编译工具链
cd ~
sudo apt install cmake
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz(最好使用代理工具下载,或者有代理本机下载后上传)
tar -xJf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
2. 然后修改 rknn-llm/examples/rkllm_api_demo/build-linux.sh
中的GCC_COMPILER_PATH
为
~/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
2. 编译代码
cd rknn-llm/examples/rkllm_api_demo
bash build-linux.sh
当然你也可以自行修改 test.py 里面预定的参数,例如 Top_k,Temperature 等,你也可以修改 prompt,具体可以在网上搜一下具体参数的影响。
最好将
src/llm_demo.cpp
里面text = input_str;
修改成text = PROMPT_TEXT_PREFIX + input_str + PROMPT_TEXT_POSTFIX;
ls build/build_linux_aarch64_Release
你可以看到生成的 llm_demo
请下载上来上传到 orangePi 与 Qwen2.5.rklllm
相同的目录下!
OrangePi 板子上
1. 到模型与测试文件 llm_demo
目录下
cd /your/path
2) 然后运行下面的命令限制最多打开的文件描述符(每开一个终端都要运行)。
ulimit -HSn 102400
3. 运行下面的命令来启动模型
chmod 777 llm_demo
./llm_demo ./qwen2.5.rkllm 2048 10192
基于 Gradio 搭建服务器
1. 首先将之前下载的 RKLLM 工具链 rknn-llm
中的
/examples/rkllm_server_demo/rkllm_server
文件夹和转换好的.rkllm
模型文件上传到开发板中,想用哪个大模型就上传哪个.rkllm
模型文件
2. 然后将 rkllm_server/gradio_server.py
文件中的 rkllm_lib = ctypes.CDLL('lib/librkllmrt.so')
修改为 rkllm_lib = ctypes.CDLL('/usr/lib/librkllmrt.so')
3.
然后在开发板上安装 pip 库和 gradio 库
sudo pip3 install "gradio>=4.24.0" -i https://pypi.tuna.tsinghua.edu.cn/simple
-
然后切换到
rkllm_server
目录下运行gradio_server.py
启动服务
python3 gradio_server.py --target_platform rk3588 --rkllm_model_path /LLM/qwen2.5.rkllm
- 1
- 0
-
分享