qwen3-vl 大模型lora微调官方版
这次的教程我们将使用官方的指定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
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!