用 LoRA 对 Qwen2.5-VL 模型进行SFT - LoRA微调流程

用 LoRA 对 Qwen2.5-VL 模型进行SFT - LoRA微调流程

flyfish


┌──────────────────────────────────────────────────────────────────────────┐
│                            环境准备与启动                                │
├──────────────────────────────────────────────────────────────────────────┤
│ 1. 执行命令: FORCE_TORCHRUN=1 llamafactory-cli train ...                 │
│ 2. torchrun初始化分布式训练环境                                          │
│    ├─ 启动2个GPU任务(world size:2)                                      │
│    ├─ 主节点地址: 127.0.0.1:随机端口                                    │
│    └─ 设备配置: cuda:0, cuda:1, BF16混合精度                             │
└───────────────────────────────────┬─────────────────────────────────────┘↓
┌──────────────────────────────────────────────────────────────────────────┐
│                              模型加载与配置                              │
├──────────────────────────────────────────────────────────────────────────┤
│ 1. 加载Qwen2.5-VL-7B-Instruct模型                                       │
│    ├─ 视觉模块(visual): 32层Transformer块, 处理图像输入                  │
│    ├─ 语言模块(model): 36层Decoder, 使用RoPE位置编码                    │
│    └─ 输出层(lm_head): 语言生成输出层                                    │
│                                                                          │
│ 2. 模型参数冻结策略                                                      │
│    ├─ 冻结视觉模块: visual.patch_embed, visual.blocks, visual.merger     │
│    ├─ 冻结非关键层: 词嵌入(embed_tokens), lm_head, 归一化层(RMSNorm)      │
│    └─ 保留可训练层: 语言模型线性层                                       │
│                                                                          │
│ 3. LoRA微调配置                                                          │
│    ├─ 自动发现目标模块: q_proj, k_proj, v_proj, o_proj, gate_proj,       │
│    │  up_proj, down_proj(语言模型注意力和MLP线性层)                       │
│    ├─ LoRA参数: r=8, alpha=16, dropout=0.1                               │
│    └─ 可训练参数: 2018万(占总参数0.24%)                                  │
└───────────────────────────────────┬─────────────────────────────────────┘↓
┌──────────────────────────────────────────────────────────────────────────┐
│                              多模态数据处理                              │
├──────────────────────────────────────────────────────────────────────────┤
│ 1. 加载数据集: mllm_demo + identity + alpaca_en_demo (1097条样本)        │
│                                                                          │
│ 2. 数据预处理                                                            │
│    ├─ 图像预处理:                                                       │
│    │  ├─ 使用Qwen2VLImageProcessor                                       │
│    │  ├─ 标准化: 均值[0.481,0.458,0.408], 标准差[0.269,0.261,0.276]       │
│    │  └─ 图像占位符: <|vision_start|><|image_pad|>...<|vision_end|>       │
│    │                                                             
│    └─ 文本预处理:                                                       │
│       ├─ 使用Qwen2TokenizerFast                                         │
│       ├─ 特殊token: <|im_start|>, <|im_end|>, <|vision_start|>等          │
│       └─ 截断长度: 2048 token                                           │
│                                                                          │
│ 3. 样本格式示例:                                                        │
│    ├─ 输入: 系统提示 + 用户问题(含图像占位符) + 模型回答                   │
│    └─ 输出: 标签ID(仅优化回答部分, -100表示忽略)                          │
└───────────────────────────────────┬─────────────────────────────────────┘↓
┌──────────────────────────────────────────────────────────────────────────┐
│                              训练配置与执行                              │
├──────────────────────────────────────────────────────────────────────────┤
│ 1. 核心超参数                                                            │
│    ├─ 批次配置: 单GPU批次1 + 梯度累积8 → 等效批次16                       │
│    ├─ 学习率: 1e-4, 余弦衰减, 10%预热                                    │
│    ├─ 训练轮次: 3 epoch, 总优化步骤204                                   │
│    └─ 优化器: 自动选择(基于配置)                                          │
│                                                                          │
│ 2. 性能优化策略                                                          │
│    ├─ 梯度检查点: 减少显存占用                                           │
│    ├─ Torch SDPA: 加速注意力计算                                         │
│    ├─ 可训练参数转float32: 保证数值稳定性                                │
│    └─ 分布式训练: 自动处理GPU通信(NCCL屏障)                              │
│                                                                          │
│ 3. 训练过程监控                                                          │
│    ├─ 日志记录: 每10步记录训练状态                                       │
│    ├─ 检查点保存: 每500步保存模型                                       │
│    └─ 损失曲线绘制: 可视化训练过程                                        │
└───────────────────────────────────┬─────────────────────────────────────┘↓
┌──────────────────────────────────────────────────────────────────────────┐
│                              结果保存与验证                              │
├──────────────────────────────────────────────────────────────────────────┤
│ 1. 模型保存                                                              │
│    ├─ 输出目录: saves/qwen2_5vl-7b/lora/sft                              │
│    ├─ 保存内容: LoRA权重 + 优化器状态(可选择仅保存模型)                   │
│    └─ 覆盖策略: 自动覆盖现有输出目录                                      │
│                                                                          │
│ 2. 可选验证步骤                                                          │
│    ├─ 视觉任务评估: OK-VQA, COCO Captioning                               │
│    └─ 语言任务评估: 指令遵循能力测试                                      │
└──────────────────────────────────────────────────────────────────────────┘

