PEFT - 安装及简单使用

news2024/10/5 17:24:02

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

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

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

相关文章

关于如何做好淘汰 IT 资产数据安全销毁工作的思考 文件销毁 硬盘销毁 数据销毁 物料销毁 文件粉碎

在当今数字化时代,企业的 IT 资产不断更新换代,淘汰的 IT 资产中往往存储着大量的敏感数据。如何确保这些数据在资产淘汰过程中被安全销毁,成为了企业面临的重要挑战。以下是对如何做好淘汰 IT 资产数据安全销毁工作的一些思考。 一、明确数…

51单片机STC89C52RC——14.1 直流电机调速

目录 目的/效果 1:电机转速同步LED呼吸灯 2 通过独立按键 控制直流电机转速。 一,STC单片机模块 二,直流电机 2.1 简介 2.2 驱动电路 2.2.1 大功率器件直接驱动 2.2.2 H桥驱动 正转 反转 2.2.3 ULN2003D 引脚、电路 2.3 PWM&…

【C++】 解决 C++ 语言报错:Segmentation Fault

文章目录 引言 段错误(Segmentation Fault)是 C 编程中常见且令人头疼的错误之一。段错误通常发生在程序试图访问未被允许的内存区域时,导致程序崩溃。本文将深入探讨段错误的产生原因、检测方法及其预防和解决方案,帮助开发者在…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力,不仅能够实现远程操控开关电源,部分高端型号更是集成了电量统计与自动化操作功能,为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价,因版本差异可能有所不同。…

tongweb+ths6011测试websocket(by lqw)

本次使用的tongweb版本7049m4,测试包ws_example.war(在tongweb安装目录的samples/websocket下),ths版本6011 首先在tongweb控制台部署一下ws_example.war,部署后测试是否能访问: 然後ths上的httpserver.conf的參考配…

如何用SRM管理供应商,轻松又高效?

在企业运营的日常里,你是否常常为那些繁杂的供应商信息而头疼?每当项目紧急需要某个物料时,你是否会为了寻找可靠的供应商而焦头烂额?更别提那些层出不穷的交货延期、质量问题,以及难以追踪的合同条款了。这些问题&…

无人机有哪些关键技术?

一、控制技术 无人机的核心还是在控制上,飞控系统的可靠性、稳定性及可扩展性是其中重要的指标。可靠性上,除了器件选型之外,目前主要靠多余度来增加;稳定性主要体现在多场景下仍能保持良好的工作状态,主要靠算法来进…

一对一服务,定制化小程序:NetFarmer助力企业精准触达用户

在当今这个日新月异的数字化时代,小程序以其独特的魅力和广泛的应用场景,正逐步成为企业出海战略中的璀璨明星。NetFarmer,作为业界领先的数字化出海服务商,不仅深谙HubSpot营销自动化的精髓,更在小程序领域展现了卓越…

AlmaTech股份有限公司如何通过有效的营销本地化解锁全球市场

在当今全球化经济中,企业必须调整营销策略,以引起不同地区不同受众的共鸣。营销本地化,包括定制营销材料以满足各种市场的文化、语言和监管要求,对于实现这一目标至关重要。本案例研究探讨了领先的电子商务公司AlmaTech股份有限公…

C++基于协同过滤算法的超市外卖小程序-计算机毕业设计源码62482

摘要 随着社会生活节奏加快和消费习惯的变化,外卖服务成为人们日常生活中不可或缺的一部分。超市外卖作为新兴业态备受关注,然而传统外卖平台在推荐精准度和用户体验方面存在挑战。 本研究旨在基于协同过滤算法,结合C语言和MySQL数据库&#…

剪辑抽帧技巧有哪些 剪辑抽帧怎么做视频 剪辑抽帧补帧怎么操作 剪辑抽帧有什么用 视频剪辑哪个软件好用在哪里学

打破视频节奏,让作品告别平庸。抽帧剪辑可以改变视频叙事节奏,人为制造冲突、转折、卡顿的效果。这种剪辑方式,不仅可以推进剧情发展,还能吸引观众的注意力,有效防止观影疲劳。有关剪辑抽帧技巧有哪些,剪辑…

【读点论文】基于二维伽马函数的光照不均匀图像自适应校正算法

基于二维伽马函数的光照不均匀图像自适应校正算法 摘 要:提出了一种基于二维伽马函数的光照不均匀图像自适应校正算法.利用多尺度高斯函数提取出场景的光照分量,然后构造了一种二维伽马函数,并利用光照分量的分布特性调整二维伽马函数的参数,降低光照过强区域图像的亮度值,提高…

MySQL数据库增删改查示例

一、 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo 二、创建俩张表 先创建一个数据库并使用: 创建员工表 创建员工绩效表 三、修改表 1.在员工表的基本上增加一个image系列&a…

基于芯片CSU8RP1382开发的咖啡秤方案

咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能,工作电压在2.4V~3.6V之间,满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示,分别为:g、lb、oz、…

【WSL】常用命令

文章目录 启动 WSL列出 Linux 发行版安装 Linux 发行版设置默认的 Linux 发行版卸载 Linux 发行版更新 WSL检查 WSL 状态启动和关闭 WSL跨系统文件访问其他命令 Windows Subsystem for Linux (WSL) 提供了一系列命令用于管理 Linux 发行版在 Windows 系统中的运行。下面是一些常…

小阿轩yx-LVS+Keepalived群集

小阿轩yx-LVSKeepalived群集 Keepalived 双机热备份基础知识 起初是专门针对 LVS 设计的一款强大的辅助工具主要用来提供故障切换(Failover)和健康检査(HealthChecking)功能—判断LVS 负载调度器、节点服务器的可用性当 master 主机出现故障及时切换到backup 节点保证业务正常…

ORB-SLAM3源码分析(案例分析)

一、ORB-SLAM3简介 ORB-SLAM3 (Oriented FAST and Rotated BRIEF SLAM 3) 是一种视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)系统,用于机器人和计算机视觉领域。它是ORB-SLAM系列的第三个版本&#xff…

吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.7-2.8

目录 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)第二周:机器学习策略(2)(ML Strategy (2))2.7 迁移学习(Transfer learning) 第三门课 结构化机器学习项目&#xff0…

鸿蒙开发设备管理:【@ohos.vibrator (振动)】

振动 说明: 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 imp…

Day05-组织架构-角色管理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.组织架构-编辑部门-弹出层获取数据2.组织架构-编辑部门-编辑表单校验3.组织架构-编辑部门-确认取消4.组织架构-删除部门5.角色管理-搭建页面结构6.角色管理-获取数…