PEFT - 安装及简单使用

LLM、AIGC、RAG 开发交流裙:377891973


文章目录

    • 一、关于 PEFT
    • 二、安装
      • 1、使用 PyPI 安装
      • 2、使用源码安装
    • 三、快速开始
      • 1、训练
      • 2、保存模型
      • 3、推理
      • 4、后续步骤


本文翻译整理自:https://huggingface.co/docs/peft/index


一、关于 PEFT

🤗PEFT(Parameter-Efficient Fine-Tuning 参数高效微调)是一个库,用于有效地将大型预训练模型适应各种目标端应用,而无需微调模型的所有参数,因为它成本过高。
PEFT方法仅微调少量(额外)模型参数——显着降低计算和存储成本——同时产生与完全微调模型相当的性能。
这使得在消费硬件上训练和存储大型语言模型(LLM)更容易。

PEFT与Transformer、扩散器和加速库集成,提供了一种更快、更简单的方法来加载、训练和使用大型模型进行推理。


二、安装

PEFT 在 Python3.8+ 上经过测试。

🤗PEFT可从PyPI和GitHub上获得:


1、使用 PyPI 安装

要从PyPI安装🤗PEFT:

pip install peft

2、使用源码安装

每天都会添加尚未发布的新功能,这也意味着可能存在一些错误。
要试用它们,请从GitHub存储库安装:

pip install git+https://github.com/huggingface/peft

如果您正在努力为库做出贡献,或者希望使用源码并观看直播 结果当您运行代码时,可以从本地克隆的版本安装可编辑的版本 存储库:

git clone https://github.com/huggingface/peft
cd peft
pip install -e .

三、快速开始

https://huggingface.co/docs/peft/quicktour

PEFT提供了参数有效的方法 来微调大型预训练模型。
传统的范式是为每个下游任务微调模型的所有参数,但是由于当今模型中的参数数量巨大,这变得非常昂贵和不切实际。
相反,训练更少数量的提示参数 或 使用低秩自适应(LoRA)等重新参数化方法 来减少可训练参数的数量会更有效。

本快速导览将向您展示PEFT的主要功能,以及如何在消费设备上通常无法访问的大型模型上训练或运行推理。


1、训练

每个PEFT方法都由一个PeftConfig类定义,该类存储了构建PeftModel的所有重要参数。
例如,要使用LoRA进行训练,请加载并创建一个LoraConfig类并指定以下参数:

  • task_type:要训练的任务(在这种情况下sequence-to-sequence语言模型化)
  • inference_mode无论你是否使用模型进行推理
  • r:低秩矩阵的维度
  • lora_alpha:低秩矩阵的缩放因子
  • lora_dropout:LoRA层的暂退法概率

from peft import LoraConfig, TaskType

peft_config = LoraConfig(task_type=TaskType.SEQ_2_SEQ_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1)

请参阅LoraConfig参考,了解有关您可以调整的其他参数的更多详细信息,例如要定位的模块或偏置类型。

设置LoraConfig后,使用get_peft_model()函数创建一个PeftModel。
它需要一个基本模型 —— 您可以从Transformer库中加载,LoraConfig 包含 如何配置模型 以使用LoRA进行训练的参数。


加载要微调的基本模型。

from transformers import AutoModelForSeq2SeqLM

model = AutoModelForSeq2SeqLM.from_pretrained("bigscience/mt0-large")

使用get_peft_model() 函数包装基本模型和 peft_config 以创建PeftModel。
要了解模型中可训练参数的数量,请使用print_trainable_parameters方法。

from peft import get_peft_model

model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
"output: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282"

在 bigscience/mt0-large’s 1.2B 参数中,您只训练了其中的 0.19%!

就是这样🎉!


现在你可以用 Transformer Trainer、Accelerate 或任何自定义PyTorch 训练循环来训练模型。

例如,要使用Trainer类进行训练,请使用一些训练超参数设置一个TrainingArguments类。

training_args = TrainingArguments(
    output_dir="your-name/bigscience/mt0-large-lora",
    learning_rate=1e-3,
    per_device_train_batch_size=32,
    per_device_eval_batch_size=32,
    num_train_epochs=2,
    weight_decay=0.01,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
)

将模型、训练参数、数据集、标记器和任何其他必要的组件 传递给Trainer,并调用 train 开始训练。

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"],
    tokenizer=tokenizer,
    data_collator=data_collator,
    compute_metrics=compute_metrics,
)

