šŸ¤— PEFT library release enables parameter-efficient fine-tuning of billion‑scale models

TL;DR

Hugging Face released the šŸ¤— PEFT library, allowing parameter‑efficient fine‑tuning (PEFT) of large language models with only a few megabytes of trainable weights, making it feasible to adapt billion‑scale models on consumer‑grade GPUs.

Motivation: why PEFT matters

PEFT methods train a small set of additional parameters while freezing the bulk of a pretrained model. This reduces both compute and storage costs, avoids catastrophic forgetting, and often outperforms full fine‑tuning in low‑data regimes. The approach works across modalities (text, vision, audio) and enables a single base model to serve many downstream tasks via tiny adapter checkpoints.

Supported PEFT techniques

The šŸ¤— PEFT library currently implements four widely‑cited methods:

  1. LoRA – Low‑Rank Adaptation of Large Language Models (Hu et al., 2021).
  2. Prefix Tuning – P‑Tuning v2, which prepends learnable vectors to each transformer layer.
  3. Prompt Tuning – Scales prompt‑based adaptation across tasks.
  4. P‑Tuning – Directly optimizes continuous prompts for GPT‑style models.

Additional methods are planned for future releases.

Representative use cases

  • Fine‑tuning a 3 B‑parameter T0 model on a laptop GPU (11 GB RAM) using LoRA and šŸ¤— Accelerate’s DeepSpeed integration. The example script peft_lora_seq2seq_accelerate_ds_zero3_offload.py runs in GoogleĀ Colab.
  • INT8 LoRA tuning of OPT‑6.7B in Colab via the bitsandbytes library, demonstrating that 8‑bit quantization plus PEFT fits within modest GPU memory.
  • Stable Diffusion DreamBooth on consumer GPUs (RTX 2080 Ti, RTX 3080) using LoRA, with a public Gradio demo that runs on a T4 (16 GB) instance.

These examples illustrate that models previously requiring dozens of GB of VRAM can now be adapted on hardware accessible to most practitioners.

Quick start: fine‑tuning bigscience/mt0-large with LoRA

from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_model, LoraConfig, TaskType

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

peft_cfg = LoraConfig(
    task_type=TaskType.SEQ_2_SEQ_LM,
    inference_mode=False,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
)
model = get_peft_model(model, peft_cfg)
model.print_trainable_parameters()
# → trainable params: 2,359,296 | all params: 1,231,940,608 | trainable %: 0.19

The remainder of the training loop is unchanged. After training, only the adapter files are saved:

model.save_pretrained("output_dir")  # creates adapter_config.json + adapter_model.bin (~19 MB)

To load for inference:

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
from peft import PeftModel, PeftConfig

peft_id = "smangrul/twitter_complaints_bigscience_T0_3B_LORA_SEQ_2_SEQ_LM"
cfg = PeftConfig.from_pretrained(peft_id)
base = AutoModelForSeq2SeqLM.from_pretrained(cfg.base_model_name_or_path)
model = PeftModel.from_pretrained(base, peft_id)
 tokenizer = AutoTokenizer.from_pretrained(cfg.base_model_name_or_path)

model.eval().to("cuda")
inputs = tokenizer("Tweet text : @HondaCustSvc ...", return_tensors="pt")
with torch.no_grad():
    out = model.generate(inputs["input_ids"].to("cuda"), max_new_tokens=10)
    print(tokenizer.decode(out[0], skip_special_tokens=True))
# → "complaint"

The adapter checkpoint is only a few megabytes, yet it yields performance comparable to full fine‑tuning.

Future directions

Hugging Face plans to add more PEFT variants such as IA³ and bottleneck adapters. Upcoming use cases include INT8 training of whisper-large in Colab and applying PEFT to RLHF components (policy and ranker models). Community contributions are encouraged via the GitHub repository.

Conclusion

šŸ¤— PEFT democratizes the adaptation of billion‑scale models by drastically lowering the hardware, compute, and storage barriers while preserving accuracy. The library’s seamless integration with šŸ¤— Transformers and šŸ¤— Accelerate makes it straightforward to plug PEFT into existing pipelines and to share lightweight adapters across tasks.

Sources

Related

  • Project
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch