LLM | 一文了解大语言模型中的参数高效微调(PEFT)

news2025/2/26 1:38:55

Parameter Efficient Fine Tuning(PEFT)也就是参数高效微调,是一种用于微调大型语言模型 (LLM) 的方法,与传统方法相比,它有效地降低了计算和内存需求。PEFT仅对模型参数的一小部分进行微调,同时冻结大部分预训练网络。这种策略减轻了大语言模型灾难性的遗忘,并显著降低了计算和存储成本。本博客主要内容如下

1.PEFT方法

2.训练、微调和提示工程:主要区别

3.LLM使用PEFT进行微调的过程

4.实例:使用参数高效微调(PEFT)微调预训练的语言模型,以进行情感分析

总结

1.PEFT方法

 PEFT方法在确定模型的哪些组件是可训练的方法上有所不同。有的会优先训练原始模型参数的选定部分。有的人则在不修改原始结构的情况下集成和训练较小的附加组件,例如适配器层。

  • 任务引导式提示调优:该技术利用特定于任务的提示来指导 LLM 的输出,无需为特定任务重新训练整个模型。
  • 低秩适应 (LoRA):Low-Rank Adaptation 通过使用低秩矩阵近似 LLM 的参数,LoRA 减少了微调参数的数量,从而提高了 LLM 的性能。#LoRA论文【6】
  • 适配器:这些小的专用层可以添加到 LLM 中以进行任务调整,从而提供灵活性和性能改进。
  • 与任务相关的前缀调整:根据与手头任务相关的代表性前缀微调 LLM,可以提高性能和任务适应性。

2.训练、微调和提示工程:主要区别

在深入研究 PEFT 之前,让我们先了解一下训练、微调和提示工程之间的区别。这些术语通常可以互换使用,但在 LLM 的上下文中具有特定的含义。

  • 训练:从头开始创建模型时,会对其进行训练。这涉及调整模型的所有系数或权重,以学习数据中的模式和关系。这就像教模型语言的基础知识一样。
  • 微调:微调假设模型已经对语言有基本的了解(通过训练实现)。它涉及进行有针对性的调整,使模型适应特定的任务或领域。可以把它想象成为特定工作(例如回答问题或生成文本)完善受过良好教育的模型。
  • 提示工程:提示工程涉及制作输入提示或问题,以指导 LLM 提供所需的输出。这是关于定制与模型交互的方式,以获得想要的结果。

3.LLM使用PEFT进行微调的过程

现在,让我们将注意力转移到PEFT的实际应用上。以下是使用 PEFT 进行微调所涉及的步骤:

  • 数据准备:首先,以适合特定任务的方式构建数据集。定义输入和所需的输出。
  • 库设置:安装必要的库,如 HuggingFace Transformers、Datasets、BitsandBytes 和 WandB,以监控训练进度。
  • 模型:选择要微调的 LLM 模型。
  • PEFT配置:配置 PEFT 参数,包括层的选择和 LoRA 中的“R”值。这些选择将确定您计划修改的系数子集。
  • 量化:确定要应用的量化级别,在内存效率与可接受的错误率之间取得平衡。
  • 训练参数:定义训练参数,例如批量大小、优化器、学习率调度器和微调过程的检查点。
  • 微调:将 HuggingFace Trainer 与您的 PEFT 配置一起使用,以微调您的 LLM。使用 WandB 等库监控训练进度。
  • 验证:密切关注训练和验证损失,以确保模型不会过度拟合。
  • 检查点:如果需要,保存检查点以从特定点恢复训练。

***微调 LLM,尤其是使用 PEFT,是在高效参数修改和维护模型性能之间取得微妙的平衡***

语言模型和微调是自然语言处理领域的强大工具。PEFT技术与LoRA和量化等参数效率策略相结合,使我们能够有效地充分利用这些模型。

4.实例:使用参数高效微调(PEFT)微调预训练的语言模型,以进行情感分析

使用 TextClassificationPipeline 在 IMDb 数据集上微调预训练的 BERT 模型,以进行情感分析。

import torch
from transformers import BertTokenizer, BertForSequenceClassification, AdamW, pipeline
from datasets import load_dataset

# 加载imdb数据集
dataset = load_dataset("imdb")

# 加载Bert预训练模型和tokenizer
model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)  # Binary sentiment analysis

# Tokenize the dataset
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_dataset = dataset.map(tokenize_function, batched=True)

# 划分数据集的训练集和测试集
train_dataset, val_dataset = tokenized_dataset["train"], tokenized_dataset["test"].train_test_split(test_size=0.1)