从另一个角度看

1. 环境准备与初始化├─ 执行命令│  └─ `FORCE_TORCHRUN=1 llamafactory-cli train examples/train_lora/qwen2_5vl_lora_sft.yaml`│     ├─ 强制使用 `torchrun` 分布式训练│     └─ 配置文件定义训练参数├─ 分布式环境初始化│  ├─ 任务数:2 GPU(world size=2)│  ├─ 主节点地址:`127.0.0.1:44553`(随机端口)│  └─ 自动设置环境变量:`CUDA_DEVICE_ORDER=PCI_BUS_ID`└─ 设备配置├─ 双GPU训练:`cuda:0` 和 `cuda:1`└─ 混合精度:`torch.bfloat16`2. 模型加载与配置├─ 加载基础模型│  ├─ 模型名称:`Qwen2.5-VL-7B-Instruct`│  ├─ 结构:│  │  ├─ 视觉模块:32层Transformer│  │  ├─ 语言模块:36层Decoder + RoPE│  │  └─ 输出层:词汇表大小 152,064├─ 参数冻结策略│  ├─ 冻结视觉模块:│  │  ├─ `visual.patch_embed`│  │  ├─ `visual.blocks`│  │  └─ `visual.merger`│  └─ 冻结语言模块组件:│     ├─ `embed_tokens`│     ├─ `lm_head`│     └─ 所有归一化层(RMSNorm)└─ LoRA 配置├─ 目标模块:│  ├─ 注意力层:`q_proj`, `k_proj`, `v_proj`, `o_proj`│  └─ MLP 层:`gate_proj`, `up_proj`, `down_proj`├─ 参数:│  ├─ 秩(r) = 8│  ├─ α = 16│  └─ Dropout = 0.1└─ 可训练参数量:20,185,088(占总参数的 0.24%)3. 数据处理与准备├─ 数据集加载│  ├─ 合并数据集:│  │  ├─ `mllm_demo.json`(多模态指令-响应)│  │  ├─ `identity.json`(身份识别)│  │  └─ `alpaca_en_demo.json`(英文指令)│  └─ 总样本数:1,097 条├─ 图像预处理│  ├─ 处理器:`Qwen2VLImageProcessor`│  ├─ 标准化参数:│  │  ├─ 均值:[0.481, 0.458, 0.408]│  │  └─ 标准差:[0.269, 0.261, 0.276]│  └─ 图像占位符:`<image>`└─ 文本预处理├─ 分词器:`Qwen2TokenizerFast`├─ 特殊token:│  ├─ `</s>`(对话结束)│  ├─ `<s>`(对话开始)│  ├─ `<image>`(视觉内容起始)│  └─ `</image>`(视觉内容结束)└─ 序列截断:最大长度 2048 tokens4. 训练配置与执行├─ 核心超参数│  ├─ 批次配置:│  │  ├─ 单GPU批次大小:1│  │  ├─ 梯度累积步数:8│  │  └─ 有效批次大小:16│  ├─ 学习率策略:│  │  ├─ 初始学习率:1e-4│  │  ├─ 调度器:余弦衰减│  │  └─ 预热比例:10%│  ├─ 训练轮次:3 epochs│  └─ 总优化步骤:204 steps├─ 性能优化│  ├─ 梯度检查点:启用(减少显存)│  ├─ Torch SDPA:加速注意力计算│  └─ 参数精度:│     ├─ 模型主体:bfloat16│     └─ 可训练参数:float32└─ 分布式训练细节├─ 通信后端:NCCL├─ 设备同步:自动屏障(barrier)└─ 日志记录:├─ 每10步记录损失└─ 每500步保存检查点5. 模型保存与验证├─ 模型保存│  ├─ 路径:`saves/qwen2_5vl-7b/lora/sft`│  ├─ 内容:│  │  ├─ LoRA权重:`adapter_config.json`, `adapter_model.bin`│  │  └─ 优化器状态(可选)│  └─ 覆盖策略:自动覆盖输出目录└─ 可选验证├─ 视觉任务:│  ├─ OK-VQA(视觉问答)│  └─ COCO Captioning(图像描述)└─ 语言任务:├─ 指令遵循测试└─ 多轮对话连贯性评估6. 关键技术细节├─ 多模态样本格式示例:│  ```text│  <s>system</s>│  You are a helpful assistant.<e>│  <s>user</s>│  <image>Who are they?<e>│  <s>assistant</s>│  They're Kane and Gretzka from Bayern Munich.<e>│  ```├─ 标签处理:│  ├─ 仅优化回答部分(标签ID ≠ -100)│  └─ 系统提示和问题部分标签设为 -100(忽略)└─ 显存优化:├─ 梯度检查点├─ BF16混合精度└─ 动态调整数据处理并行度(num_proc)

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

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

