大模型 活跃维护

peft

huggingface/peft

🤗 PEFT:最先进的参数高效微调。

21726
Stars 标星
2528
Forks 分支
113
Watchers 关注
80
Open Issues
Python
主要语言
Apache-2.0
开源协议
32.7 MB
仓库大小
1 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:huggingface/peft
git clone https://github.com/huggingface/peft.git
git clone git@github.com:huggingface/peft.git
README.md main

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

版权所有 2023 HuggingFace 团队。保留所有权利。

根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可证,否则您不得使用此文件。您可以在以下位置获得许可证副本

https://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则按照本许可证分发的软件是按“原样”基础分发的,不附带任何明示或暗示的保证或条件。有关许可证下管理权限和限制的具体语言,请参阅许可证。
-->

🤗 PEFT

最先进的参数高效微调(PEFT)方法

由于规模庞大,对大型预训练模型进行微调往往成本高昂。参数高效微调(PEFT)方法通过只微调少量(额外的)模型参数,而不是模型的全部参数,使大型预训练模型能够高效地适应各种下游应用。这显著降低了计算和存储成本。近期的先进 PEFT 技术实现的性能可与完全微调的模型相媲美。

PEFT 与 Transformers 集成,以便轻松进行模型训练和推理,与 Diffusers 集成,便于管理不同的适配器,并与 Accelerate 集成,实现对超大型模型的分布式训练和推理。

[!提示]
访问 PEFT 组织,以了解库中实现的 PEFT 方法,并查看展示如何将这些方法应用于各种下游任务的笔记本。在组织页面点击“Watch repos”按钮,可在新方法和笔记本发布时收到通知!

查看 PEFT Adapters API Reference 部分,了解支持的 PEFT 方法列表,并阅读 Adapters、Soft prompts 和 IA3 概念指南,以详细了解这些方法的工作原理。

快速开始

从 pip 安装 PEFT:

pip install peft

通过使用 get_peft_model 包装基础模型和 PEFT 配置,准备一个可使用 LoRA 等 PEFT 方法进行训练的模型。对于 bigscience/mt0-large 模型,你只训练了 0.19% 的参数!

import torch
from transformers import AutoModelForCausalLM
from peft import LoraConfig, TaskType, get_peft_model

device = torch.accelerator.current_accelerator().type if hasattr(torch, "accelerator") else "cuda"
model_id = "Qwen/Qwen2.5-3B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_id, device_map=device)
peft_config = LoraConfig(
    r=16,
    lora_alpha=32,
    task_type=TaskType.CAUSAL_LM,
    # target_modules=["q_proj", "v_proj", ...]  # optionally indicate target modules
)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
# prints: trainable params: 3,686,400 || all params: 3,089,625,088 || trainable%: 0.1193

# now perform training on your dataset, e.g. using transformers Trainer, then save the model
model.save_pretrained("qwen2.5-3b-lora")

要加载用于推理的 PEFT 模型:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

device = torch.accelerator.current_accelerator().type if hasattr(torch, "accelerator") else "cuda"
model_id = "Qwen/Qwen2.5-3B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map=device)
model = PeftModel.from_pretrained(model, "qwen2.5-3b-lora")

