ChatGPT等大模型高效调参大法——PEFT库的算法简介

kaggle社区LLM Classification Finetuning 预测用户在一个由大型语言模型(LLMs)驱动的聊天机器人之间的正面交锋中会偏好哪些回应。获得来自聊天机器人竞技场(Chatbot Arena)的对话数据集,其中不同的LLMs对用户的提示生成答案。通过开发一个胜出的机器学习模型,帮助改进聊天机器人与人类的互动方式,并确保它们更好地符合人类的偏好。实际上是进行一个序列的分类。 阅读详情

随着ChatGPT等大模型(Large Language Model)的爆火,而且目前业界已经发现只有当模型的参数量达到100亿规模以上时,才能出现一些在小模型无法得到的涌现能力,比如 in_context learing 和 chain of thougt。深度学习似乎朝着模型越来越大的方向一去不复。

而对于这些通用的大模型如何进行 任务微调呢,或者想增加大模型某方面的能力,会遇到很多的问题。

(1)对于动则百亿级别的参数,如何更高效,低资源的微调大模型呢

(2)当样本量很小的时候,如何微调大模型能得到较好的效果呢

等等等等,为解决上面大模型微调的一些问题,学术界提出了很多方法,下面我介绍huggface 开源的一个高效微调大模型的库PEFT里面实现的四种方法(这里笔者的介绍只基于文本分类任务微调),主要是针对transformer 架构的大模型进行微调,当然repo中有对diffusion模型进行微调的案例。

图片

PEFT

LORA

LORA算法是在 每层 transfomer block 旁边引入一个并行低秩的支路,支路的输入是transfomer block 的输入,

然后将输出和 transfomer block 的输出相加,在固定主pretrian model参数的情况下,用支路去学习特定任务知识,来完成特定任务。同时lora现在已经在stable diffusion 图像个性化定制风格和实例这个领域得到了很好的应用,不用动原模型的参数,就可以为ai作画师注入新的知识。

图片

LORA

lora 微调需要设置两个参数一个是r,即中间层神经元的个数。alpha是一个scale参数。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = peft_type = PeftType.LORA
peft_config = LoraConfig(task_type="SEQ_CLS", inference_mode=False, r=8, lora_alpha=16, lora_dropout=0.1)
lr = 3e-4
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

LORA

PREFIX_TUNING

PREFIX_TUNING算法是根据 下游任务 “前缀指令文本” 的所有层的embeding表示,学习到的前缀指令文本向量可以挖掘大模型的潜力去引导模型完成特定任务。

图片

PREFIX_TUNING

PREFIX_TUNING 微调需要设置一个参数,即 指令文本的长度 num_virtual_tokens,研究表明这个数量一般设置在10-20之间。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.PREFIX_TUNING
peft_config = PrefixTuningConfig(task_type="SEQ_CLS", num_virtual_tokens=20)
lr = 1e-2
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

PREFIX_TUNING

P_TUNING

P_TUNING算法和PREFIX_TUNING的想法很相似,想通过微调"指令文本",让指令文本去挖掘大模型的潜力去完成特定的任务。但是P tuning 只学习 “指令文本” 输入层embeding的的表示。为了增强 "指令文本"的连续性,采用了一个 MLP(LSTM) 的结果去encoding “指令文本”。从微调参数量来看只有 0.65% 比 PREFIX_TUNING 和LORA 这些在所有层都增加参数的方法要少。需要提醒的是这里的指令文本是伪文本,可能就是 unused1, unused2…等,目前源代码里面就是随机初始化的一个embeding.

图片

P_TUNING

图片

P_TUNING微调需要设置2个参数,一个是MLP中间层的参数encoder_hidden_size,第二个依然是 指令文本的长度 num_virtual_tokens。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.P_TUNING
peft_config = PromptEncoderConfig(task_type="SEQ_CLS", num_virtual_tokens=20, encoder_hidden_size=128)
lr = 1e-3
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

P_TUNING

PROMPT_TUNING

PROMPT_TUNING算法和P_TUNING很像,且更简单,就是是根据 下游任务 “指令文本” 输入层embeding的的表示。PROMPT_TUNING没有增加任何的层,直接使用微调指令文本(prompt) 的embeding向量。同时文章提出了目前语言模型微调的最新范式,我感觉这篇的思想和chatgpt指令微调的很像。

就是对不同的任务,我们的输入都是不同的指令(都是自然文本),不同的指令去指导模型完成不同的任务。

摆脱了以前不同的任务需要不同的输入和输出,导致任务之间模型隔离的问题。

从微调参数量来看只有 0.48%,是三种方法中微调参数量最少的一种。并且文章表明随着模型越大,PROMPT_TUNING 的效果几乎能和模型整个微调的效果一样。形成了只是学习一个指令然后去模型中检索某种能力的范式。

图片

PROMPT_TUNING

图片

PROMPT_TUNING