# 超参数和数据集配置
learning_rate = 2e-5
batch_size = 16
num_epochs = 3

# 确定优化器
optimizer = AdamW(model.parameters(), lr=learning_rate)

# 利用PEFT创建一个微调类
def fine_tune(model, train_dataset, optimizer, num_epochs, batch_size):
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model.to(device)

    for epoch in range(num_epochs):
        total_loss = 0
        model.train()

        for i in range(0, len(train_dataset), batch_size):
            batch = train_dataset[i:i+batch_size]
            input_ids = torch.tensor(batch["input_ids"]).to(device)
            attention_mask = torch.tensor(batch["attention_mask"]).to(device)
            labels = torch.tensor(batch["label"]).to(device)

            optimizer.zero_grad()
            outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
            loss = outputs.loss
            loss.backward()
            optimizer.step()
            total_loss += loss.item()

        print(f"Epoch: {epoch+1}/{num_epochs}, Average Loss: {total_loss / len(train_dataset)}")

# 利用PEFT进行微调
fine_tune(model, train_dataset, optimizer, num_epochs, batch_size)

# 保存微调模型
output_dir = "fine_tuned_model/"
model.save_pretrained(output_dir)
tokenizer.save_pretrained(output_dir)

# 加载微调模型进行文本分类
classifier = pipeline("text-classification", model=output_dir, tokenizer=output_dir)

# 测试
sample_text = "This movie was fantastic! I loved every bit of it."
result = classifier(sample_text)
print(result)

总结

PEFT(参数高效微调)通过有针对性的系数调整来减少大型语言模型的计算和内存需求。

LoRA(低秩采用)选择重要系数,而量化通过将高精度系数转换为较低精度的形式来减少内存使用,这两者在 PEFT 中都至关重要。

使用 PEFT 微调 LLM 涉及结构化数据准备、库设置、模型选择、PEFT 配置、量化选择以及对训练和验证损失的监控,以平衡效率和模型性能。

 

参考文献

【1】What is Parameter-Efficient Fine-Tuning (PEFT) of LLMs? - Hopsworks

【2】 Parameter-Efficient Fine-Tuning using 🤗 PEFT (huggingface.co)

【3】 LLM Fine Tuning with PEFT Techniques (analyticsvidhya.com)

【4】Parameter-Efficient Fine-Tuning (PEFT): a novel approach for fine-tuning LLMs | by Tales Matos | Medium 【5】Full Fine-Tuning, PEFT, Prompt Engineering, or RAG? (deci.ai)

【6】 2106.09685.pdf (arxiv.org)

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

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

相关文章

9款热门API接口分享,值得收藏!

电商API接口 干货分享 开始 “ API是什么? API的主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象…

使用PCSS实现的实时阴影效果

PCSS的技术可以使得阴影呈现出近硬远软的效果,并且能够实时实现。 其核心理念是通过模拟光源的面积来产生更自然、更柔和的阴影边缘。 具体步骤: 1、生成shadowmap 2、在进行阴影的比较时候进行平均,并非之前的shadow map 或者之后完全的阴影…

Xshell全局去除提示音

使用Xshell的时候经常会按TAB或者一些操作指令的时候的时候听到提示音,非常的烦 通常来说在Xshell中可以单独修改每一个会话的属性,将提示音关闭,但是新增的会话依然带有提示音,还得一个个的关闭,非常麻烦,…

【risc-v】易灵思efinix FPGA riscv 时钟配置的一些总结

系列文章目录 分享一些fpga内使用riscv软核的经验,共大家参考。后续内容比较多,会做成一个系列。 本系列会覆盖以下FPGA厂商 易灵思 efinix 赛灵思 xilinx 阿尔特拉 Altera 本文内容隶属于【易灵思efinix】系列。 文章目录 系列文章目录前言一、pan…

spring boot 事件机制

目录 概述实践监听spring boot ready事件代码 源码初始化流程调用流程 结束 概述 spring boot 版本为 2.7.17 。 整体看一下spring及spring boot 相关事件。 根据下文所给的源码关键处,打上断点,可以进行快速调试。降低源码阅读难度。 实践 spring…

EasyRecovery易恢复2024最新免费版电脑数据恢复软件功能介绍

EasyRecovery从(易恢复2024)支持恢复不同存储介质数据,在Windows中恢复受损和删除文件,以及能检索数据格式化或损坏卷,甚至还可以从初始化磁盘。同时,你只需要最简单的操作就可以恢复数据文件,如&#xff1…

Ubuntu常用必会Nslookup指令

