@kkb-code contributed Sparse High Rank Adapters (SHiRA, paper) which promise to offer a potential gain in performance over LoRAs - especially the concept loss when using multiple adapters is improved. Since the adapters only train on 1-2% of the weights and are inherently sparse, switching between adapters may be cheaper than with LoRAs. (#2584)
@JL-er added a new PEFT method, MiSS (Matrix Shard Sharing) in #2604. This method is an evolution of Bone, which, according to our PEFT method comparison benchmark, gives excellent results when it comes to performance and memory efficiency. If you haven't tried it, you should do so now.
At the same time, Bone will be deprecated in favor of MiSS and will be removed in PEFT v0.19.0. If you already have a Bone checkpoint, you can use scripts/convert-bone-to-miss.py to convert it into a MiSS checkpoint and proceed with training using MiSS.
Enhancements
LoRA for nn.Parameter
LoRA is now able to target nn.Parameter directly (#2638, #2665)! Ever had this complicated nn.Module with promising parameters inside but it was too custom to be supported by your favorite fine-tuning library? No worries, now you can target nn.Parameters directly using the target_parameters config attribute which works similarly to target_modules.
This option can be especially useful for models with Mixture of Expert (MoE) layers, as those often use nn.Parameters directly and cannot be targeted with target_modules. For example, for the Llama4 family of models, use the following config to target the MoE weights:
Note that this feature is still experimental as it comes with a few caveats and therefore might change in the future. Also, MoE weights with many experts can be quite huge, so expect a higher memory usage than compared to targeting normal nn.Linear layers.
Injecting adapters based on a state_dict
Sometimes, it is possible that there is a PEFT adapter checkpoint but the corresponding PEFT config is not known for whatever reason. To inject the PEFT layers for this checkpoint, you would usually have to reverse-engineer the corresponding PEFT config, most notably the target_modules argument, based on the state_dict from the checkpoint. This can be cumbersome and error prone. To avoid this, it is also possible to call inject_adapter_in_model and pass the loaded state_dict as an argument:
from safetensors.torch import load_file
from peft import LoraConfig, inject_adapter_in_model
model = ...
state_dict = load_file(<path-to-safetensors-file>)
lora_config = LoraConfig() # <= no need to specify further
model = inject_adapter_in_model(lora_config, model, state_dict=state_dict)
A bug in prompt learning methods caused modules_to_save to be ignored. Especially classification tasks are affected since they usually add the classification/score layer to modules_to_save. In consequence, these layers were neither trained nor stored after training. This has been corrected now. (#2646)
All Changes
Bump version to 0.16.1.dev0 after release by @BenjaminBossan in https://github.com/huggingface/peft/pull/2632
FEAT: Add GH action to deploy method comparison app by @BenjaminBossan in https://github.com/huggingface/peft/pull/2625
enable FSDP example for model `hugging-quants/Meta-Llama-3.1-8B-Instr… by @kaixuanliu in https://github.com/huggingface/peft/pull/2626
FIX: Create mask function signature change in transformers 4.53.1 by @BenjaminBossan in https://github.com/huggingface/peft/pull/2633
FIX: Correctly skip AWQ test based on torch version by @BenjaminBossan in https://github.com/huggingface/peft/pull/2631
FIX: Faulty OFT parameter device test by @BenjaminBossan in https://github.com/huggingface/peft/pull/2630
Fix #2634: Allow peft_type to be a string by @githubnemo in https://github.com/huggingface/peft/pull/2635
SHiRA Adapters by @kkb-code in https://github.com/huggingface/peft/pull/2584
FIX: Prompt learning methods modules_to_save issue by @BenjaminBossan in https://github.com/huggingface/peft/pull/2646
FIX: Error in workflow file to deploy method comparison app by @BenjaminBossan in https://github.com/huggingface/peft/pull/2645
FEAT Allow LoRA to target nn.Parameter by @BenjaminBossan in https://github.com/huggingface/peft/pull/2638
Update BibTeX entry by @cx-alberto-simoes in https://github.com/huggingface/peft/pull/2659
FIX Prefix tuning after transformers PR 38635 by @BenjaminBossan in https://github.com/huggingface/peft/pull/2662
make method comparison device agnostic, so it can expand to more accelerators like XPU by @yao-matrix in https://github.com/huggingface/peft/pull/2610
Update tokenizer parameter in sfttrainer across multiple examples by @gapsong in https://github.com/huggingface/peft/pull/2664
Update lora.md by @qgallouedec in https://github.com/huggingface/peft/pull/2666
GPT2 compatible version of LLama-Adapters by @efraimdahl in https://github.com/huggingface/peft/pull/2643
Method Comparison: Improve formatting/layout of table by @githubnemo in https://github.com/huggingface/peft/pull/2670
ENH: Targeting multiple parameters on the same module by @BenjaminBossan in https://github.com/huggingface/peft/pull/2665
Update extending vocab docs by @githubnemo in https://github.com/huggingface/peft/pull/2669
FIX Failing target_parameters param usage count by @BenjaminBossan in https://github.com/huggingface/peft/pull/2676
Fix trainable tokens with fsdp by @BenjaminBossan in https://github.com/huggingface/peft/pull/2681
FIX: Small fixes to target_parameters by @BenjaminBossan in https://github.com/huggingface/peft/pull/2677
TST: Add more HF Hub model caching by @BenjaminBossan in https://github.com/huggingface/peft/pull/2682
FIX: Missing device map for facebook/opt-125m by @BenjaminBossan in https://github.com/huggingface/peft/pull/2675
Fix not detecting regex-targeted embedding layer by @githubnemo in https://github.com/huggingface/peft/pull/2649
Add MiSS as a replacement for Bone. by @JL-er in https://github.com/huggingface/peft/pull/2604
[WIP] ENH: Adapter injection based on state_dict by @BenjaminBossan in https://github.com/huggingface/peft/pull/2637
Release 0.17.0 by @BenjaminBossan in https://github.com/huggingface/peft/pull/2691
New Contributors
@kaixuanliu made their first contribution in https://github.com/huggingface/peft/pull/2626
@kkb-code made their first contribution in https://github.com/huggingface/peft/pull/2584
@cx-alberto-simoes made their first contribution in https://github.com/huggingface/peft/pull/2659
@efraimdahl made their first contribution in https://github.com/huggingface/peft/pull/2643
Full Changelog: https://github.com/huggingface/peft/compare/v0.16.0...v0.17.0