inputs = tokenizer("Preheat the oven to 350 degrees and place the cookie dough", return_tensors="pt")
outputs = model.generate(**inputs.to(device), max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

# prints something like: Preheat the oven to 350 degrees and place the cookie dough in a baking dish [...]

为什么你应该使用 PEFT

使用 PEFT 有许多好处,但最主要的是在计算和存储上的巨大节省,使 PEFT 适用于许多不同的用例。

在消费级硬件上的高性能

考虑在 ought/raft/twitter_complaints 数据集上使用拥有超过 64GB CPU 内存的 A100 80GB GPU 训练以下模型所需的内存。

模型 全量微调 PEFT-LoRA PyTorch PEFT-LoRA DeepSpeed(带 CPU 卸载)
bigscience/T0_3B(3B 参数) 47.14GB GPU / 2.96GB CPU 14.4GB GPU / 2.96GB CPU 9.8GB GPU / 17.8GB CPU
bigscience/mt0-xxl(12B 参数) GPU 内存不足 56GB GPU / 3GB CPU 22GB GPU / 52GB CPU
bigscience/bloomz-7b1(7B 参数) GPU 内存不足 32GB GPU / 3.8GB CPU 18.1GB GPU / 35GB CPU

使用 LoRA,您可以完全微调一个 12B 参数的模型,否则在 80GB GPU 上会出现内存不足,同时可以轻松地适配和训练 3B 参数的模型。当您查看 3B 参数模型的性能时,它与完全微调的模型相比,在 GPU 内存使用量上只占一小部分。

提交名称 准确率
人类基线(众包) 0.897
法兰-T5 0.892
洛拉-T0-3b 0.863

[!提示]
上表中的 bigscience/T0_3B 模型性能尚未优化。通过调整输入指令模板、LoRA 超参数以及其他训练相关超参数,你可以进一步提升其性能。相比完整 bigscience/T0_3B 模型的 11GB,最终的检查点大小仅为 19MB。想了解使用 PEFT 微调的优势,请阅读这篇 博客文章。

量子化

量化是另一种通过降低精度表示数据来减少模型内存需求的方法。它可以与PEFT方法结合,使训练和加载LLM进行推断变得更加简单。

保存计算和存储

PEFT可以帮助你节省存储空间,避免对下游任务或数据集的模型进行完全微调。在许多情况下,你只需微调模型参数的极小部分,每个检查点的大小也只有几MB(而非GB)。这些较小的PEFT适配器的性能可与完全微调模型相当。如果你有大量数据集,使用PEFT模型可以节省大量存储空间,而不用担心骨干或基础模型的严重遗忘或过度拟合。

PEFT积分

PEFT因其在培训和推理方面的巨大效率而广受拥抱面生态系统支持。

扩散器

迭代扩散过程消耗大量内存,这可能使训练变得困难。PEFT可以帮助降低内存需求,并减少最终模型检查点的存储容量。例如,考虑在配备超过64GB CPU内存的A100 80GB GPU上用LoRA训练稳定扩散模型所需的内存。最终模型检查点大小仅为8.8MB!

模型 全五调 PEFT-LoRA 带梯度检查点的 PEFT-LoRA
CompVis/stable-diffusion-v1-4 27.5GB GPU / 3.97GB CPU 15.5GB GPU / 3.84GB CPU 8.12GB GPU / 3.77GB CPU

[!提示]
查看 examples/lora_dreambooth/train_dreambooth.py 训练脚本,尝试使用 LoRA 训练你自己的 Stable Diffusion 模型,并尝试运行在 T4 实例上的 smangrul/peft-lora-sd-dreambooth Space。通过这个 教程 学习更多关于 Diffusers 中 PEFT 集成的内容。

变形金刚

PEFT 已直接集成到 Transformers 中。加载模型后,调用 add_adapter 向模型添加新的 PEFT 适配器:

from peft import LoraConfig
model = ...  # transformers model
peft_config = LoraConfig(...)
model.add_adapter(peft_config, adapter_name="lora_1")

要加载经过训练的 PEFT 适配器,请调用 load_adapter:

model = ...  # transformers model
model.load_adapter(<path-to-adapter>, adapter_name="lora_1")

要在不同的适配器之间切换,请调用 set_adapter:

model.set_adapter("lora_2")

Transformers 集成不包括 PEFT 提供的所有功能,例如将适配器合并到基础模型的方法。

加速

Accelerate 是一个用于在各种训练设置和硬件(GPU、TPU、Apple Silicon 等)上进行分布式训练和推理的库。PEFT 模型可以开箱即用地与 Accelerate 配合使用,这使得在资源有限的消费者硬件上训练大模型或进行推理非常方便。

技术就绪水平

PEFT 也可以应用于具有 RLHF 组件(如排序器和策略)的 LLM 训练。入门请阅读:

模型支持

使用此 Space 或查看 文档 以找到哪些模型开箱即用支持 PEFT 方法。即使未在下方列出模型,也可以手动配置模型配置以启用 PEFT。阅读 新 Transformers 架构 指南了解方法。

贡献

如果您想为 PEFT 做贡献,请查看我们的 贡献指南。

引用 🤗 PEFT

在您的出版物中使用 🤗 PEFT 时,请使用以下 BibTeX 条目进行引用。

@Misc{peft,
  title =        {{PEFT}: State-of-the-art Parameter-Efficient Fine-Tuning methods},
  author =       {Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan and Marian Tietz},
  howpublished = {\url{https://github.com/huggingface/peft}},
  year =         {2022}
}
本站来源与版权声明
  • 本文标题:peft - 🤗 PEFT:最先进的参数高效微调
  • 本文链接:https://cn121.com/llm/huggingface-peft.html
  • 原项目:huggingface/peft 版权归原作者 huggingface 及贡献者所有
  • 收录信息:本站于 2026-09-26 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 huggingface/peft。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。