Qwen2.5-VL - 训练 执行命令

Qwen2.5-VL训练执行命令及配置

Qwen2.5-VL - 训练 执行命令

flyfish

Bash脚本内容

#!/bin/bash

# 分布式训练配置
MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"}  # 主节点地址,默认本地训练
MASTER_PORT=${MASTER_PORT:-$(shuf -i 20001-29999 -n 1)}  # 主节点端口,随机选择避免冲突
NNODES=${WORLD_SIZE:-1}  # 节点数量,默认为1(单机训练)

# DeepSpeed优化配置(使用ZeRO3内存优化技术)
deepspeed=./scripts/zero3.json

# 模型配置(使用HuggingFace上的Qwen2.5-VL-32B-Instruct多模态模型)
llm=Qwen/Qwen2.5-VL-32B-Instruct

# 训练超参数设置
lr=2e-7  # 学习率,较低的值适合大模型微调
batch_size=2  # 每设备训练批次大小
grad_accum_steps=8  # 梯度累积步数,等效于batch_size*grad_accum_steps=16

# 训练入口脚本
entry_file=qwenvl/train/train_qwen.py

# 数据集配置(需替换为实际公开数据集名称)
datasets=public_dataset1,public_dataset2

# 输出配置
run_name="qwen2vl-baseline"  # 训练任务名称
output_dir=./output  # 模型输出目录

# 训练参数集合
args="
    --deepspeed ${deepspeed} \  # 使用DeepSpeed优化
    --model_name_or_path "${llm}" \  # 指定预训练模型路径
    --dataset_use ${datasets} \  # 指定使用的数据集
    --data_flatten True \  # 数据扁平化处理
    --tune_mm_vision False \  # 冻结视觉编码器参数(使用预训练能力)
    --tune_mm_mlp True \  # 训练视觉到语言的映射层(适配多模态对齐)
    --tune_mm_llm True \  # 训练大语言模型部分参数(学习跨模态推理)
    --bf16 \  # 使用BF16混合精度训练(提高效率)
    --output_dir ${output_dir} \  # 输出目录
    --num_train_epochs 0.5 \  # 训练半个轮次(节约资源)
    --per_device_train_batch_size ${batch_size} \  # 每设备训练批次
    --per_device_eval_batch_size $((batch_size*2)) \  # 评估批次大小加倍
    --gradient_accumulation_steps ${grad_accum_steps} \  # 梯度累积步数
    --max_pixels 50176 \  # 最大图像像素数(224x224)
    --min_pixels 784 \  # 最小图像像素数(28x28)
    --eval_strategy "no" \  # 不进行评估(节省时间)
    --save_strategy "steps" \  # 按步数保存模型
    --save_steps 1000 \  # 每1000步保存一次
    --save_total_limit 1 \  # 最多保存1个检查点(节省空间)
    --learning_rate ${lr} \  # 学习率
    --weight_decay 0 \  # 权重衰减(正则化)
    --warmup_ratio 0.03 \  # 学习率预热比例
    --max_grad_norm 1 \  # 梯度裁剪阈值
    --lr_scheduler_type "cosine" \  # 余弦学习率调度
    --logging_steps 1 \  # 每步记录日志
    --model_max_length 8192 \  # 模型最大输入长度(支持长文本)
    --gradient_checkpointing True \  # 使用梯度检查点(节约显存)
    --dataloader_num_workers 4 \  # 数据加载器工作线程数
    --run_name ${run_name} \  # 训练任务名称
    --report_to wandb"  # 使用WandB记录训练过程

# 启动分布式训练
torchrun --nproc_per_node=${NPROC_PER_NODE} \  # 每节点进程数(GPU数)
         --master_addr=${MASTER_ADDR} \  # 主节点地址
         --master_port=${MASTER_PORT} \  # 主节点端口
         ${entry_file} ${args}  # 执行训练脚本并传递参数

