LoRA 微调 Qwen2-VL-2B:轻松提升性能,解锁 GPU 极限!

上一篇文章我们探讨了如何使用自定义数据集进行模型训练,这次我将重点介绍如何使用 LoRA 微调 Qwen2-VL-2B。

用微调、量化与推断,玩转 Qwen2-VL多模态大模型自定义OCR数据!

你也可以根据自己 GPU 的可用性,选择更大的 7B 模型。我在 RTX 4090 24GB 显卡上进行了 LoRA 微调,针对 7B 模型进行了测试,实际操作时大约需要 20GB 的显存来加载模型和图像批次进行微调。

那么,为什么选择 LoRA 微调,而不是直接进行完整训练呢?

你当然可以选择完全训练模型,但你的 GPU 够用吗?

首先,让我们了解一下 LoRA(Low-Rank Adaptation)到底是什么?

LoRA 是一种针对大型语言模型(LLMs)进行高效微调的技术。它的核心思想是,通过仅调整模型权重中的一小部分低秩子集,而不是更新所有参数,来实现微调。

简单来说,LoRA 不会修改整个模型的权重,而是引入一组低秩矩阵,用来捕捉任务特定的信息,并在推理过程中与现有模型的权重结合,从而在保留预训练知识的同时,使模型适应新的任务。

LoRA 相较于完全微调的优势

  1. 降低 GPU 内存要求
    传统的完全微调需要更新大量的模型参数,这对 GPU 内存(VRAM)是一个巨大的挑战。LoRA 通过只更新一小部分参数,显著减少了微调所需的内存,使得即使在资源有限的情况下,依然能使用大型模型进行微调。

  2. 提高效率
    由于 LoRA 只训练较少的参数,它减少了计算成本和训练时间。这意味着你可以更快速地将模型适应到新的任务中,大幅提升工作效率。

  3. 参数效率
    LoRA 允许在不修改整个模型的情况下进行微调。这样做不仅可以保留原始模型的知识,还能添加针对特定任务的学习。更重要的是,这些适配器可以轻松存储和重复使用,极大地提高了模型的灵活性和可操作性。

  4. 模块化设计
    由于 LoRA 引入的低秩矩阵非常小,你可以轻松加载和切换不同任务的 LoRA 适配器,而无需重新训练整个模型。这为模型提供了极大的灵活性和可扩展性,尤其适用于处理多任务和不断变化的应用场景。

LoRA 微调为大模型提供了一个高效、低成本的微调方案。它不仅能在有限的 GPU 资源上进行高效训练,还能保持模型的原始知识,同时快速适应不同任务,是现代 AI 开发中不可或缺的技术之一。

设置完成后,我们可以开始深入研究如何使用 LoRA 微调 Qwen2-VL 模型。我在 Linux 环境下进行微调、量化和推理,下面将带大家逐步了解整个过程。

首先,我们必须克隆并安装 Llama-Factory 仓库。

git clone https://github.com/hiyouga/LLaMA-Factory.git``cd LLaMA-Factory``pip install -e ".[torch,metrics]"

首先,转到 data\dataset_info.json,找到 mllm_demo,并将其修改为:

然后转到 example/train_lora/qwen2vl_lora_sft.yaml

最后,运行命令:

llamafactory-cli train examples/train_lora/qwen2vl_lora_sft.yaml

在完成 LoRA 微调 Qwen2-VL 后,生成的文件结构非常关键,它们分别承担不同的功能。以下是每个文件的简要说明,帮助你更好地理解其作用和使用场景。

  1. added_tokens.json
    包含在标准词汇表之外添加的自定义标记的信息。这些标记可能是特定领域的术语、稀有单词或特殊符号,有助于提升模型在特定任务中的表现。

  2. chat_template.json
    这个文件可能包含与生成聊天响应相关的配置数据,例如在交互式对话会话期间用于提示模型的模板。

  3. config.json
    保存模型架构配置,包括层数、隐藏层维度、注意力头数等超参数设置,是加载模型结构时必不可少的文件。

  4. generation_config.json
    该文件包含与文本生成相关的设置,例如温度(temperature)、top-k、top-p 等参数。这些设置影响模型生成文本的创造性和随机性,适用于控制输出的风格和多样性。

  5. merges.txt
    这是分词器数据的一部分,包含字节对编码(BPE)的合并规则,帮助分词器将单词拆解为子词标记。

  6. model.safetensors.index.json
    SafeTensors 格式的索引文件,管理和加载分片的 SafeTensor 文件。它提供张量形状和每个分片的位置的元数据,确保模型的各部分能够正确加载。

  7. model-00001-of-00003.safetensors, model-00002-of-00003.safetensors, model-00003-of-00003.safetensors
    这些是包含实际模型权重的分片文件,SafeTensors 将大型模型拆分为多个文件以便更高效地加载和处理。

  8. preprocessor_config.json
    包含应用于输入数据的预处理设置,如小写化或去除特殊字符,确保在推理时对新输入进行一致性处理。

  9. special_tokens_map.json
    将特殊标记(如 [CLS]、[SEP]、[MASK] 等)映射到分词器使用的特定值。这些特殊标记对于模型理解句子边界、填充以及其他任务非常关键。

