peft

huggingfaceApache-2.0活跃维护

用 LoRA、Adapter 等少量参数微调大模型和扩散模型,大幅降低显存与训练成本,是 Hugging Face 生态里做参数高效微调的标准库。

🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.

v0.21.2发布于 2026-10-01 10:29 UTC21,880star +3 / 7 天2,657fork同步于 2026-11-10 11:23 UTC

怎么上手

由 README 提炼,执行前请确认
pip install peft
硬件要求按 README 说明

README 给出实测显存参考:3B 模型 LoRA 约 14.4GB GPU,7B 约 32GB,12B 约 56GB(DeepSpeed CPU Offload 可降至 22GB);结合量化可在 16GB GPU 上微调 Llama-2-7B。支持 GPU、TPU、Apple Silicon 等,经 Accelerate 分布式运行。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

只微调少量额外参数就能适配大模型,大幅降低训练与存储成本

用 LoRA、Adapter 等少量参数微调大模型和扩散模型,大幅降低显存与训练成本,是 Hugging Face 生态里做参数高效微调的标准库。

核心能力

  • 用 get_peft_model 包装基座模型注入 LoRA 等适配器
  • 仅训练约 0.1% 参数即可接近全量微调效果
  • 可与量化结合,在消费级显卡上微调大模型
  • 适配器检查点仅数 MB 到数十 MB,便于多任务切换
  • 与 Transformers、Diffusers、Accelerate、TRL 集成

容易踩的坑