多模态训练策略:
–tune_mm_vision False:冻结视觉编码器,复用预训练能力
–tune_mm_mlp True:训练视觉到语言的映射层,优化跨模态对齐
–tune_mm_llm True:微调语言模型,学习基于视觉信息的推理能力

DeepSpeed 优化:
使用 ZeRO3 内存优化技术,大幅降低训练显存需求
结合 BF16 混合精度和梯度检查点,进一步提升效率

训练设置:
小批次 + 梯度累积实现大有效批次
余弦学习率调度 + 预热策略,稳定训练过程
每 1000 步保存一次模型,仅保留最新检查点

JSON文件是DeepSpeed的ZeRO-3优化配置

{
    "fp16": {
        "enabled": "auto",
        "loss_scale": 0,
        "loss_scale_window": 1000,
        "initial_scale_power": 16,
        "hysteresis": 2,
        "min_loss_scale": 1
    },
    "bf16": {
        "enabled": "auto"
    },
    "train_micro_batch_size_per_gpu": "auto",
    "train_batch_size": "auto",
    "gradient_accumulation_steps": "auto",
    "zero_optimization": {
        "stage": 3,
        "overlap_comm": true,
        "contiguous_gradients": true,
        "sub_group_size": 1e9,
        "reduce_bucket_size": "auto",
        "stage3_prefetch_bucket_size": "auto",
        "stage3_param_persistence_threshold": "auto",
        "stage3_max_live_parameters": 1e9,
        "stage3_max_reuse_distance": 1e9,
        "stage3_gather_16bit_weights_on_model_save": true
    }
}
  1. 混合精度训练:使用BF16/FP16降低参数精度
  2. ZeRO-3优化:分片存储优化器状态、梯度和模型参数
  3. 自动调优:多个参数设为"auto",让DeepSpeed根据硬件自动调整

1. FP16配置

"fp16": {
    "enabled": "auto",
    "loss_scale": 0,
    "loss_scale_window": 1000,
    "initial_scale_power": 16,
    "hysteresis": 2,
    "min_loss_scale": 1
}
  • enabled: 是否启用FP16混合精度训练。"auto"表示根据硬件自动决定(GPU支持BF16时优先使用BF16)。
  • loss_scale: 静态损失缩放因子。设为0时启用动态损失缩放(自适应调整缩放因子)。
  • loss_scale_window: 动态损失缩放的窗口大小。每经过这么多步,评估一次是否需要调整缩放因子。
  • initial_scale_power: 初始损失缩放因子为2的16次方(65536)。
  • hysteresis: 损失缩放因子调整的滞后参数。连续多次梯度溢出才降低缩放因子。
  • min_loss_scale: 最小损失缩放因子,防止缩放因子过小导致精度问题。

2. BF16配置

"bf16": {
    "enabled": "auto"
}
  • enabled: 是否启用BF16混合精度训练。"auto"表示根据硬件自动决定(NVIDIA A100、H100等支持BF16的GPU会启用)。BF16比FP16更适合大模型训练,能减少舍入误差。

3. 批次配置

"train_micro_batch_size_per_gpu": "auto",
"train_batch_size": "auto",
"gradient_accumulation_steps": "auto"
  • train_micro_batch_size_per_gpu: 每个GPU实际处理的微批次大小。"auto"表示由DeepSpeed根据显存自动计算。
  • train_batch_size: 全局有效批次大小。
  • gradient_accumulation_steps: 梯度累积步数。"auto"表示DeepSpeed根据前两者自动计算(train_batch_size = micro_batch_size * grad_accum_steps)。

4. ZeRO-3优化配置

