香橙派rk3588部署Qwen2-VL-2B

演示视频

https://www.bilibili.com/video/BV1Dyt6zQEVw/

前期准备

检查 NPU 内核版本

首先需确保 NPU 内核版本为 v0.9.8,查询与更新方法参考:

https://www.cnblogs.com/yijunchenhui/p/19027716

相关资源链接

  • rkllm 项目地址:https://github.com/airockchip/rknn-llm

  • 预转换模型下载:https://console.box.lenovo.com/l/l0tXb8(提取码:rkllm)

所需模型文件

从预转换模型中获取以下两个关键文件:

  1. rkllm_model_zoo/1.1.4/RK3588/Qwen2-VL-2B_Demo/Qwen2-VL-2B_llm_w8a8_rk3588.rkllm

  2. rkllm_model_zoo/1.1.4/RK3588/Qwen2-VL-2B_Demo/Qwen2-VL-2B_vision_rk3588.rknn

性能监控与配置脚本

rknn-llm/scripts/目录下有以下实用脚本:

  1. 性能监控脚本
  • eval_perf_watch_cpu.sh:读取 CPU 峰值性能

  • eval_perf_watch_npu.sh:读取 NPU 峰值性能

  1. 性能优化脚本
  • fix_freq_rk3588.sh:将 CPU、NPU、GPU、DDR 等参数调至最高性能模式

源码编译

修改编译脚本

编辑rknn-llm/examples/Qwen2-VL_Demo/deploy/``build-linux.sh,改交叉编译为本机编译:

cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/g++  \
        -DCMAKE_C_COMPILER=/usr/bin/gcc \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_SYSTEM_NAME=Linux \
        -DCMAKE_SYSTEM_PROCESSOR=aarch64 \

编译输出路径

编译完成的文件将生成在:

rknn-llm/examples/Qwen2-VL_Demo/deploy/install/demo_Linux_aarch64

主要程序

编译后将得到三个主要程序:

  • imgenc:图像编码器

  • llm:纯文本大模型推理程序

  • demo:多模态推理程序

注意:执行这些程序前,需先运行性能优化脚本:

fix_freq_rk3588.sh

程序使用说明

图像编码(imgenc)

大模型处理图片时,需要先通过imgenc将图像编码为向量:

./imgenc models/qwen2-vl-vision\_rk3588.rknn demo.jpg 3

输出信息解析:

\===the core num is 3===

model input num: 1, output num: 1

input tensors:

  index=0, name=onnx::Expand\_0, n\_dims=4, dims=\[1, 392, 392, 3], n\_elems=460992, size=921984, fmt=NHWC, type=FP16, qnt\_type=AFFINE, zp=0, scale=1.000000

output tensors:

  index=0, name=6076, n\_dims=2, dims=\[196, 1536, 0, 0], n\_elems=301056, size=602112, fmt=UNDEFINED, type=FP16, qnt\_type=AFFINE, zp=0, scale=1.000000

model input height=392, width=392, channel=3

main: Model loaded in  2313.00 ms

main: Encoder the image cost  3213.80 ms

关键信息:

  • 模型要求输入图像尺寸为 392×392

  • 模型加载耗时:2313.00 毫秒

  • 图像编码耗时:3213.80 毫秒

纯文本推理(llm)

运行纯文本推理示例:

./llm models/qwen2-vl-llm\_rk3588.rkllm 128 512

输出信息与功能:

程序启动后会显示模型加载信息,并提供几个示例问题供测试:

rkllm init start

I rkllm: rkllm-runtime version: 1.2.1, rknpu driver version: 0.9.8, platform: RK3588

I rkllm: loading rkllm model from models/Qwen2-VL-2B\_llm\_w8a8\_rk3588.rkllm

I rkllm: rkllm-toolkit version: 1.1.4b5, max\_context\_limit: 4096, npu\_core\_num: 3, target\_platform: RK3588, model\_dtype: W8A8

I rkllm: Enabled cpus: \[4, 5, 6, 7]

I rkllm: Enabled cpus num: 4

rkllm init success

main: Model loaded in  7494.57 ms

示例交互:

user: 0

把下面的现代文翻译成文言文: 到了春风和煦,阳光明媚的时候,湖面平静,没有惊涛骇浪,天色湖光相连,一片碧绿,广阔无际;沙洲上的鸥鸟,时而飞翔,时而停歇,美丽的鱼游来游去,岸上与小洲上的花草,青翠欲滴。

robot: 到了春风和煦、阳光明媚的时候,湖面平静没有惊涛骇浪,天色与湖光相连,一片碧绿广阔无际;沙洲上的鸥鸟时而飞翔时而停歇,美丽的鱼儿游来游去,岸边的小洲上花草青翠欲滴。

多模态推理(demo)

运行图像 + 文本的多模态推理示例:

./demo demo.jpg models/qwen2-vl-vision\_rk3588.rknn models/qwen2-vl-llm\_rk3588.rkllm 128 512 3

输出信息与功能:

程序会同时加载视觉模型和语言模型,支持对图像内容进行提问:

示例交互 1:

user: 0

\<image>What is in the image?

robot: The image depicts an astronaut on the moon, holding a green beer bottle with a label that appears to be Arabic script. The background shows the Earth and the vastness of space.

示例交互 2:

user: 1

\<image>这张图片中有什么?

robot: 这张图片展示了一位穿着宇航服的宇航员坐在月球表面,手里拿着一瓶绿色的啤酒。背景是地球和星空,给人一种在太空中喝啤酒的感觉。

来源链接:https://www.cnblogs.com/yijunchenhui/p/19027740

请登录后发表评论

    没有回复内容