当前位置: 首页 > article >正文

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

        需要先在电脑上运行 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


http://www.kler.cn/a/536473.html

相关文章:

  • 鸿蒙UI(ArkUI-方舟UI框架)- 使用文本
  • SQL条件分支中的大讲究
  • langchain教程-11.RAG管道/多轮对话RAG
  • MLA 架构
  • vite共享配置之---css相关
  • UE求职Demo开发日志#23 线性任务系统数据层实现
  • 821 简答题整理【笔记】
  • CosyVoice /F5-TTS /GPT-SoVITS /Fish-Speech 开源语音克隆与文本转语音(TTS)项目的对比整理
  • 探索前端框架的未来:Svelte 的崛起
  • Fiddler Classic(HTTP流量代理+半汉化)
  • 【AI】在Ubuntu中使用docker对DeepSeek的部署与使用
  • 11 享元(Flyweight)模式
  • 亚博microros小车-原生ubuntu支持系列:24 巡线驾驶
  • 如何导入第三方sdk | 引入第三方jar 包
  • 项目实战 —— HTTP服务器设计与实现
  • FocusAny v0.6.0 MacOS和Linux安装优化,独立窗口显示优化
  • mysql-connector-java 和 mysql-connector-j的区别
  • C语言-预处理
  • BpmnJS源码篇1:Injector 依赖注入模式的实现
  • 一、lambda表达式处理stream操作
  • 换电脑了如何快速导出vscode里的插件
  • 【C/C++算法】从浅到深学习---双指针算法(图文兼备 + 源码详解)
  • 低成本训练的突破与争议:DeepSeek R1模型的新进展
  • (2024|Nature Medicine,生物医学 AI,BiomedGPT)面向多种生物医学任务的通用视觉-语言基础模型
  • 3.Python分支和循环:if判断语句、运算符、if-else语句、while循环、for循环、break、continue
  • nuxt3中报错: `setInterval` should not be used on the server.