PROMPT_TUNING微调需要设置1个参数, 指令文本的长度 num_virtual_tokens。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.PROMPT_TUNING
peft_config = PromptTuningConfig(task_type="SEQ_CLS", num_virtual_tokens=20)
lr = 1e-3
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

PROMPT_TUNING

结语

从repo的介绍中我们发现直接微调大模型需要耗费大量的计算资源,而直接使用lora 可以在少量GPU的资源情况微调大模型,且能够达到比全量微调差一点的效果,确实很强大。我们可以发现这些PEFT的方法有如下优势。

  1. 少量的计算资源,就能撬动大模型的微调。就能达到不错的效果
  2. 同时PROMPT_TUNING 等方法的指令微调方式和预训练任务的训练方式达成了统一,可以在小样本情况小取得不错的成绩
  3. 采用训练prompt指令,充分挖掘预训练模型潜力的范式也相对来说比较合理

也许未来某一天很多小公司就是采用这些方法去微调一个超大的模型去完成自己的任务。

图片

PEFT

图片

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

大模型高效调参—PEFT库( Parameter-Efficient Fine-Tuning) 大模型高效调参大法——PEFT库( Parameter-Efficient Fine-Tuning) 阅读详情

相关推荐

《Python基础教程》专栏总结篇

今天给大家带来的文章是《Python基础教程》专栏总结篇,希望能对同学们有所帮助。 文章目录 1. 背景 2. 专栏亮点 3. 你的收获 4. 详细目录

weixin_43178406的博客 73万+

PEFT 之 LoRA-Tuning

LoRA微调在bloomz模型中的实现。

Fairrry_er的博客 1373

计算模型中的可训练参数数量:print_trainable_parameters【参考LoRA】

【代码】计算模型中的可训练参数数量:print_trainable_parameters【参考LoRA】

u013250861的博客 2334

Hugging Face PEFT 调优实战附代码

Hugging Face PEFT调优实战附代码

sinat_39483965的博客 4020

CUBEMX ADC 单/多通道+DMA

本文使用的是STM3F103C8T6 Cubemx进行单/多通道DMA配置。

记录学习 1403

bcftools实战指南:从VCF文件处理到变异分析全流程解析

在基因组数据分析中,VCF(Variant Call Format)文件是存储基因序列变异信息的标准格式,广泛应用于群体遗传学和生物信息学研究。其核心原理是通过结构化文本记录SNP、INDEL等变异位点的基因型、质量值和注释信息。掌握高效处理VCF文件的技术,对于提升变异检测、数据清洗和下游分析的工作流效率具有重要价值。在生物信息学工具生态中,bcftools作为处理VCF/BCF文件的瑞士军刀,通过模块化设计实现了数据查询、过滤、统计和格式转换等核心功能。其流式处理架构支持管道化操作,能有效应对海量基因组

weixin_29081703的博客 322

全面解读大模型LLM的微调

在快速发展的人工智能领域中,有效地利用大型语言模型(LLM)变得越来越重要。然而,有许多不同的方式可以使用大型语言模型,这可能会让我们感到困惑。实际上,可以使用预训练的大型语言模型进行新任务的上下文学习并进行微调。

Y525698136的博客 1130

海量数据 / Vastbase 深度研究笔记 v3.1

v3.1 重点修订:在 v3.0 审慎版基础上,新增“2026 新变量”章节,纳入 7 亿级定增、HTAP / 多模态时序数据库、G100 V3.0 Build 8 的 3CM+2DN 高可用补强、pgvector / V100 / AI 多模叙事,以及集成服务基因与标准软件 ARR 的拉扯。核心关注点是:Vastbase 能否把 openGauss 生态红利、数据库产品矩阵和行业交付能力,转化为可持续、可复购、低边际成本的标准软件收入。海量不是没有业务基本盘,也不是马上失血致死;客户越多,服务债越大。

喝醉酒的小白 562

PEFT汇总

peft梳理

m0_58186573的博客 834

【VisualStdio】手把手教你做一个上位机(1)控件设计布局

网上有很多形形色色的制作上位机教程,有些写的挺好的,但是过于单调。

m0_73409202的博客 5435

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 408

新手第1次走通LLM本地微调(2)

接着说后来遇到的新问题:这个错误表明程序在加载模型时,无法找到模型权重文件。这可能是因为模型文件夹路径不正确,或者模型文件没有正确下载或传输。(后记:一般第一次下载模型都会不完整,不知道咋回事,所以我每回都会下载同一个模型至少2遍orz)AI建议指定这个我倒还没有试过。这个错误表明我在使用Trainer类进行训练时,启用了但该选项在数据并行(Data Parallelism, DP)模式下不被支持。Hugging Face 的Trainer默认使用 DP 模式进行训练。解决方法:不需要调试。

Luo_Daimeng的博客 2030

COCO数据集缺失文件补全方法

本文代码是以目标检测(object detection)和实例分割(instance segmentation)任务的标签文件为例,即文件。其他任务的标签文件内容略有不同,但是图片来源表示字段完全相同,因此代码可通用。另外如果是非2017版本COCO应该也通用。msgspec是一个高性能的序列化和验证库,支持 JSON、MessagePack、YAML 和 TOML 等多种格式。高性能:在常见协议的编码/解码中表现出色,通常比其他库快10-80倍。零成本的模式验证。