相关文章

熵最小化Entropy Minimization (二): 案例实施

前面介绍了熵最小化、常用的权重函数汇总、半监督学习&#xff1a;低密度分离假设 (Low-Density Separation Assumption)、标签平滑、信息最大化等相关的知识点&#xff0c;本文采用一个MNIST10分类的数据集来进一步体会它们的效果。 案例实施 对比方法 纯监督学习方法&…

联邦学习聚合参数操作详解

联邦学习中常见的模型聚合操作&#xff0c;具体用于对来自多个客户端的模型更新进行聚合&#xff0c;以得到全局模型。在联邦学习框架下&#xff0c;多个客户端在本地训练各自的模型后&#xff0c;会将模型更新&#xff08;通常是模型的权重&#xff09;发送到中央服务器&#…

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…

机房断电后 etcd 启动失败的排查与快速恢复实录

目录 机房断电后 etcd 启动失败的排查与快速恢复实录 背景与问题起因 报错分析 解决方案&#xff1a;删除 member 数据重新初始化 步骤 1&#xff1a;停止 etcd 容器或服务 步骤 2&#xff1a;删除 member 目录 步骤 3&#xff1a;重启 etcd 服务 附加提醒 总结与后续…

Linux上并行打包压缩工具

文章目录 Linux上并行打包压缩工具1. **Pigz (Parallel gzip)**2. **Pbzip2 (Parallel bzip2)**3. **Pixz (Parallel xz)**4. **Zstd (支持多线程)**5. **GNU Parallel 传统工具**6. **Fastest Tools (综合建议)**注意事项&#xff1a; tar和zstd多线程压缩和解压**1. 多线程压…

【K8S系列】K8S中Service 无法访问问题的深度分析

