{"id":13393600,"url":"https://github.com/huggingface/peft","last_synced_at":"2025-05-12T16:16:18.824Z","repository":{"id":65366220,"uuid":"570384908","full_name":"huggingface/peft","owner":"huggingface","description":"🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.","archived":false,"fork":false,"pushed_at":"2025-05-05T13:41:43.000Z","size":16559,"stargazers_count":18293,"open_issues_count":32,"forks_count":1853,"subscribers_count":112,"default_branch":"main","last_synced_at":"2025-05-05T14:12:44.501Z","etag":null,"topics":["adapter","diffusion","llm","lora","parameter-efficient-learning","python","pytorch","transformers"],"latest_commit_sha":null,"homepage":"https://huggingface.co/docs/peft","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/huggingface.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-11-25T03:51:09.000Z","updated_at":"2025-05-05T13:41:47.000Z","dependencies_parsed_at":"2023-11-10T13:44:08.386Z","dependency_job_id":"734a2d29-3b2f-4732-b2eb-20b2e1c1f9fa","html_url":"https://github.com/huggingface/peft","commit_stats":{"total_commits":1048,"total_committers":212,"mean_commits":4.943396226415095,"dds":0.7519083969465649,"last_synced_commit":"6a533b783dc757705df9f8698218abec40e54683"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huggingface%2Fpeft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huggingface%2Fpeft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huggingface%2Fpeft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huggingface%2Fpeft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/huggingface","download_url":"https://codeload.github.com/huggingface/peft/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253774584,"owners_count":21962199,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adapter","diffusion","llm","lora","parameter-efficient-learning","python","pytorch","transformers"],"created_at":"2024-07-30T17:00:56.725Z","updated_at":"2025-05-12T16:16:18.786Z","avatar_url":"https://github.com/huggingface.png","language":"Python","readme":"\u003c!---\nCopyright 2023 The HuggingFace Team. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n--\u003e\n\n\u003ch1 align=\"center\"\u003e \u003cp\u003e🤗 PEFT\u003c/p\u003e\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003e\n    \u003cp\u003eState-of-the-art Parameter-Efficient Fine-Tuning (PEFT) methods\u003c/p\u003e\n\u003c/h3\u003e\n\nFine-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.\n\nPEFT 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.\n\n\u003e [!TIP]\n\u003e Visit the [PEFT](https://huggingface.co/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!\n\nCheck the PEFT Adapters API Reference section for a list of supported PEFT methods, and read the [Adapters](https://huggingface.co/docs/peft/en/conceptual_guides/adapter), [Soft prompts](https://huggingface.co/docs/peft/en/conceptual_guides/prompting), and [IA3](https://huggingface.co/docs/peft/en/conceptual_guides/ia3) conceptual guides to learn more about how these methods work.\n\n## Quickstart\n\nInstall PEFT from pip:\n\n```bash\npip install peft\n```\n\nPrepare 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!\n\n```python\nfrom transformers import AutoModelForSeq2SeqLM\nfrom peft import get_peft_config, get_peft_model, LoraConfig, TaskType\nmodel_name_or_path = \"bigscience/mt0-large\"\ntokenizer_name_or_path = \"bigscience/mt0-large\"\n\npeft_config = LoraConfig(\n    task_type=TaskType.SEQ_2_SEQ_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1\n)\n\nmodel = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)\nmodel = get_peft_model(model, peft_config)\nmodel.print_trainable_parameters()\n\"trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282\"\n```\n\nTo load a PEFT model for inference:\n\n```py\nfrom peft import AutoPeftModelForCausalLM\nfrom transformers import AutoTokenizer\nimport torch\n\nmodel = AutoPeftModelForCausalLM.from_pretrained(\"ybelkada/opt-350m-lora\").to(\"cuda\")\ntokenizer = AutoTokenizer.from_pretrained(\"facebook/opt-350m\")\n\nmodel.eval()\ninputs = tokenizer(\"Preheat the oven to 350 degrees and place the cookie dough\", return_tensors=\"pt\")\n\noutputs = model.generate(input_ids=inputs[\"input_ids\"].to(\"cuda\"), max_new_tokens=50)\nprint(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])\n\n\"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.\"\n```\n\n## Why you should use PEFT\n\nThere 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.\n\n### High performance on consumer hardware\n\nConsider the memory requirements for training the following models on the [ought/raft/twitter_complaints](https://huggingface.co/datasets/ought/raft/viewer/twitter_complaints) dataset with an A100 80GB GPU with more than 64GB of CPU RAM.\n\n|   Model         | Full Finetuning | PEFT-LoRA PyTorch  | PEFT-LoRA DeepSpeed with CPU Offloading |\n| --------- | ---- | ---- | ---- |\n| bigscience/T0_3B (3B params) | 47.14GB GPU / 2.96GB CPU  | 14.4GB GPU / 2.96GB CPU | 9.8GB GPU / 17.8GB CPU |\n| bigscience/mt0-xxl (12B params) | OOM GPU | 56GB GPU / 3GB CPU | 22GB GPU / 52GB CPU |\n| bigscience/bloomz-7b1 (7B params) | OOM GPU | 32GB GPU / 3.8GB CPU | 18.1GB GPU / 35GB CPU |\n\nWith 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.\n\n|   Submission Name        | Accuracy |\n| --------- | ---- |\n| Human baseline (crowdsourced) |\t0.897 |\n| Flan-T5 | 0.892 |\n| lora-t0-3b | 0.863 |\n\n\u003e [!TIP]\n\u003e 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](https://www.philschmid.de/fine-tune-flan-t5-peft).\n\n### Quantization\n\nQuantization 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.\n\n* Learn how to finetune [meta-llama/Llama-2-7b-hf](https://huggingface.co/meta-llama/Llama-2-7b-hf) with QLoRA and the [TRL](https://huggingface.co/docs/trl/index) library on a 16GB GPU in the [Finetune LLMs on your own consumer hardware using tools from PyTorch and Hugging Face ecosystem](https://pytorch.org/blog/finetune-llms/) blog post.\n* Learn how to finetune a [openai/whisper-large-v2](https://huggingface.co/openai/whisper-large-v2) model for multilingual automatic speech recognition with LoRA and 8-bit quantization in this [notebook](https://colab.research.google.com/drive/1DOkD_5OUjFa0r5Ik3SgywJLJtEo2qLxO?usp=sharing) (see this [notebook](https://colab.research.google.com/drive/1vhF8yueFqha3Y3CpTHN6q9EVcII9EYzs?usp=sharing) instead for an example of streaming a dataset).\n\n### Save compute and storage\n\nPEFT 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.\n\n## PEFT integrations\n\nPEFT is widely supported across the Hugging Face ecosystem because of the massive efficiency it brings to training and inference.\n\n### Diffusers\n\nThe 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!\n\n|   Model         | Full Finetuning | PEFT-LoRA  | PEFT-LoRA with Gradient Checkpointing  |\n| --------- | ---- | ---- | ---- |\n| CompVis/stable-diffusion-v1-4 | 27.5GB GPU / 3.97GB CPU | 15.5GB GPU / 3.84GB CPU | 8.12GB GPU / 3.77GB CPU | \n\n\u003e [!TIP]\n\u003e Take a look at the [examples/lora_dreambooth/train_dreambooth.py](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](https://huggingface.co/spaces/smangrul/peft-lora-sd-dreambooth) Space which is running on a T4 instance. Learn more about the PEFT integration in Diffusers in this [tutorial](https://huggingface.co/docs/peft/main/en/tutorial/peft_integrations#diffusers).\n\n### Accelerate\n\n[Accelerate](https://huggingface.co/docs/accelerate/index) 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.\n\n### TRL\n\nPEFT can also be applied to training LLMs with RLHF components such as the ranker and policy. Get started by reading:\n\n* [Fine-tune a Mistral-7b model with Direct Preference Optimization](https://towardsdatascience.com/fine-tune-a-mistral-7b-model-with-direct-preference-optimization-708042745aac) with PEFT and the [TRL](https://huggingface.co/docs/trl/index) library to learn more about the Direct Preference Optimization (DPO) method and how to apply it to a LLM.\n* [Fine-tuning 20B LLMs with RLHF on a 24GB consumer GPU](https://huggingface.co/blog/trl-peft) with PEFT and the [TRL](https://huggingface.co/docs/trl/index) library, and then try out the [gpt2-sentiment_peft.ipynb](https://github.com/huggingface/trl/blob/main/examples/notebooks/gpt2-sentiment.ipynb) notebook to optimize GPT2 to generate positive movie reviews.\n* [StackLLaMA: A hands-on guide to train LLaMA with RLHF](https://huggingface.co/blog/stackllama) with PEFT, and then try out the [stack_llama/scripts](https://github.com/huggingface/trl/tree/main/examples/research_projects/stack_llama/scripts) for supervised finetuning, reward modeling, and RL finetuning.\n\n## Model support\n\nUse this [Space](https://stevhliu-peft-methods.hf.space) or check out the [docs](https://huggingface.co/docs/peft/main/en/index) 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](https://huggingface.co/docs/peft/main/en/developer_guides/custom_models#new-transformers-architectures) guide to learn how.\n\n## Contribute\n\nIf you would like to contribute to PEFT, please check out our [contribution guide](https://huggingface.co/docs/peft/developer_guides/contributing).\n\n## Citing 🤗 PEFT\n\nTo use 🤗 PEFT in your publication, please cite it by using the following BibTeX entry.\n\n```bibtex\n@Misc{peft,\n  title =        {PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods},\n  author =       {Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan},\n  howpublished = {\\url{https://github.com/huggingface/peft}},\n  year =         {2022}\n}\n```","funding_links":[],"categories":["Python","Core Model/Training Techniques","Uncategorized","Code Samples","Infra","Fine Tuning ([home](#awesome-llm))","Foundation Model Fine Tuning","A01_文本生成_文本对话","Optimizations and fine-tuning","Fine-Tuning \u0026 Training","pytorch","NLP","Training","Official Resources","Frameworks and Tools","🤖 Machine Learning \u0026 AI","Collections","Fine-Tuning \u0026 Adapters","Computation and Communication Optimisation","Advanced Topics","Model Training \u0026 Fine-Tuning","Model Training \u0026 Fine-tuning","🧠 **CORE AI/ML MASTERY**","🧑‍🔧 Fine-Tuning \u0026 Training Optimization","🛠️ AI 工具与框架","开发者工具 \u0026 AI Infra","Fine-tuning \u0026 Quantization (18)","Training \u0026 Fine-Tuning","LLM Training / Finetuning","tools","Language Models"],"sub_categories":["Uncategorized","大语言对话模型及数据","Fine-Tuning Frameworks","3. Pretraining","Foundation Model Fine Tuning","Tools","Useful Repositories","Fine-Tuning \u0026 Training","LangManus","**Transformers \u0026 Large Language Models**","模型微调","微调工具","Fine-Tuning Tools","glm 6b","Fine-tuning"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuggingface%2Fpeft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuggingface%2Fpeft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuggingface%2Fpeft/lists"}