qq_46396470的博客 1995

【自然语言处理】大模型高效微调:PEFT 使用案例

【自然语言处理】大模型高效微调:PEFT 使用案例

wzk4869的博客 6926

STC15W204S最小系统开发指南:从串口通讯到自动热加载全流程

本文详细介绍了STC15W204S最小系统的完整开发流程。从芯片资源解析、最小系统搭建、串口通讯驱动编写(使用Timer2生成波特率),到实现基于魔术值触发的自动热加载功能,并最终集成Keil与STC-ISP软件,构建高效的自动化开发工作流,显著提升嵌入式调试效率。

a1b2c的博客 391

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

孟孟单单的博客 7万+

基于prefix tuning + Bert的标题党分类器

传统的fine-tuning是在大规模预训练语言模型(如Bert、GPT2等)上完成的, 针对不同的下游任务, 需要保存不同的模型参数, 代价比较高,解决这个问题的一种自然方法是轻量微调(lightweight fine-tunning),它冻结了大部分预训练参数,并用小的可训练模块来增强模型,比如在预先训练的语言模型层之间插入额外的特定任务层。适配器微调(Adapter-tunning)在自然语言理解和生成基准测试上具有很好的性能,通过微调,仅添加约2-4%的任务特定参数,就可以获得类似的性能。

qq_44193969的博客 2455

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

如何微调 Llama 3 进行序列分类?

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学.针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。大型语言模型以其文本生成能力而闻名。在预训练期间,它们接受了数百万个标记的训练。这将有助于大型语言模型理解英文文本并在生成期间生成有意义的完整标记。自然语言处理中的另一个常见任务是序列分类任务。在此,我们将给定的序列分类为不同的类别。

2201_75499313的博客 2592

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

用LLM做文本分类,微调选base还是chat

使用Qwen2ForSequenceClassification实现文本分类任务。

bagell的博客 947

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Py之peft:peft(一款最先进的参数高效微调方法库)的简介、安装、使用方法之详细攻略

​ Py之peft:peft(一款最先进的参数高效微调方法库)的简介、安装、使用方法之详细攻略 目录 peft的简介 peft的安装 peft的使用方法 peft的简介 参数有效微调(PEFT)方法使预训练语言模型(PLMs)能够有效地适应各种下游应用,而无需微调模型的所有参数。对大规模plm进行微调的成本往往高得令人望而却步。在这方面,PEFT方法只微调了少量(额外的)模型参数,从而大大降低了计算和存储成本。最近最先进的PEFT

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

大模型微调技术

p-tuning v2 在多种任务上下进行微调,之后对于不同的任务如token classification与sentence classification添加了随机初始化的任务头(AutoModelForTokenClassification、AutoModelForSequenceClassification),而非使用自然语言的方式,可以说V2是集大成者。手动尝试最优的提示无异于大海捞针,于是便有了自动离散提示搜索的方法(作图),但提示是离散的,神经网络是连续的,所以寻找的最优提示可能是次优的。

宁少的博客 1539

【无标题】

同时,基于该预训练模型训练的分类任务使用了中文文本,因此所加载的预训练模型也应为中文预训练模型。在实际应用中,常常需要根据具体情况进行微调,例如调整batch_size、学习率、优化器等参数,或者在模型中添加额外的层和损失函数,以获取更好的效果。使用相应的深度学习框架,例如PyTorch或TensorFlow,加载ALBERT模型,并根据需要对模型进行微调或者冻结预训练模型的权重进行fine-tuning。参数,以指定文本分类的数量。对训练集进行训练,使用验证集进行模型调优,最终在测试集上进行模型评估。

dsbss的博客 499

大模型高效微调工具 Hugging Face PEFT

本文主要介绍了PEFT库的内容、与Transformers的集成、核心知识点如AutoPeftModels、PeftConfig、PeftType和TaskType,以及LoRA在文本生成和语音识别任务中的实战应用。

Whitney66的博客 3167

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2

qq_44665283的博客 1万+

大模型训练之微调篇

介绍了大模型训练的微调方法,包括prompt tuning、prefix tuning、LoRA、p-tuning和AdaLoRA等。介绍了使用deepspeed和LoRA进行大模型训练的相关代码。给出了petals的介绍,它可以将模型划分为多个块,每个用户的机器负责其中一块,分摊了计算压力。

人工智能讲师分享前沿技术 1547

LoRA: Low-Rank Adaptation of Large Language Models低秩自适应

通过矩阵分解降低LLM中的模型参数

emphmeral的博客 6282
上一篇: 多模态大模型:LLaVA-OneVision 轻松实现视觉任务迁移 | 单图、多图和视频理解
下一篇: 敲重点!最全大模型训练合集!
AI程序猿人
博客等级 码龄3年 6517粉丝 561原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值