摘要 &#xff1a; 本文是关于 Kubernetes 中 Service 无法访问问题的深度分析&#xff0c;结合根本原因、诊断策略与解决方案的系统性指南&#xff1a; Kubernetes Service 访问故障全景解析&#xff1a;从底层机制到实战修复 Service 作为 Kubernetes 集群内网络通信的核心抽…

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…

进行性核上性麻痹护理指南:全维度守护健康

进行性核上性麻痹是一种罕见的神经系统退行性疾病&#xff0c;会导致患者出现运动障碍、吞咽困难、认知障碍等症状。科学的健康护理对延缓病情发展、提升患者生活质量至关重要。 饮食护理&#xff1a;由于患者常存在吞咽困难&#xff0c;食物应选择糊状、软烂的类型&#xff0c…

【浅析赛题,国赛一等奖水平:思路+模型:】2025 年第八届河北省研究生数学建模竞赛:A 题 基于图论的复杂网络分析与可视化建模

问题一&#xff1a;社交网络拓扑结构分析与影响力评估 基础模型 有向加权图构建&#xff1a;将用户设为节点&#xff0c;互动关系为有向边&#xff0c;以互动频率&#xff08;如一定时间内点赞、评论、转发次数&#xff09;或加权求和&#xff08;赋予不同互动类型不同权重&a…

web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界

web3-去中心化金融深度剖析&#xff1a;DEX、AMM及兑换交易传播如何改变世界 金融问题 1.个人投资&#xff1a;在不同的时间和可能的情况&#xff08;状态&#xff09;下积累财富 2.商业投资&#xff1a;为企业家和企业提供投资生产性活动的资源 目标&#xff1a;跨越时间和…

【笔记】NVIDIA AI Workbench 安装记录

前言 NVIDIA AI Workbench 简介 NVIDIA AI Workbench 是一款由 NVIDIA 推出的集成化开发工具&#xff0c;旨在简化人工智能和机器学习的开发流程。它提供从数据准备到模型训练、优化及部署的全套工具链&#xff0c;支持跨平台协作&#xff0c;适合开发者、数据科学家和企业团队…

积累-Vue.js 开发实用指南:ElementUI 与核心技巧

一、ElementUI 组件高效使用 1. Table 组件展开行优化实现 场景需求&#xff1a;仅在展开行时动态加载数据&#xff0c;避免不必要的接口调用 实现方案&#xff1a; // expand行展开的时候调用expandOpen: async (row, expandedRows) > {// 实时更新展开列const index e…

【BUG】记STM32F030多通道ADC DMA读取乱序问题

STM32F0多通道ADC的校准顺序与DMA乱序问题的本质 声明&#xff1a;本段转载&#xff1a;https://www.cnblogs.com/chihirosan/p/5458673.html 问题描述 通过 uint16_t ConvData[8]保存DMA搬运的ADC转换数值&#xff0c;但是这个数组数值的顺序总是和ADC不是顺序对应的。比如用7…

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…

今天刷SQL

多说几句&#xff0c;JAVA真不行了&#xff1f; 刚刚看到那个tiobe最新的指数&#xff0c;JAVA只剩下8.84%&#xff1f;感觉上次看的时候还有百分之十呢。 185-department-top-three-salaries https://leetcode.com/problems/department-top-three-salaries/description/ 公…

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…

【计算机网络】SDN

SDN这种新型网络体系结构的核心思想&#xff1a;把网络的控制层面与数据层面分离&#xff0c;而让控制层面利用软件来控制数据层面中的许多设备。 OpenFlow协议可以被看成是SDN体系结构中控制层面与数据层面之间的通信接口。 在SDN中取代传统路由器中转发表的是“流表”&…

量化面试绿皮书:9. 通往Offer的门

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 9. 通往Offer的门 你面对着两扇门。 一个通往你的工作机会&#xff0c;另一个是退出。 两扇门前都有一名警卫。一个守卫总是说谎&#xff0c…

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…