需先自行下载或加载基座模型权重,PEFT 只保存适配器;Transformers 内置的 add_adapter 接口不含合并适配器等 PEFT 全部功能;未列出的模型需手动配置 config 才能启用 PEFT。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.21.2
  1. v0.21.2最新正式版2026-10-01 · 2026-10-01 10:29 UTC

    This is a PEFT release fixes an issue that prevented encoder-decoder models to work when using Transformers ≥ 5.18.0.

    Changes:

    • #3845
  2. v0.21.12026-09-29 · 2026-09-29 09:28 UTC
    查看更新说明

    This is a small PEFT release to enable Tensor Parallel (TP) to work properly with PEFT. It requires Transformers ≥ 5.17.0 to work.

    Changes:

    • #3614
    • #3790
  3. v0.21.02026-09-15 · 2026-09-15 15:31 UTC
    查看更新说明

    Highlights

    New methods

    Riemannian-preconditional LoRA optimizer

    Riemannian-preconditioned LoRA optimizer (#3382), contributed by @smellslikeml, is a new LoRA-specific optimizer similar to LoRA-FA or LoRA+ that applies a Riemannian pre-conditioning on the gradients to improve feature learning and avoiding separate tuning of learning rates for LoRA's A and B matrices.

    LoRA variant: Knowledge-Aware Singular-Value Adaption (KaSA)

    KaSA aims at identifying knowledge aware singular values from the base weight. It then removes noisy knowledge from those weights and specifically trains the singular values most relevant to the task. Implemented in #3446 by @robbiebusinessacc and @iambogeumkim.

    Super-Tuning (#3518)

    Super-Tuning uses calibration-free magnitude scoring to allocate a sparse tuning budget. With BottomK selection, Super adapts low-magnitude weights, motivated by the idea that they provide degrees of freedom for learning a new task while leaving larger-magnitude pretrained weights untouched. Supra adds LoRA on top of this sparse update. It is a good fit for exploring sparsity alongside higher-rank adaptation, particularly on reasoning-heavy fine-tuning tasks. Thanks to @smellslikeml.

    ShadowPEFT (#3354)

    ShadowPEFT runs a small shadow network alongside the frozen base model. That shadow state gets updated at every decoder layer, so adaptation is shared across the stack instead of a separate low-rank update on each targeted linear layer (like LoRA). It’s a good choice when you care about downstream or OOD performance and want to stay in the same trainable-parameter range as LoRA, or when you want the small shadow on the edge and the frozen base in the cloud. This works best if the shadow model starts from a small, pretrained model. Contributed by @SeanLee97.

    Enhancements

    • Speed up MoE target parameter computation (#3577): For the common use case of one active adapter, weight and MoE LoRA delta computation is folded into a single baddbmm operation. Expect slight numerical differences in this case.

    • Support torchao v0.18.0 by supporting the newer Int8Tensor, Float8Tensor, etc. tensor subclasses.

    • Orthogonal Subspace Fine-tuning received a significant update in #3524 reducing the memory footprint by 22% and the training time by 46% according to the MetaMathQA benchmark while keeping task accuracy and forgetting stable. Expect slight numerical differences, especially in fp16, bf16.

    • https://github.com/huggingface/peft/pull/3639: Thanks to @amogh-nagri-11, prompt learning methods now allow to delete an adapter. For adaption prompt, adding or loading a second adapter no longer automatically activates it, in line with how other PEFT methods handle this.

    Changes

    Refactored state dict handling (#3490)

    An internal change moved state dict loading/saving method-specific code paths to the respective tuners. This should be transparent to the end-user and was extensively tested and should work exactly the same as previously, but if you suspect that the model behaves differently, let us know.

    Preserved adapter trainablity during injection (#3495)

    Previously, when loading or adding a second, third etc. adapter, this could affect the requires_grad of the existing adapter (or base model), depending on the value of is_trainable. This should no longer be

  4. v0.20.02026-07-28 · 2026-07-28 13:49 UTC
    查看更新说明

    Highlights

    This release adds no less than nine new PEFT methods and puts a lot of work into the surrounding infrastructure, for example adding a new image generation benchmark for the method comparison suite and greatly improving the documentation structure.

    New Methods

    HiRA

    @hqsiswiliam added "HiRA: Parameter-Efficient Hadamard High-Rank Adaptation for Large Language Models" to PEFT (#2668). Instead of adding the low-rank product BA to the base weight, HiRA multiplies it elementwise (Hadamard product) with the frozen base weight. Because the base weight itself is full rank, the resulting update is no longer constrained to be low rank, while the trainable parameter count stays the same as LoRA's.

    GLoRA

    @not-lain contributed GLoRA: "One-for-All: Generalized LoRA for Parameter-Efficient Fine-Tuning" in #3098. It is a flexible PEFT method that extends LoRA with configurable weight, activation, and bias adaptation, delivering richer fine-tuning with no extra inference cost. Use it when you need per-layer flexibility or stronger adaptation than vanilla LoRA. Skip it for non-Linear layers (e.g. Conv/Embedding) or when standard LoRA is already sufficient and simplicity matters.

    BEFT

    @whubaichuan added "BEFT: Bias-Efficient Fine-Tuning of Language Models" in #3195. BEFT builds on the observation that fine-tuning bias terms alone can be competitive in low-data regimes, but goes further: rather than training all biases, it targets the value projection by default, as the authors found this to be most efficient. This brings the trainable parameter count down to roughly 0.01% of the total parameters.

    MonteCLoRA

    @victor7246 integrated MonteCLoRA, "Robust and Efficient Fine-tuning of LLMs with Bayesian Reparameterization of Low-Rank Adaptation" in #2943. LoRA is known to be sensitive to hyperparameters like learning rate and batch size. This new LoRA variant addresses this by treating the low-rank parameters as a distribution rather than a point estimate, using Monte Carlo estimation to obtain a low-variance posterior estimate. This should make training noticeably more robust, at the cost of only O(rank) additional parameters.

    VeLoRA

    @roymiles added VeLoRA: "Memory Efficient Training using Rank-1 Sub-Token Projections" in #3159. Unlike most PEFT methods, this LoRA variant targets activation memory rather than parameter count: intermediate activations are split into sub-tokens and compressed with a fixed rank-1 projection before being cached for the backward pass, then reconstructed during backpropagation. Conceptually, it is similar to gradient checkpointing, with a lower memory saving but running faster.

    Uni-LoRA

    @KaiyangLi1992 contributed Uni-LoRA: "One Vector is All You Need" in #3257. The paper shows that parameter-efficient LoRA variants like VeRA and VB-LoRA can all be described as projecting the full LoRA parameter space down to a much smaller subspace, differing only in the choice of projection. Uni-LoRA uses a single global projection across the whole model instead of layer-wise ones, which allows cross-layer parameter sharing and thus very low parameter counts.

    FRoD

    @Bane-Elvin added FRoD, "Full-Rank Efficient Fine-Tuning with Rotational Degrees for Fast Convergence", in #3270. Instead of adding low-rank deltas like LoRA, it reconstructs selected weights with shared rotational subspaces and sparse trainable coefficients. It is especially useful when fast convergence and a higher full-rank capacity ceiling are important, and its large spar

  5. v0.19.12026-04-16 · 2026-04-16 15:50 UTC
    查看更新说明

    A small patch release containing these fixes:

    • #3161
    • #3165

    Full Changelog: https://github.com/huggingface/peft/compare/v0.19.0...v0.19.1

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Fine-tuning large pretrained models is often prohibitively costly due to their scale. Parameter-Efficient Fine-Tuning (PEFT) methods enable efficient adaptation of large pretrained models to various downstream applications by only fine-tuning a small number of (extra) model parameters instead of all the model's parameters. This significantly decreases the computational and storage costs. Recent state-of-the-art PEFT techniques achieve performance comparable to fully fine-tuned models.

    PEFT is integrated with Transformers for easy model training and inference, Diffusers for conveniently managing different adapters, and Accelerate for distributed training and inference for really big models.

    [!TIP] Visit the PEFT organization to read about the PEFT methods implemented in the library and to see notebooks demonstrating how to apply these methods to a variety of downstream tasks. Click the "Watch repos" button on the organization page to be notified of newly implemented methods and notebooks!

    Check the PEFT Adapters API Reference section for a list of supported PEFT methods, and read the Adapters, Soft prompts, and IA3 conceptual guides to learn more about how these methods work.

    Quickstart

    Install PEFT from pip:

    pip install peft
    

    Prepare a model for training with a PEFT method such as LoRA by wrapping the base model and PEFT configuration with get_peft_model. For the bigscience/mt0-large model, you're only training 0.19% of the parameters!

    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")
    

    To load a PEFT model for inference:

    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 [...]
    

    Why you should use PEFT

    There are many benefits of using PEFT but the main one is the huge savings in compute and storage, making PEFT applicable to many different use cases.

    High performance on consumer hardware

    Consider the memory requirements for training the following models on the ought/raft/twitter_complaints dataset with an A100 80GB GPU with more than 64GB of CPU RAM.

    ModelFull FinetuningPEFT-LoRA PyTorchPEFT-LoRA DeepSpeed with CPU Offloading
    bigscience/T0_3B (3B params)47.14GB GPU / 2.96GB CPU14.4GB GPU / 2.96GB CPU9.8GB GPU / 17.8GB CPU
    bigscience/mt0-xxl (12B params)OOM GPU56GB GPU / 3GB CPU22GB GPU / 52GB CPU
    bigscience/bloomz-7b1 (7B params)OOM GPU32GB GPU / 3.8GB CPU18.1GB GPU / 35GB CPU

    With LoRA you can fully finetune a 12B parameter model that would've otherwise run out of memory on the 80GB GPU, and comfortably fit and train a 3B parameter model. When you look at the 3B parameter model's performance, it is comparable to a fully finetuned model at a fraction of the GPU memory.

    Submission NameAccuracy
    Human baseline (crowdsourced)0.897
    Flan-T50.892
    lora-t0-3b0.863

    [!TIP] The bigscience/T0_3B model performance isn't optimized in the table above. You can squeeze even more performance out of it by playing around with the input instruction templates, LoRA hyperparameters, and other training related hyperparameters. The final checkpoint size of this model is just 19MB compared to 11GB of the full bigscience/T0_3B model. Learn more about the advantages of finetuning with PEFT in this blog post.

    Quantization

    Quantization is another method for reducing the memory requirements of a model by representing the data in a lower precision. It can be combined with PEFT methods to make it even easier to train and load LLMs for inference.

    Save compute and storage

    PEFT can help you save storage by avoiding full finetuning of models on each of downstream task or dataset. In many cases, you're only finetuning a very small fraction of a model's parameters and each checkpoint is only a few MBs in size (instead of GBs). These smaller PEFT adapters demonstrate performance comparable to a fully finetuned model. If you have many datasets, you can save a lot of storage with a PEFT model and not have to worry about catastrophic forgetting or overfitting the backbone or base model.

    PEFT integrations

    PEFT is widely supported across the Hugging Face ecosystem because of the massive efficiency it brings to training and inference.

    Diffusers

    The iterative diffusion process consumes a lot of memory which can make it difficult to train. PEFT can help reduce the memory requirements and reduce the storage size of the final model checkpoint. For example, consider the memory required for training a Stable Diffusion model with LoRA on an A100 80GB GPU with more than 64GB of CPU RAM. The final model checkpoint size is only 8.8MB!

    ModelFull FinetuningPEFT-LoRAPEFT-LoRA with Gradient Checkpointing
    CompVis/stable-diffusion-v1-427.5GB GPU / 3.97GB CPU15.5GB GPU / 3.84GB CPU8.12GB GPU / 3.77GB CPU

    [!TIP] Take a look at the examples/lora_dreambooth/train_dreambooth.py training script to try training your own Stable Diffusion model with LoRA, and play around with the smangrul/peft-lora-sd-dreambooth Space which is running on a T4 instance. Learn more about the PEFT integration in Diffusers in this tutorial.

    Transformers

    PEFT is directly integrated with Transformers. After loading a model, call add_adapter to add a new PEFT adapter to the model:

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

    To load a trained PEFT adapter, call load_adapter:

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

    And to switch between different adapters, call set_adapter:

    model.set_adapter("lora_2")
    

    The Transformers integration doesn't include all the functionalities offered in PEFT, such as methods for merging the adapter into the base model.

    Accelerate

    Accelerate is a library for distributed training and inference on various training setups and hardware (GPUs, TPUs, Apple Silicon, etc.). PEFT models work with Accelerate out of the box, making it really convenient to train really large models or use them for inference on consumer hardware with limited resources.

    TRL

    PEFT can also be applied to training LLMs with RLHF components such as the ranker and policy. Get started by reading:

    Model support

    Use this Space or check out the docs to find which models officially support a PEFT method out of the box. Even if you don't see a model listed below, you can manually configure the model config to enable PEFT for a model. Read the New transformers architecture guide to learn how.

    Contribute

    If you would like to contribute to PEFT, please check out our contribution guide.

    Citing 🤗 PEFT

    To use 🤗 PEFT in your publication, please cite it by using the following BibTeX entry.

    @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}
    }