10. tokenizer.json
存储分词器的词汇和分词规则,将单词或子词映射到模型用来处理输入 文本的唯一 ID。

11. tokenizer_config.json
包含分词器的附加配置参数,例如分词类型、最大长度、以及任何特殊 的预分词规则。

12. vocab.json
这是一个词汇表文件,列出了所有的标记及其对应的 ID,分词器利用它 将输入文本转换为模型可理解的令牌 ID。

这些文件共同协作,帮助你在微调后的 Qwen2-VL 模型中进行高效的推理和任务适配。通过正确理解每个文件的作用,你可以更加灵活地处理模型的加载、生成和适应不同任务的需求。

我已经在 Linux 中完成了推理,但您可以在 Windows 上尝试:

import requests``import torch``from PIL import Image``from io import BytesIO``from transformers import AutoProcessor, AutoModelForVision2Seq``from transformers.image_utils import load_image``import time` `import json` `import re` `def extract_json_from_string(input_string):`    `# Using regex to extract the JSON part from the string`    `json_match = re.search(r'({.*})', input_string, re.DOTALL)`    `if json_match:`        `json_str = json_match.group(1)  # Extract the JSON-like part`        `try:`            `# Parsing the extracted string as JSON`            `extracted_data = json.loads(json_str)`            `return extracted_data`        `except json.JSONDecodeError as e:`            `print(f"Error decoding JSON: {e}")`            `return None`    `else:`        `print("No JSON found in the string.")`        `return None``DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu"``imagepath = "path/to/vinplate.jpg"``image = load_image(imagepath)``model_path = "saves/qwen2_vl-2b-merged"``processor = AutoProcessor.from_pretrained(model_path)``model = AutoModelForVision2Seq.from_pretrained(`    `model_path, torch_dtype=torch.float16, device_map= DEVICE``)``model.to(DEVICE)``# Create inputs``messages = [`    `{`        `"role": "user",`        `"content": [`            `{"type": "image"},`            `{"type": "text", "text":`                                     `'''`                                    `Please extract the Vehicle Sr No, Engine No, and Model from this image.`                                     `Response only json format nothing else.`                                    `Analyze the font and double check for similar letters such as "V":"U", "8":"S":"0", "R":"P".`                                    `'''`            `}`        `]`    `}`      `]``t1 = time.time()``prompt = processor.apply_chat_template(messages, add_generation_prompt=True)``inputs = processor(text=prompt, images=[image], return_tensors="pt")``inputs = {k: v.to(DEVICE) for k, v in inputs.items()}``generated_ids = model.generate(**inputs, max_new_tokens=500)``generated_texts = processor.batch_decode(generated_ids, skip_special_tokens=True)``t2 = time.time()``response_json = extract_json_from_string(generated_texts[0])``print(response_json)``print('Time Taken')``print(t2-t1)

这篇文章强调了在进行 LoRA 微调 时,GPU 资源 的重要性。由于 Qwen2-VL 模型的庞大规模,微调过程仍然需要大量的 GPU 计算能力。

因此,在本系列的下一部分,我们将深入探讨如何对模型进行 量化,以便降低对 GPU 内存的需求,并提高推理速度。量化的过程将帮助我们更加高效地运行大规模模型,确保模型能够在有限资源下提供高性能输出。

虽然 LoRA 微调大大降低了对 GPU 资源的需求,但要进一步优化模型,仍需要对其进行量化处理。下一部分将详细介绍量化过程,帮助我们实现更高效的模型使用。

参考:https://bhavyajoshi809.medium.com/fine-tuning-multi-model-llm-qwen2-vl-on-custom-data-for-ocr-part-2-lora-fine-tuning-qwen2-vl-aac86d631745

零基础入门AI大模型

今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

5.免费获取

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码或者点击以下链接都可以免费领取【保证100%免费】

点击领取 《AI大模型&人工智能&入门进阶学习资源包》

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值