trainer.train()

2、保存模型

模型完成训练后,可以使用save_pretrained函数将模型保存到目录中。

model.save_pretrained("output_dir")

您还可以使用push_to_hub函数将模型保存到 Hub (确保您已登录到您的拥抱脸帐户)。

from huggingface_hub import notebook_login

notebook_login()
model.push_to_hub("your-name/bigscience/mt0-large-lora")

这两种方法都只保存经过训练的额外PEFT权重,这意味着存储、传输和加载效率极高。

例如,这个用LoRA训练的facebook/opt-350m模型只包含两个文件:adapter_config.jsonadapter_model.safetensors
adapter_model.safetensors 文件只有6.3MB!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

存储在 Hub 上的350m模型的适配器权重只有约6MB,而模型权重的完整大小可以约700MB。


3、推理

查看AutoPeftModelAPI参考以获取可用AutoPeftModel类的完整列表。

使用AutoPeftModel类和from_pretrained方法轻松加载任何经过PEFT训练的推理模型:

from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch

model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")

model = model.to("cuda")
model.eval()
inputs = tokenizer("Preheat the oven to 350 degrees and place the cookie dough", return_tensors="pt")

outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
print(tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True)[0])

"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."

对于AutoPeftModelFor类未明确支持的其他任务(例如自动语音识别),您仍然可以使用基础 AutoPeftModel类来加载任务的模型。

from peft import AutoPeftModel

model = AutoPeftModel.from_pretrained("smangrul/openai-whisper-large-v2-LORA-colab")

4、后续步骤

现在您已经了解了如何使用其中一种PEFT方法训练模型,我们鼓励您尝试一些其他方法,例如 prompt tuning。
这些步骤与快速导览中显示的步骤非常相似:

  1. 准备一个PeftConfig用于PEFT方法
  2. 使用get_peft_model()方法从配置和基本模型创建PeftModel

然后你可以随心所欲地训练它!要加载PEFT模型进行推理,可以使用AutoPeftModel类。

如果您有兴趣为特定任务(如语义分割、多语言自动语音识别、DreamBooth、代币分类等)使用另一种PEFT方法训练模型,请随意查看任务指南。


伊织 2024-07-05

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端基础:JavaScript(篇一)

目录 JavaScript概述 JavaScript历史: 须知: 基本语法 变量 代码 运行 数据类型 1、数值型(number): 代码 运行 2、布尔型(boolean): 代码 运行 3、字符串型: 代码 运行 4、 undefined类型 代码…

Vue 邮箱登录界面

功能 模拟了纯前端的邮箱登录逻辑 还没有连接后端的发送邮件的服务 后续计划,再做一个邮箱、密码登录的界面 然后把这两个一块连接上后端 技术介绍 主要介绍绘制图形人机验证乃个 使用的是canvas,在源码里就有 界面控制主要就是用 表格、表单&#x…

Cookie的默认存储路径以及后端如何设置

问题场景 最近在写一个前后端分离的项目,需要跨域,前端开发同学遇到一个问题一直报错,本质上就是后端返回的cookie中的sessionID在前端发送http请求时无法被请求自动携带,每次htttpRequest都被后端识别为一个新的session&#xf…

Java传引用问题

本文将介绍 Java 中的引用传递,包括其定义、实现方式、通过引用修改原来指向的内容和通过引用修改当前引用的指向的区别 目录 1、引用传递的概念 2、引用传递的实现方式 3、传引用会发生的两种情况: 通过引用修改当前引用的指向 通过引用修改原来指…

IDEA 编译单个Java文件

文章目录 一、class文件的生成位置二、编译单个文件编译项目报错Error:java: 无效的源发行版: 8 一、class文件的生成位置 file->project structure->Modules 二、编译单个文件 选中文件,点击recompile 编译项目报错 Error:java: 无效的源发行版: 8 Fi…

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力,但是如何让它完美地完成一个大的问题,仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示(Prompt)。对于一个复杂的应用场景,编写一套完整的,准确无误的提示&am…

【技术支持】console控制台输出美化(腾讯文档)

