LLM代码实现-Qwen(模型微调)

简介

LLM 通用模型在各种任务上表现良好,我们可以将它们用作对目标任务进行微调的基础。 微调允许我们使模型适应目标域和目标任务,使其可以更好地完成我们所需要的特定的任务。

目前模型微调方法主要有 Full(全参微调)、Freeze、P-tuning、LoRA、QLora,这些这些方法都各有优势,关于它们的介绍也有很多,本篇主要讲解代码实现,原理方面就不赘述了,同样考虑到不是所有读者都有足够的算力,因此使用占用资源最少的 QLora 对模型进行微调,各个微调方式占用资源如下图所示(batch_size 设置为 1)。

image.png

这里推荐使用 [firefly(流萤)]项目来实现模型微调,这个项目主要是为了微调多轮对话数据集,不过单轮对话也同样适用。

Firefly 项目训练多轮对话模型时,采取了一种更加充分高效的方法。如下图所示,将一条多轮对话数据拼接之后,输入模型,并行计算每个位置的 loss,只有 Assistant 部分的 loss 参与权重更新。firefly 为什么这种做法是可行的?答案在于因果语言模型的 attention mask。以 GPT 为代表的 Causal Language Model(因果语言模型),这种模型的 attention mask 是一个对角掩码矩阵,每个 token 在编码的时候,只能看到它之前的 token,看不到它之后的 token。 所以 User1 部分的编码输出,只能感知到 User1 的内容,无法感知到它之后的文本,可以用来预测 Assistant1 的内容。而 User2 部分的编码输出,只能看到 User1、Assistant1、User2 的内容,可以用来预测 Assistant2 的内容,依此类推。对于整个序列,只需要输入模型一次,便可并行获得每个位置的 logits,从而用来计算 loss。

训练环境配置

首先 pull 项目并配置环境:

git clone https://github.com/yangjianxin1/Firefly.git

cd Firefly
pip install -r requirements.txt

然后找到 1. Firefly/train_args/sft/qlora 路径下的 qwen-7b-sft-qlora.json(虽然文件名是 7b 但是 qwen 都可以通用),对里面的内容进行修改,主要修改模型路径和训练文件,其余参数可以看着修改。

{
    "output_dir": "output/firefly-qwen-1_8b-sft-qlora",
    "model_name_or_path": "Qwen/Qwen-1_8B-Chat",
    "train_file": "./data/dummy_data.jsonl",
    "template_name": "qwen",
    "num_train_epochs": 1,
    "per_device_train_batch_size": 1,
    "gradient_accumulation_steps": 16,
    "learning_rate": 2e-4,
    "max_seq_length": 1024,
    "logging_steps": 100,
    "save_steps": 100,
    "save_total_limit": 1,
    "lr_scheduler_type": "constant_with_warmup",
    "warmup_steps": 100,
    "lora_rank": 64,
    "lora_alpha": 128,
    "lora_dropout": 0.05,

    "gradient_checkpointing": true,
    "disable_tqdm": false,
    "optim": "paged_adamw_32bit",
    "seed": 42,
    "fp16": true,
    "report_to": "tensorboard",
    "dataloader_num_workers": 0,
    "save_strategy": "steps",
    "weight_decay": 0,
    "max_grad_norm": 0.3,
    "remove_unused_columns": false
}

数据准备

这里的数据集是官方提供的一个测试数据集,用于跑通流程,以下是其中一条数据: image.png 这个 json 中只用 “conversation_id” 和 “conversation” 两个是训练需要的,其他的不必在意。“conversation_id” 表示对话的序号,“conversation” 对应的是一个列表,元素是字典,每个字典中有 “human” 和 “assistant” 两个键,分别表示用户和模型的说话内容。如果要用自己的数据集也要按照这种格式进行修改。

开始训练

利用以下代码开始训练:

python train.py --train_args_file train_args/sft/qlora/qwen-7b-sft-qlora.json

训练完成后会在配置文件中设置的 output_dir 生成对应的 QLora 文件,可利用 Firefly/script/chat 路径下的两个脚本进行调用来测试模型微调的效果。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

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

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

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

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

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

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

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

<think>嗯,用户想了解如何对Qwen-VL进行微调。首先,我需要回忆一下Qwen-VL是什么模型Qwen-VL是阿里巴巴开源的多模态大模型,支持图像和文本的理解,对吧?用户需要微调的指南和资源,所以应该提供具体的步骤和相关资料。 接下来,我需要考虑微调的一般步骤。通常,微调需要准备数据集、选择合适的框架、调整参数等。但Qwen-VL可能有特定的要求,比如数据格式、是否需要图像处理等。用户提到的参考引用里有一些教程和资源链接,比如Github上的awesome-LLM-resourses,可能包含相关材料,需要确认这些资源是否涵盖Qwen-VL的微调。 然后,用户可能遇到的问题包括数据准备、计算资源不足、过拟合等,应该在回答中提及解决方案。另外,用户可能需要代码示例,比如使用Hugging Face的Transformers库或者Deepspeed进行分布式训练。需要确保提供的代码正确,并且符合LaTeX格式的要求,变量和公式用$...$包裹,独立公式用$$...$$。 还要检查是否有相关的官方文档或社区资源,比如Hugging Face Model Hub或者GitHub仓库,这些都可以作为引用来源。用户提供的引用1和2提到了教程和Github资源,应该合理引用这些内容,并在末尾添加标识符。 最后,生成相关问题时要考虑用户可能进一步的需求,比如性能优化、部署应用、数据处理工具等。确保问题覆盖微调的不同方面,帮助用户深入理解。</think>### Qwen-VL微调指南与资源 Qwen-VL是基于Transformer架构的多模态大模型,支持图像和文本联合理解任务。以下是微调的关键步骤与资源整理: --- #### **1. 微调准备** - **硬件需求** 建议使用至少16GB显存的GPU(如V100/A10),多卡训练可使用Deepspeed框架加速[^2]。 - **数据集格式** 多模态数据需包含图像路径和标注文本,格式示例: ```json { "image": "path/to/image.jpg", "conversation": [ {"human": "描述图片内容", "assistant": "这是一只猫在沙发上"} ] } ``` --- #### **2. 微调方法** - **全参数微调** 使用Hugging Face Transformers库加载模型: ```python from transformers import AutoModelForVision2Seq model = AutoModelForVision2Seq.from_pretrained("Qwen/Qwen-VL") ``` - **LoRA轻量微调** 通过PEFT库降低显存消耗: ```python from peft import LoraConfig, get_peft_model lora_config = LoraConfig(r=8, lora_alpha=32) model = get_peft_model(model, lora_config) ``` --- #### **3. 训练配置** - **关键参数设置** - 学习率:建议$lr=1e-5$到$3e-5$ - Batch size:根据显存调整,如$batch=4$ - 优化器:AdamW或Lion - **损失函数** 交叉熵损失计算: $$L = -\sum_{t=1}^T y_t \log(p_t)$$ 其中$y_t$为标签,$p_t$为预测概率分布[^1] --- #### **4. 推荐资源** 1. **官方文档** Hugging Face Model Hub提供完整API说明:https://huggingface.co/Qwen 2. **实践教程** GitHub项目`awesome-LLM-resourses`包含多模态模型微调案例 3. **计算平台** AutoDL或AWS EC2提供预装环境的GPU实例 --- #### **5. 常见问题解决** - **显存不足** 启用梯度检查点: ```python model.gradient_checkpointing_enable() ``` - **过拟合** 添加Dropout(如$p=0.1$)或权重衰减(如$weight\_decay=0.01$) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值