Qwen2-VL-2B-Instruct 模型 RK3576 板端部署过程

发布于:2025-02-10 ⋅ 阅读:(208) ⋅ 点赞:(0)

        需要先在电脑上运行 RKLLM-Toolkit 工具,将训练好的模型转换为 RKLLM 格式的模型,然后使用 RKLLM C API 在开发板上进行推理。

        在安装前先查看板端的内存容量,和自己模型占用大小比较一下,别安装编译好了不能用。

        这里我就是先尝试了Qwen2-VL-2B-Instruct,BF16,安装好了才发现自己板端只有3.6G的运行可用资源... 决定尝试Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4。

        尝试完了,GPTQ int 这个数据格式不能更改,rknn仅支持float32,根本用不了,此贴就当Qwen2-VL-2B-Instruct 模型部署来看吧,测试可以正常使用。

一. 下载源码

GitHub - airockchip/rknn-llm

git clone https://github.com/airockchip/rknn-llm.git

二. 支持平台及模型

  • 平台:

    • RK3588 系列

    • RK3576 系列

  • 模型:

    • Qwen2-VL

    • MiniCPM-V

三. 本机部署过程

需求:

arm 系统 :libgomp.so.1、libgomp.so.1.0.0

  • (系统环境不兼容,一般本机为 Ubuntu X86 系统,板端为 arm 系统,使用时会出现报错。使用qemu-user-static 可以在 X86 机器模拟 arm 环境来进行编译)

rkllm-toolkit==1.1.4
rknn-toolkit2==2.2.1
python==3.8

1. 在本机创建一个 rknn-llm 虚拟环境,并安装依赖项

python3.8 -m venv rknn-llm
source rknn-llm/bin/activate
<!-- 安装时,版本可能会更改 -->
pip install rknn-toolkit2==2.2.1 -i https://mirrors.aliyun.com/pypi/simple

rkllm-toolkit==1.1.4: rknn-llm/rkllm-toolkit/packages at main · airockchip/rknn-llm · GitHub

2. 下载权重

https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct

pip install git+https://github.com/huggingface/transformers

两个都要下载

3. 测试 Demo

1、modify the modelpath in infer.py
2、python infer.py
3、expect results:
["The image depicts an astronaut in a white spacesuit, reclining on a green chair with his feet up. He is holding a green beer bottle in his right hand. The astronaut is on a moon-like surface, with the Earth visible in the background. The scene is set against a backdrop of stars and the moon's surface, creating a surreal and whimsical atmosphere."]

4. 导出为 ONNX 模型

由于当前 RKNN 仅支持 float32,如果加载权重时遇到问题,将config.json 中,"use_flash_attn"设置为 false。

如果遇到报错找不到某目标文件,修改执行路径,进入 export 中执行命令。

python export/export_vision.py

由于代码是直接支持 Qwen2-VL-2B-Instruct,而不是 Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4,GPTQ量化模型不允许直接转换为dtype,需要对代码进行修改处理。不用处理了,用不了。

5. 将 ONNX 模型转为 RKNN 模型

将 export_vision_rknn.py 中 rk3588 修改为 rk3576

python export/export_vision_rknn.py

6. 转为 RKLLM 模型并导出

将 export_rkllm.py 中 rk3588 修改为 rk3576

python data/make_input_embeds_for_quantize.py
python export/export_rkllm.py

7. 编译,并 push 到板端

cd deploy
# for linux
./build-linux.sh
# push install dir to device
adb push ./install/demo_Linux_aarch64 /data
# push model file to device
adb push qwen2_vl_2b_vision_rk3576.rknn /data/models
adb push Qwen2-VL-2B-Instruct.rkllm /data/models
# push demo image to device
adb push ../data/demo.jpg /data/demo_Linux_aarch64

另外需要将 arm 系统的 libgomp.so.1、libgomp.so.1.0.0 复制到板端 /data/demo_Linux_aarch64/lib 中。X86 系统的复制会不可用。

四. 板端部署过程

adb shell
cd /data/demo_Linux_aarch64
# export lib path
export LD_LIBRARY_PATH=./lib
# soft link models dir
ln -s /data/models .
# run imgenc
./imgenc models/qwen2_vl_2b_vision_rk3576.rknn demo.jpg
# run llm(Pure Text Example)
./llm models/Qwen2-VL-2B-Instruct.rkllm 128 512
# run demo(Multimodal Example)
./demo demo.jpg models/qwen2_vl_2b_vision_rk3576.rknn models/Qwen2-VL-2B-Instruct.rkllm 128 512

五. 运行 demo

adb shell
cd /data/demo_Linux_aarch64
# export lib path
export LD_LIBRARY_PATH=./lib
# soft link models dir
ln -s /data/models .
# run imgenc
./imgenc models/qwen2_vl_2b_vision_rk3576.rknn demo.jpg
# run llm(Pure Text Example)
./llm models/Qwen2-VL-2B-Instruct.rkllm 128 512
# run demo(Multimodal Example)
./demo demo.jpg models/qwen2_vl_2b_vision_rk3576.rknn models/Qwen2-VL-2B-Instruct.rkllm 128 512


网站公告

今日签到

点亮在社区的每一天
去签到