function style(color, size 12){return display:inline-block;background-color:${color};color:#fff;padding:2px 4px;font-size:${size}px; } const dataVersion 3.0.0 const codeVersion 3.0.28657969 const branchVersion release-20240617-f98487dc //注意此处%c后面…

Amesim应用篇-信号传递

前言 在Amesim中常见的信号传递是通过信号线连接,针对简单的模型通过信号线连接还可以是信号线清晰规整,方便查看。如果模型较复杂,传递信号的元件较多时,此时再继续使用信号线进行信号传递,可能会使草图界面看起来杂…

vxe-table合并行数据;element-plus的el-table动态合并行

文章目录 一、vxe-table合并行数据1.代码 二、使用element-plus的el-table动态合并行2.代码 注意&#xff1a;const fields 是要合并的字段 一、vxe-table合并行数据 1.代码 <vxe-tableborderresizableheight"500":scroll-y"{enabled: false}":span-m…

ASUS/华硕枪神4 G532L G732L系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;Windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

【HALCON】如何实现hw窗口自适应相机拍照成像的大小

前言 在开发一个喷码检测软件的时候碰到相机成像和hw窗体的大小不一致&#xff0c;hw太小显示不完全成像的图片&#xff0c;这使得成像不均匀&#xff0c;现场辨别起来比较不直观&#xff0c;因此需要对其进行一个调整。 解决 省略掉读取图片的环节&#xff0c;我们只需要将…

BSI 第七届万物互联智慧高峰论坛:主题:拥抱AI时代,标准赋能组织实现可持续发展

BSI 第七届万物互联智慧高峰论坛&#xff1a;主题&#xff1a;拥抱AI时代&#xff0c;标准赋能组织实现可持续发展 主要收到 BSI 温女士的邀请参加的本次论坛。还是学到的很多 。 在科技日新月异的时代背景下&#xff0c;BSI 第七届万物互联智慧高峰论坛于[时间&#xff1a;6…

mac安装docker

1、首先打开docker官网 https://docs.docker.com/engine/install/ 2、下载好后安装到app应用 3、安装好环境变量 #docker echo export PATH"/usr/local/Cellar/docker/20.10.11/bin:$PATH" >> .bash_profile

百度云智能媒体内容分析一体机(MCA)建设

导读 &#xff1a;本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂&#xff0c;采用人工的方式对视频进行分析处理&#xff0c;面临着效率低、成本高的困难。于是&#xff0c;MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术&#xff0c;为用户提供音视…

不错的用户需求访谈方法

不错的用户需求访谈方法&#xff0c;可以用如下的矩阵&#xff0c;用来引导用户访谈&#xff1a;

vue实现搜索文章关键字,滑到指定位置并且高亮

1、输入搜索条件&#xff0c;点击搜索按钮 2、滑到定位到指定的搜索条件。 <template><div><div class"search_form"><el-inputv-model"searchVal"placeholder"请输入关键字查询"clearablesize"small"style&quo…

Go源码--channel源码解读

简介 channel顾名思义就是channel的意思&#xff0c;主要用来在协程之间传递数据&#xff0c;所以是并发安全的。其实现原理&#xff0c;其实就是一个共享内存再加上锁&#xff0c;底层阻塞机制使用的是GMP模型。可见 GMP模型就是那个道&#xff0c;道生一,一生二,二生三,三生…

2024.8月28号杭州电商博览会,在杭州国博举办

2024杭州电商新渠道博览会暨集脉电商节 时间&#xff1a;2024年08月28-30日 地点&#xff1a;杭州国际博览中心&#xff08;G20&#xff09; 主办单位&#xff1a;浙江集脉展览有限公司、杭州华维展览有限公司 承办单位&#xff1a;浙江集脉展览有限公司 报名参展&#xf…

Navicat和MySQL的安装

1、下载 Navicat Navicat 官网&#xff1a;www.navicat.com.cn/ 在产品中可以看到很多的产品&#xff0c;点击免费试用 Navicat Premium 即可&#xff0c;是一套多连数据库开发工具&#xff0c;其他的只能连接单一类型数据库 点击试用 选择系统直接下载 二、安装 Navicat 安…

03:EDA的进阶使用

使用EDA设计一个38译码器电路和245放大电路 1、38译码器1.1、查看74HC138芯片数据1.2、电路设计 2、245放大电路2.1、查看数据手册2.2、设计电路 3、绘制PCB3.1、导入3.2、放置3.3、飞线3.4、特殊方式连接GND3.5、泪滴3.6、配置丝印和划分区域3.7、添加typc接口供电 1、38译码器…