Quicktour
Quicktour
π PEFT contains parameter-efficient finetuning methods for training large pretrained models. The traditional paradigm is to finetune all of a modelβs parameters for each downstream task, but this is becoming exceedingly costly and impractical because of the enormous number of parameters in models today. Instead, it is more efficient to train a smaller number of prompt parameters or use a reparametrization method like low-rank adaptation (LoRA) to reduce the number of trainable parameters.
This quicktour will show you πPEFTβs main features and help you train large pretrained models that would typically be inaccessible on consumer devices. Youβll see how to train the 1.2B parameter bigscience/mt0-large
model with LoRA to generate a classification label and use it for inference.
PeftConfig
Each π PEFT method is defined by a PeftConfig class that stores all the important parameters for building a PeftModel.
Because youβre going to use LoRA, youβll need to load and create a LoraConfig class. Within LoraConfig
, specify the following parameters:
the
task_type
, or sequence-to-sequence language modeling in this caseinference_mode
, whether youβre using the model for inference or notr
, the dimension of the low-rank matriceslora_alpha
, the scaling factor for the low-rank matriceslora_dropout
, the dropout probability of the LoRA layers
Copied
π‘ See the LoraConfig reference for more details about other parameters you can adjust.
PeftModel
A PeftModel is created by the get_peft_model()
function. It takes a base model - which you can load from the π Transformers library - and the PeftConfig containing the instructions for how to configure a model for a specific π PEFT method.
Start by loading the base model you want to finetune.
Copied
Wrap your base model and peft_config
with the get_peft_model
function to create a PeftModel. To get a sense of the number of trainable parameters in your model, use the print_trainable_parameters
method. In this case, youβre only training 0.19% of the modelβs parameters! π€
Copied
That is it π! Now you can train the model using the π Transformers Trainer, π Accelerate, or any custom PyTorch training loop.
Save and load a model
After your model is finished training, you can save your model to a directory using the save_pretrained function. You can also save your model to the Hub (make sure you log in to your BOINC AI account first) with the push_to_hub function.
Copied
This only saves the incremental π PEFT weights that were trained, meaning it is super efficient to store, transfer, and load. For example, this bigscience/T0_3B
model trained with LoRA on the twitter_complaints
subset of the RAFT dataset only contains two files: adapter_config.json
and adapter_model.bin
. The latter file is just 19MB!
Easily load your model for inference using the from_pretrained function:
Copied
Easy loading with Auto classes
If you have saved your adapter locally or on the Hub, you can leverage the AutoPeftModelForxxx
classes and load any PEFT model with a single line of code:
Copied
Currently, supported auto classes are: AutoPeftModelForCausalLM
, AutoPeftModelForSequenceClassification
, AutoPeftModelForSeq2SeqLM
, AutoPeftModelForTokenClassification
, AutoPeftModelForQuestionAnswering
and AutoPeftModelForFeatureExtraction
. For other tasks (e.g. Whisper, StableDiffusion), you can load the model with:
Copied
Next steps
Now that youβve seen how to train a model with one of the π PEFT methods, we encourage you to try out some of the other methods like prompt tuning. The steps are very similar to the ones shown in this quickstart; prepare a PeftConfig for a π PEFT method, and use the get_peft_model
to create a PeftModel from the configuration and base model. Then you can train it however you like!
Feel free to also take a look at the task guides if youβre interested in training a model with a πPEFT method for a specific task such as semantic segmentation, multilingual automatic speech recognition, DreamBooth, and token classification.
Last updated