qwen3-vl 大模型lora微调官方版

news2026/3/17 17:55:06
这次的教程我们将使用官方的指定demo数据来进行qwen3-vl的微调并且将lora得到的内容进行合并使用新的模型来进行推理验证。由于官方库有些内容没有实现所以这里fork了一个新的仓库来实现一下管理gitclone https://github.com/chan-yuu/Qwen3-VL.git在正式微调之前我们先来认识一下这里的模型的架构是什么样的。主要分为了三个部分第一个是interleaved-MRoPE是一个随时间、宽度和通过位置嵌入确定的高度增强长视距的视频推理。第二个是DeepStack深度堆栈融合了多级ViT特征提取来捕捉细粒度细节和锐化的图文对齐。第三个是图像时间戳对齐超越T-RoPE来精确的基于时间戳事件定位用于更强的视频时序建模。其实我还是没有看懂但是我们可以求助一下llm。在主干大模型中dense/moe说明qwen3-vl既有稠密版也有混合专家版。家族包括dense的2B/4B/8B/32B以及MoE的30B-A3B、235B-A22B。它与底下的vision encoder的关系在于vision encoder负责把图像视频变为模型能看懂的视觉tokenLM decoder把图像和文本token统一放进大模型里推理并生成答案。下方图片和视频先进入vision encoder其中的图片包括了Picture 1Picture 2Picture 3Video 1这些都是视觉输入先进入了encoder中官方说明中指出qwen3-vl的一项结构升级就是通过视觉侧和语言侧更紧的对齐并使用多层视觉特征而不是只拿最后一层视觉表示。图中的native resolution input表示输入图像尽量按原始分辨率处理而不是一开始就强行缩到固定最小尺寸。这个也是qwen-vl系列强调的提升对文档、细粒度细节、复杂版面的感知能力。所以刚才的的三点总结就是在说它有更强的OCR、更强长文档结构解析和更细细粒度视觉理解。小方块表示的就是encoder输出的token序列这些token序列送进decoder中具体来说分成了文本token和vision token也就是一种interleaved multimodal inputs即文本图片视频交错混合输入。我们还可以看到一个有意思的现象是各个图片的token相差很大Picture 111427 tokensPicture 28 tokensPicture 31125 tokens这是因为不同分辨率、不同尺寸、不同视觉压缩结果对应的视觉token数量相差很多。native resolution就是原始分辨率说明图像本身是按照自己的分辨率进行原始输入的这样的token也就是表现他们的特点。在视频部分中有一串连续帧包括了时间序列它是把多帧送入了vision encoder再变成视觉token时间信息不只靠视觉位置编码而是把时间戳以文本形式更明确的对齐到视频内容上提升第几秒发生了什么的定位能力这项升级就是从T-RoPE走向更精确的timestamp-grounded event localization。总的来说就是视频帧提供视觉内容文本时间戳提供更明确的时间锚点二者一起进入大模型中。deepstack在右边vision encoder部分这是最关键的创新点也不容易看懂很多VLM的做法是图片→vision encoder只取最后一层视觉特征变成了视觉token一次性送给LLM但是deep stack不同不只使用视觉编码器的最后输出还把多个层级的视觉特征注入到了LLM的不同层里。官方的描述是DeepStack fuses multi-level ViT features技术报告摘要则说它effectively leverages multi-level ViT features to tighten vision-language alignment。也就是浅层视觉特征偏向于局部纹理、边缘、字形、小细节中层视觉特征更偏区域、部件、局部结构高层视觉特征更偏语义、物体、整体理解。deep stack的作用就是把这些分层的信息分层的送进LLM。最后总结一下图片/视频先经过 Vision Encoder变成视觉 token文本 token 和视觉 token 交错组成统一上下文送入 Qwen3 的语言解码器同时多层视觉特征通过 DeepStack 持续注入到 LLM 的不同层以增强细节感知、OCR、空间理解和视频时序理解。接下来我们就是对模型进行微调了这里使用的是80G显存的设备进行微调不过3B的模型应该本地也可以尝试一下LoRa微调。我们主要是通过sft(supervised fine-tuning)监督微调来实现所以需要准备QA问答对在https://github.com/chan-yuu/Qwen3-VL/tree/main/qwen-vl-finetune/demo文件夹下含有对应的json文件和图片文件因为是一个视觉模型的识别所以是需要传入实际的图像进行编码的。其中的json文件指向的是图片对话两个部分。这里我们就主要使用这个json来进行训练。当然要注意数据比较少的情况下无法看出实际的效果这里我们主要是跑通流程具体的数据集准备这里就不赘述。不过需要注意的是https://github.com/chan-yuu/Qwen3-VL/blob/main/qwen-vl-finetune/tools/process_bbox.ipynb中专门指出了如何通过已有的标记框来进行处理得到大模型需要的编码信息。同时在https://github.com/chan-yuu/Qwen3-VL/blob/main/qwen-vl-finetune/README.md中也说明了ground任务的数据集结构{image:demo/COCO_train2014_000000580957.jpg,conversations:[{from:human,value:image\nLocate house in this image and output the bbox coordinates in JSON format.},{from:gpt,value:{\nbbox_2d: [135, 114, 1016, 672]\n}}]}但是实测下来这里还有不足也就是应该同时标准类别和位置信息才是完整的gpt的输出这里可能得进行额外的测试才能得到更加合理的数据集结构。并且要特别说明的就是这个COCO_train2014_000000580957.jpg与demo中的图片不是一个。接下来进入云端服务器来实操官方的python推荐版本没有明确给出我们使用python3.12即可通过conda创建虚拟环境conda create-nqwen3_vlpython3.12然后进入环境中下载相关的依赖项conda activate qwen3_vlpipinstall-rrequirements_web_demo.txt然后再安装一些额外的依赖项torch2.6.0torchvision0.21.0transformers4.57.0.dev0deepspeed0.17.1triton3.2.0accelerate1.7.0torchcodec0.2peft0.17.1flash_attn2.7.4.post1这里我们先安装前面的内容最后一个flash_attn比较大经常会因为网络原因无法安装所以我们这里手动进行安装前往github的下载页一定要找对其余的基本都是无法与torch.2.6.0匹配的。以上搞定之后环境就可以使用了我们还需要去下载基础模型来调用这里我们通过脚本来直接下载即可from modelscopeimportsnapshot_download# 指定模型的下载路径cache_dirxxx/model# 补充实际的下载目录# 调用 snapshot_download 函数下载模型model_dirsnapshot_download(Qwen/Qwen3-VL-2B-Instruct,cache_dircache_dir)print(f模型已下载到: {model_dir})在微调之前需要先准备数据集并进行处理准备好的数据集就是一个图片文件夹以及一个json文件我们在https://github.com/chan-yuu/Qwen3-VL/blob/main/qwen-vl-finetune/qwenvl/data/init.py __init.py__文件中添加对应的数据集信息这样注册之后微调时就可以正常通过my_dataset来访问数据集了。注意给对路径这里我们可以考虑直接给全局路径。最后就是直接进行微调了他准备了一个一键微调的脚本我们修改上面的一些配置就可以训练了#!/bin/bash# # Distributed Configuration# MASTER_ADDR127.0.0.1# [Required] Master node IP for multi-GPU trainingMASTER_PORT$(shuf-i20000-29999-n1)# Random port to avoid conflictsNPROC_PER_NODE$(nvidia-smi --list-gpus|wc-l)# Automatically detects available GPUs# # Path Configuration# MODEL_PATH/mnt/project_modelware/zhaojian/cyun/qwen3-vl/model/Qwen/Qwen3-VL-2B-Instruct# [ModelArguments] Pretrained model pathOUTPUT_DIR./checkpoints# Directory for saving checkpointsCACHE_DIR./cache# [TrainingArguments] Cache directory for models# # Model Configuration# DATASETSmy_dataset%100# [DataArguments] Dataset with sampling rate# # Training Hyperparameters# torchrun--nproc_per_node$NPROC_PER_NODE\--master_addr$MASTER_ADDR\--master_port$MASTER_PORT\/mnt/project_modelware/zhaojian/cyun/qwen3-vl/Qwen3-VL/qwen-vl-finetune/qwenvl/train/train_qwen.py\--model_name_or_path$MODEL_PATH\--tune_mm_llmTrue\--tune_mm_visionFalse\--tune_mm_mlpFalse\--dataset_use$DATASETS\--output_dir$OUTPUT_DIR\--cache_dir$CACHE_DIR\--bf16\--per_device_train_batch_size4\--gradient_accumulation_steps4\--learning_rate2e-7\--mm_projector_lr1e-5\--vision_tower_lr1e-6\--optimadamw_torch\--model_max_length4096\--data_flattenTrue\--data_packingTrue\--max_pixels451584\--min_pixels12544\--video_fps2\--video_max_frames8\--video_min_frames4\--video_max_pixels1306112\--video_min_pixels200704\--num_train_epochs100\--warmup_ratio0.03\--lr_scheduler_typecosine\--weight_decay0.01\--logging_steps10\--save_steps500\--save_total_limit3\--lora_enableTrue\--lora_r8\--lora_alpha16\--lora_dropout0.0\--deepspeedzero3.json参考我的配置即可进行训练之前我们需要先登录一下wandb来记录训练的细节信息也就是wandb login然后通过wandb的密钥进行登录认证认证完成之后需要再wandb login验证一下如果出现了个人信息那就表明成功了。最后直接运行bashsft_3.14.sh注意训练之前需要保证当前文件夹下没有checkpoints文件夹他也是模型的保存文件夹否则无法训练可以看到这里的损失其实是不好计算的不是文本而是token的训俩。接下来需要使用训俩好的模型进行推理。我们先通过未合并的模型来测试此时的结果是python inference.py--model_path/mnt/project_modelware/zhaojian/cyun/qwen3-vl/model/Qwen/Qwen3-VL-2B-Instruct--checkpoint_path/mnt/project_modelware/zhaojian/cyun/qwen3-vl/Qwen3-VL/qwen-vl-finetune/scripts/checkpoints--image/mnt/project_modelware/zhaojian/cyun/qwen3-vl/Qwen3-VL/qwen-vl-finetune/demo/images/10095.png--promptIs the value of Favorable 38 in 2015?结果是当然从效果来说的话这点数据最终的效果其实是一般的然后我们使用那一张grouding的数据来训俩得到的内容依然是无法准确的定位。除了inference.py之外tools中还可以使用merge_lora它可以把训俩好的模型嵌入到原本的模型中得到最终的版本可以直接通过这个来和模型进行对话。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2420181.html

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…