Qwen2-VL的微调及量化

一、Qwen2-VL简介

        Qwen2-VL是Qwen-VL的升级版本,能力更强,性能全面提升。尤其是72B参数的版本更是取了惊人的成绩。它可以读懂不同分辨率和不同长宽比的图片,在 MathVista、DocVQA、RealWorldQA、MTVQA 等基准测试创下全球领先的表现;可以理解 20 分钟以上长视频,支持基于视频的问答、对话和内容创作等应用;具备强大的视觉智能体能力,可自主操作手机和机器人,借助复杂推理和决策的能力,Qwen2-VL 可以集成到手机、机器人等设备,根据视觉环境和文字指令进行自动操作。

二、环境装备

        具体的环境可以参考我的上篇文(Qwen-VL部署)。这里不再重复内容。另外微调使用的swift这个框架进行的微调,所以还要准备swift的环境。

swift环境安装,此处可以只下载,不pip安装环境,可在下面微调前安装。

git clone https://github.com/modelscope/swift.git
cd swift
#pip install -e .[llm]

# 请关注这个ISSUE: https://github.com/QwenLM/Qwen2-VL/issues/12
# pip install torch>=2.4
#pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
#pip install pyav qwen_vl_utils

如果遇到这个错误:ImportError: transformers>=4.45.0.dev0 is required for a normal functioning of this module, but found transformers==4.44.2

则需要这样安装transformers:

pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate

上面这个错误在量化的时候也会遇到,所以要每次创建环境都要使用上面的命令安装transformers.

三、微调

1、准备数据,数据格式。

[
  {
    "id": "1",
    "conversations": [
      {
        "from": "user",
        "value": "Picture 1: <img>/data/media/upload/1/a9dc4837-2.png</img>\\n请检查图片中是否有违反作业标准中规定的情况,列出最突出的一种情况。"
      },
      {
        "from": "assistant",
        "value": "图片中存在地面有垃圾的问题"
      },
      {
        "from": "user",
        "value": "请框出图片中的问题"
      },
      {
        "from": "assistant",
        "value": "<ref>问题</ref><box>(28,53),(552,731)</box>"
      }
    ]
  }
  ]

2、使用conda创建微调的环境, 创建qwen2的环境

git clone https://github.com/QwenLM/Qwen2-VL.git
cd Qwen2-VL/
conda create -n qwen2 python=3.10 -y
conda activate qwen2
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia
pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
pip install pyav qwen_vl_utils

#去到swift的目录里面,这里接上面的环境安装。
cd /data/swift
#安装swift的环境
pip install -e .[llm]

3、微调指令

  SIZE_FACTOR=8 MAX_PIXELS=602112 CUDA_VISIBLE_DEVICES=0 swift sft   \
   --model_type qwen2-vl-7b-instruct    \
   --model_id_or_path /data/autodl/Qwen2-VL-7B-Instruct   \
   --dataset /data/qwen-vl/Qwen-VL/datasets/result.json,self-cognition  \
   --learning_rate 1e-3 \
   --batch_size 2 \
   --num_train_epochs 3   \
   --logging_steps 3 \
   --gradient_accumulation_steps 8 \
   --model_name 智能助手 'Intelligent  Assistant' \
   --model_author 风之飘渺  'Wind'

四、量化

    微调成功后,需要合并参数,这时可以同时量化操作,也可以只合并不量化。量化同样使用的swift框架。不量化的情况下,推理非常慢,本人机器配置CPU:2*6330,内存:128G,显卡A5000.大概2分钟左右出结果。量化后还没有测试。

# 使用AutoGPTQ进行量化
pip install auto-gptq

#量化指令

CUDA_VISIBLE_DEVICES=0 swift export \
    --ckpt_dir '/data/swift2/swift/output/qwen2-vl-7b-instruct/v3-20240902-150740/checkpoint-93' \
    --merge_lora true --quant_bits 8 \
    --load_dataset_config true --quant_method gptq

### 关于 Qwen2.5-VL-72B-Instruct-AWQ 模型微调的方法 对于 Qwen2.5-VL-72B-Instruct-AWQ 模型的微调,可以采用基于 AWQ (Adaptive Weight Quantization) 技术的方式来进行参数优化和训练。AWQ 是一种先进的权重量化方法,能够在保持较高精度的同时显著降低模型大小和计算成本。 以下是关于该模型微调的关键点: #### 数据准备 为了确保微调的有效性,需准备好高质量的数据集用于监督学习或指令调整。数据应覆盖目标应用场景中的各种任务类型[^1]。 #### 环境搭建 利用 Docker 容器化技术来创建稳定的运行环境是非常推荐的做法。这有助于隔离依赖项并简化部署流程[^3]。 #### 配置文件设置 当涉及到多GPU分布式训练时,可以通过编写 shell 脚本来定义必要的启动选项。例如,在 `api_server.sh` 中指定设备可见性、模型路径以及其他重要参数如张量并行度 (`--tensor-parallel-size`) 和流水线并行度 (`--pipeline-parallel-size`) 等[^4]。 下面是一个简单的 Python 代码片段展示如何加载预训练模型以及执行基本前向传播操作: ```python from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-VL-72B-Instruct-AWQ") model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-VL-72B-Instruct-AWQ", torch_dtype=torch.float16) input_text = "你好" inputs = tokenizer(input_text, return_tensors="pt").to('cuda') outputs = model.generate(**inputs, max_length=50) print(tokenizer.decode(outputs[0])) ``` 注意上述代码仅作为演示用途,请根据实际情况修改相应部分以适应具体需求。 #### 训练过程控制 在实际训练过程中可能还需要考虑以下几个方面: - **Learning Rate Scheduler**: 使用适当的学习率调度策略可以帮助网络更快收敛. - **Gradient Clipping**: 对梯度施加裁剪可防止爆炸现象发生从而提高稳定性. 最后提醒一点就是一定要保存好各个阶段产生的 checkpoint 文件以便后续恢复或者评估使用效果怎样[^2].
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值