LLM基础之大模型常见的微调方法:ptuning v2、lora、qlora 以及微调套路

大模型技术飞速发展,像Rag、Agent以及Moe等,1月份抽空看了蛮多大模型的博客和论文,感觉知识点太多了并且更新速度也贼快,后续就慢慢进行总结输出。这篇文章主要主要围绕ptuning v2、lora、qlora以及全量微调等方法进行介绍,末尾也会分享自己参加的相关大模型比赛的微调心得总结以及一些学习的参考。

大模型的基础概念

大模型的训练主要包括预训练阶段、指令微调阶段以及强化学习阶段。不过最近刷到过论文或者博客文章提到,通过高质量的有监督微调数据训练大模型,即使不进行强化学习阶段,也能模仿人类进行输出。预训练阶段,通常是在大量的无标签数据上进行训练,其目的是给模型注入丰富的知识,通常也被称作为基座模型(Base Model)。训练一个好的基座模型一定程度上决定了微调模型的效果,打好下层建筑是很重要的。指令微调阶段, 可以使用训练好的基座模型在对应的任务数据上做进一步迁移训练,以其让模型适应该任务,往往只需要几个epoch的微调即可。

大模型微调的方法

全量微调。 在chatgpt出来之前,像bert、bart这些轻量级的预训练模型,通常是进行全量微调,也就是直接对模型的所有层进行训练以及参数调参,通过一张3090或者4090的显卡就能够轻松训练。然而对于大模型的全量微调,普通的消费级显卡则是很难满足训练的显存需求以及训练速度,一般都得A100 80G的显卡起步,才能达到较快的速度微调出结果。当然也可以通过多张24G 显卡并行来训练大模型,但训练速度可能会比较慢,推理速度就更慢了。

ptuning v2微调。 在了解ptuning v2微调之前,可以先简单了解一下prefix tuning以及ptuning这两种微调方法,这样就更能够明白ptuning v2的精髓。当然在这些方法之前,还有一个人工构造离散模版,也就是设置一句话与数据一起输入到模型中,然后起到提示模型生成对应结果的作用。然而人工构建的离散模版会导致模型对输入易于敏感,所以提出了prefix tuning,其主要思想是在模型的每一层transformer中添加一些虚拟化的token,然后通过训练反向传播只更新这些参数,这样添加不同任务的上文前缀就能够更灵活去指导模型生成对应任务的下文了。ptuning 则与prefix tuning不同,其区别在于添加可训练的虚拟token在embedding层,从而指导模型生成。而ptuning中,由于连续提示是被插入到embedding层,存在两个明显的问题,首先是虚拟化token的长度不能过长,因为模型的输入长度是一定的,其次是随着模型层数的过深,第一层的propmt对后面层的影响不确定。

所以ptuning v2,直接将这些可训练的提示不仅仅只插入到第一层的输入,还插入到后续的模型层输入中,也就是说在每层输入前面添加可微调的参数,这样就可以增加可训练的优化参数以更加适应复杂的任务。具体的代码实现可以参考清华给出的chatglm2-6b中ptuning v2代码[6]。

lora微调。 lora引用原文的话就是它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,大大减少了下游任务的可训练参数的数量。如下图所示,lora微调冻结大模型本身的参数,视为一个矩阵,然后通过两个小的矩阵相乘来近似逼近模型,在训练过程中,数据输入到模型中后,经过模型本身的参数和lora矩阵的输出,然后与label计算loss之后仅仅更新lora矩阵的参数,而在推理阶段,只需要将模型的权重与lora矩阵的权重进行合并得到一个新的权重进行推理即可。使用lora微调还需要注意选择调整的权重矩阵,通常是选择多头自注意力(q、k、v、o)和前馈神经网络部分中的关键部分引入低秩矩阵即可。

这里给出了lora微调初始化模型的训练方法以及合并权重推理的方法

# 训练``from peft import (`    `PeftModel,`    `TaskType,`    `LoraConfig,`    `get_peft_model``)``model = AutoModel.from_pretrained(model_args.model_name_or_path, config=config, trust_remote_code=True)``config = LoraConfig(r=8,`                    `lora_alpha=16,`                    `target_modules=['query_key_value'],`                    `lora_dropout=0.0,`                    `task_type="CAUSAL_LM",`                    `inference_mode=False,`                    `)``model = get_peft_model(model, config)``   ``# 推理``model = AutoModel.from_pretrained(model_args.model_name_or_path, config=config, trust_remote_code=True)``model = PeftModel.from_pretrained(model, os.path.join(model_args.ptuning_checkpoint))``model = model.merge_and_unload()``model = model.half().cuda()

qlora微调。 qlora是lora的基础上引入了量化过程,主要是对基座模型进行量化到低精度进行存储,然后再使用lora技术进行微调,极大的降低了显存需求,可以让更大的模型在消费级GPU上进行微调。QLORA包含一种低精度存储数据类型为NF4和一种计算数据类型BFloat16。在微调时,qlora权重张量使用时,需要将张量去量化为BFloat16,在16位计算精度下进行矩阵乘法运算。

微调套路

  1. 选择合适的微调方法:全量微调比部分的参数进行训练效果更好,但没有充足的显卡,那么就只能选择部分参数微调方法如:lora微调、qlora微调、ptuning v2等

  2. lora、qlora以及ptuning v2三种方法的效果应以实验为准,在2023 Atecup 赛道三中AI生成新闻检测使用了一次ptuning v2发现效果还不错,甚至比lora效果更强。而对于qlora,最近参加的文本纠错比赛中,相同的超参数下qlora比lora稍强,当然项目中我使用更多的还是lora。

  3. 对于lora的config来讲,我通常是使用rank=8,alpha=16(一般是=r*2),Dropout=0,调节这个可能比较费时间,也可以试试r=16,alpha=32,或者缩小一倍,对于target_modules,通常是使用开源大模型自己推荐的目标层。

  4. 学习率调节,学习率通常是使用5e-5,学习率的调节可以根据任务类型和数据量来放大一倍5e-4,或者缩小5e-6。

  5. Batchsize,没有充足的显卡资源,可以减少bs,调大梯度积累,以空间换时间,在数据量小的情况下,调节bs或者梯度积累或许会使模型得到充分的训练,可能会有略微提升。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

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

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

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

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

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

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

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

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

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

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

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

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

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

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

👉获取方式:

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

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值