文章目录 Nslookup是什么?Ubuntu Nslookup工具安装方法Nslookup工具语法常用Nslookup指令为什么必会Nslookup指令Nslookup的平行替代工具Nslookup和ping的区别推荐阅读 Nslookup是什么? 它是一个很小但功能非常强大的网络管理命令行软件。Nslookup命令可…

音频处理关键知识点

1 引言 现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫模拟信号。模拟信号需要进行数字化以后才能在计算机中使用。 目前我们在计算机上进行音频播放都需要依赖于音频文件。音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号…

POJ 3734 Blocks 动态规划(矩阵的幂)

一、题目大意 我们要给排成一行的区块涂颜色,可以选择红、绿、蓝、黄四种,要求红和绿的块都必须是偶数个,求出最终的涂色方式,对10007取余。 二、解题思路 我们设三个数列A,B和C: 1、A代表红色和绿色都…

SSL证书价格一年多少钱?

SSL证书价格一年多少钱并没有一个固定的答案,它取决于多种因素,包括您选择的证书类型、品牌、提供商以及您希望保护的域名数量等。 首先,我们需要了解SSL证书的种类。根据品牌和类型,SSL证书大致可分为域名认证SSL证书&#xff08…

代码随想录算法训练营第四十二天 _ 动态规划_01背包问题。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 二维数组处理01背包问题 听起来…

成品短视频app源码开发,你需要知道的最新动向

随着移动互联网的快速发展,短视频行业正迅速崛起。越来越多的创业者和开发者将目光投向了成品短视频app源码开发领域。下面我们将深入探讨这一领域的最新动向,带您了解成品短视频app源码开发的趋势与前景 成品短视频app源码开发的前景和机遇 短视频内容…

Latex正文引用图片编号,防止某张图片删除或调整导致正文序号对应错误

一、背景 Latex真的是非常好用的论文排版工具,虽然不像word一样是“所见即所得”的可视化方式,但完全不用管格式,包括图片的排版,文字的缩进等等。这在word里调整起来真的是非常麻烦,特别是某个段落、图片修改后&…

最热门超声波清洗机有哪些?热门超声波清洗机推荐

眼镜党朋友第一次接触超声波清洗机应该是在眼镜店的时候,把眼镜拿给老板他几分钟就搞定眼镜清洗的,是的没有错,那个机器叫超声波清洗机,不需要自己动手就可把眼镜清洗干净的一款智能清洁工具,它的出现可以说是方便了我…

关于svn如何上传一个完整的项目

注意:请一定要按照该步骤进行操作,请上传新项目时将项目名称进行规范命名 例如原始文件是arrange_v2 将此项目需要注入新的医院 则命名为 arrange_某医院名称_门诊或者医技或者药房_v2 重新命名文件夹名称快捷键 (F12) 一 &…

中断方式的数据接收2

Echo实验 回忆之前的实验因为数据处理的过程可以瞬间完成所以可以把数据处理的操作放在中断服务函数中执行 但是数据处理要是时间过长就将数据缓存处理 当使用中断方式接收数据的时候 一般有两种方式 数据处理的时间较短可放在中断服务函数内处理(就地处理&#…

北斗如何保障能源安全?中海达再赴石油石化盛会推广新技术

11月29日-30日,第三届中国石油石化网络安全应用研讨会暨北斗导航能源安全技术交流会在深圳召开。本次活动主题为“石油石化网络安全,新时代、新征程”,由中国石油学会北斗导航与通信专业委员会、中石油、国家管网等单位联合举办。中海达受邀携…

Mac安装Linux虚拟机(M3)

环境:先贴出本人的电脑配置 一、选择虚拟机软件、下载并安装 比较常用的有VMware Fution、VirtualBox、Paralles Desktop等,我选择了Paralles Desktop(买电脑增了一年的免费使用😄)从官网下载试用就行,之前…

CSS 绝对定位问题和粘性定位介绍

目录 1,绝对定位问题1,绝对定位元素的特性2,初始包含块问题 2,粘性定位注意点: 1,绝对定位问题 1,绝对定位元素的特性 display 默认为 block。所以行内元素设置绝对定位后可直接设置宽高。脱离…

53.redis分布式缓存

目录 一、单机安装Redis。 二、Redis主从集群。 2.1.集群结构 2.2.准备实例和配置 2.3.启动 2.4.开启主从关系 2.5.测试 三、搭建哨兵集群。 3.1.集群结构 3.2.准备实例和配置 3.3.启动 3.4.测试 四、搭建分片集群。 4.1.集群结构 4.2.准备实例和配置 4.3.启动…