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.mzph.cn/web/69367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言标准库函数】双曲函数:sinh(), cosh(), tanh()

目录 一、头文件 二、函数简介 2.1. 双曲正弦函数 sinh(double x) 2.2. 双曲余弦函数 cosh(double x) 2.3. 双曲正切函数 tanh(double x) 三、函数实现&#xff08;概念性&#xff09; 四、注意事项 4.1. 参数类型 4.2. 计算精度 4.3. 函数返回值 4.4. 环境差异 4.…

(五)QT——QDialog 对话框

目录 前言 QDialog 主要功能 QDialog 使用方法 基本QDialog 应用程序级别的模态对话框 标准对话框 示例代码 功能展示 总结 1. 基本功能 2. 创建方式 3. 常用方法 前言 QDialog 是 Qt 框架中的对话框类&#xff0c;用于创建模态&#xff08;modal&#xff09;或非…

python 语音识别方案对比

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…

TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...

全文链接&#xff1a;https://tecdat.cn/?p39656 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现&#xff0c;通过MNIST和Blobs等数据集进行实验&#xff0c;对比了不同训练方式&#xff08;仅源域训练、域对抗训练等&am…

[论文笔记] Deepseek-R1R1-zero技术报告阅读

启发: 1、SFT&RL的训练数据使用CoT输出的格式,先思考再回答,大大提升模型的数学与推理能力。 2、RL训练使用群体相对策略优化(GRPO),奖励模型是规则驱动,准确性奖励和格式化奖励。 1. 总体概述 背景与目标 报告聚焦于利用强化学习(RL)提升大型语言模型(LLMs)…

rust安装笔记

安装笔记 安装加速cargo 国内源nightly版本安装其他目标将现有项目迁移到新版本升级 安装加速 export RUSTUP_UPDATE_ROOT"https://mirrors.ustc.edu.cn/rust-static/rustup" export RUSTUP_DIST_SERVERhttps://mirrors.tuna.tsinghua.edu.cn/rustup curl --proto h…

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中&#xff0c;协议号89 头部数据包内容&#xff1a; 版本(Version):对于OSPFv2&#xff0c;该字段值恒为2(使用在IPV4中)&#xff1b;对于OSPFv3&#xff0c;该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

Leetcode面试高频题分类刷题总结

https://zhuanlan.zhihu.com/p/349940945 以下8个门类是面试中最常考的算法与数据结构知识点。 排序类&#xff08;Sort&#xff09;&#xff1a; 基础知识&#xff1a;快速排序&#xff08;Quick Sort&#xff09;&#xff0c; 归并排序&#xff08;Merge Sort&#xff09;的…

ubuntu文件同步

1. 使用 rsync 同步文件 rsync 是一个常用的文件同步工具&#xff0c;可以在本地或远程系统之间同步文件和目录。 基本用法&#xff1a; rsync -avz /源目录/ 目标目录/-a&#xff1a;归档模式&#xff0c;保留文件属性。-v&#xff1a;显示详细输出。-z&#xff1a;压缩传输…

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目&#xff1a;在CT107D单片机综合训练平台上&#xff0c;8个数码管分别单独依次显示0~9的值&#xff0c;然后所有数码管一起同时显示0~F的值&#xff0c;如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值&#xff0c;如此往…

详解Swift中 Sendable AnyActor Actor GlobalActor MainActor Task、await、async

详解Swift中 Sendable AnyActor Actor GlobalActor MainActor 的关联或者关系 及其 各自的作用 和 用法 以及与 Task、await、async&#xff1a; Sendable 协议 作用&#xff1a; Sendable 是一个协议&#xff0c;它用于标记可以安全地跨线程或异步任务传递的数据类型。符合 S…

使用VCS对Verilog/System Verilog进行单步调试的步骤

Verilog单步调试&#xff1a; System Verilog进行单步调试的步骤如下&#xff1a; 1. 编译设计 使用-debug_all或-debug_pp选项编译设计&#xff0c;生成调试信息。 我的4个文件&#xff1a; 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…

Kotlin 2.1.0 入门教程(十)if、when

if 表达式 if 是一个表达式&#xff0c;它会返回一个值。 不存在三元运算符&#xff08;condition ? then : else&#xff09;&#xff0c;因为 if 在这种场景下完全可以胜任。 var max aif (a < b) max bif (a > b) {max a } else {max b }max if (a > b) a…

数据结构及排序算法

数据结构 线性结构 ◆线性结构:每个元素最多只有一个出度和一个入度,表现为一条线状。线性表按存储方式分为顺序表和链表。 存储结构: ◆顺序存储:用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素物理上也相邻。 ◆链式存储:存储各数据元素的结点…

camera系统之cameraprovider

在相机系统中&#xff0c;CameraProvider是一个至关重要的组件。以下是对CameraProvider的详细解释&#xff1a; 一、定义与位置 CameraProvider是相机系统的下层组件&#xff0c;位于CameraService以下和Camera HAL&#xff08;硬件抽象层&#xff09;以上。它作为一个独立进…

python实现多路视频,多窗口播放功能

系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试&#xff0c;通常postman、…

【R语言】数据操作

一、查看和编辑数据 1、查看数据 直接打印到控制台 x <- data.frame(a1:20, b21:30) x View()函数 此函数可以将数据以电子表格的形式进行展示。 用reshape2包中的tips进行举例&#xff1a; library("reshape2") View(tips) head()函数 查看前几行数据&…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

apachePoi中XSSFClientAnchor图片坐标简述;填充多张图片

概述 业务中经常会遇到在单元格内填充图片的需求&#xff0c;而且要求指定图片在单元格内的位置。 一般都是用的apache的poi&#xff0c;设置图片坐标。 HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)dx1 dy1 起始单元…