"zero_optimization": {
    "stage": 3,
    "overlap_comm": true,
    "contiguous_gradients": true,
    "sub_group_size": 1e9,
    "reduce_bucket_size": "auto",
    "stage3_prefetch_bucket_size": "auto",
    "stage3_param_persistence_threshold": "auto",
    "stage3_max_live_parameters": 1e9,
    "stage3_max_reuse_distance": 1e9,
    "stage3_gather_16bit_weights_on_model_save": true
}
  • stage: ZeRO优化阶段。3表示启用ZeRO-3,将优化器状态、梯度和模型参数都分片到不同GPU,大幅降低显存需求。
  • overlap_comm: 是否重叠通信和计算。启用后可隐藏通信延迟,提高训练效率。
  • contiguous_gradients: 是否将梯度连续存储。有助于减少内存碎片。
  • sub_group_size: 通信子组大小。设为极大值(1e9)表示所有GPU参与通信。
  • reduce_bucket_size: 梯度归约的桶大小。"auto"表示自动调整。
  • stage3_prefetch_bucket_size: ZeRO-3预取桶的大小。控制参数预取的粒度。
  • stage3_param_persistence_threshold: 参数持久化阈值。小于此值的参数会被频繁卸载以节省显存。
  • stage3_max_live_parameters: 同时活跃的最大参数数量。控制内存使用上限。
  • stage3_max_reuse_distance: 参数重用的最大距离。影响参数卸载策略。
  • stage3_gather_16bit_weights_on_model_save: 保存模型时,是否将参数收集为16位格式。启用后可减小模型文件大小。

数据集

data/__init__.py
DATASET_NAME1 = {
    "annotation_path": "/media/user/Qwen2.5-VL-main/qwen-vl-finetune/demo/single_images.json",
    "data_path": "/media/user/Qwen2.5-VL-main/qwen-vl-finetune/",  
}

data_dict = {
    "cambrian_737k": CAMBRIAN_737K,
    "cambrian_737k_pack": CAMBRIAN_737K_PACK,
    "mp_doc": MP_DOC,
    "clevr_mc": CLEVR_MC,
    "videochatgpt": VIDEOCHATGPT,
    "dataset_name1": DATASET_NAME1,
}

据硬件条件配置指南 NNODES、NPER_NODE、WORLD_SIZE、RANK、LOCAL_RANK之后
执行

chmod +x ./scripts/sft_32b.sh
./scripts/sft_32b
### 关于Qwen2.5-VL-7B-Instruct模型的详细介绍 #### 模型概述 Qwen2.5-VL-7B-Instruct是一款多模态大型语言模型,专为理解和生成自然语言而设计。该模型不仅擅长处理文本数据,还特别增强了对图像的理解能力,使其成为一款视觉-语言联合学习的强大工具[^1]。 #### 主要特点 此模型的一大亮点在于其作为视觉代理的能力。借助先进的智能推理技术,Qwen2.5-VL-7B-Instruct可以动态调用多种外部API和服务来完成特定任务,从而实现类似于人类的操作行为——无论是在计算机上执行命令还是操控移动设备上的应用程序都显得游刃有余。这种高度灵活的应用场景极大地扩展了模型的实际用途范围[^2]。 #### 下载方法 为了获取并部署这一先进的人工智能解决方案,可以从Hugging Face平台下载预训练好的权重文件。具体操作如下所示: ```bash HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download Qwen/Qwen2.5-VL-7B-Instruct ``` 上述命令会自动从官方仓库拉取所需的全部资源包,并将其保存到本地环境当中以便后续加载使用。 #### 使用教程 启动基于vLLM框架的服务端程序之前,请先确保已经成功安装好必要的依赖库以及配置好了运行时环境变量。之后可以通过下面这条简单的指令快速开启服务接口供客户端请求访问: ```bash # 假设已按照文档说明完成了前期准备工作,则只需简单输入以下命令即可激活在线预测功能 python -m vllm.server --model-path ./path/to/downloaded/model/ ``` 以上就是有关如何利用vLLM项目高效地集成和应用Qwen2.5-VL-7B-Instruct模型的一系列指导建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二分掌柜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值