Transformers 文档
PEFT
并获取增强的文档体验
开始使用
PEFT
PEFT 是一个参数高效微调方法库,可以在消费级 GPU 上训练和存储大型模型。这些方法仅在预训练模型之上微调少量额外的模型参数,也称为适配器。由于 GPU 不需要存储预训练基础模型的优化器状态和梯度,因此可以节省大量内存。适配器非常轻量级,便于共享、存储和加载。
本指南简要介绍了 PEFT 库以及如何将其与 Transformers 一起用于训练。有关更多详细信息,请参阅 PEFT 文档。
使用以下命令安装 PEFT。
pip install -U peft
PEFT 目前支持 Transformers 的 LoRA、IA3 和 AdaLoRA 方法。要使用其他 PEFT 方法(例如提示学习或提示调优),请直接使用 PEFT 库。
低秩适配 (LoRA) 是一种非常常见的 PEFT 方法,它将权重矩阵分解为两个较小的可训练矩阵。首先定义一个 LoraConfig 对象,参数如下所示。
from peft import LoraConfig, TaskType, get_peft_model
from transformers import AutoModelForCausalLM
# create LoRA configuration object
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM, # type of task to train on
inference_mode=False, # set to False for training
r=8, # dimension of the smaller matrices
lora_alpha=32, # scaling factor
lora_dropout=0.1 # dropout of LoRA layers
)
使用 add_adapter() 将 LoraConfig 添加到模型中。现在模型已准备好传递给 Trainer 进行训练。
model.add_adapter(lora_config, adapter_name="lora_1")
trainer = Trainer(model=model, ...)
trainer.train()
要在附加了现有适配器的模型之上添加额外的可训练适配器,请在 modules_to_save() 中指定要训练的模块。
例如,要在附加了 LoRA 适配器的因果语言模型之上训练 lm_head
模块,请设置 modules_to_save=["lm_head"]
。如下所示将适配器添加到模型中,然后将其传递给 Trainer。
from transformers import AutoModelForCausalLM
from peft import LoraConfig
model = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b")
lora_config = LoraConfig(
target_modules=["q_proj", "k_proj"],
modules_to_save=["lm_head"],
)
model.add_adapter(lora_config)
trainer = Trainer(model=model, ...)
trainer.train()
使用 save_pretrained() 保存您的适配器以重复使用。
加载适配器
要使用 Transformers 加载适配器,Hub 存储库或本地目录必须包含 adapter_config.json
文件和适配器权重。使用 from_pretrained() 或 load_adapter() 加载适配器。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("klcsp/gemma7b-lora-alpaca-11-v1")
对于非常大的模型,加载模型的 8 位或 4 位精度量化版本有助于节省内存。Transformers 通过其 bitsandbytes 集成支持量化。在 BitsAndBytesConfig 中指定您要以 8 位还是 4 位精度加载模型。
对于多设备,添加 device_map="auto"
以自动在您的硬件上分配模型。
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
model = AutoModelForCausalLM.from_pretrained(
"klcsp/gemma7b-lora-alpaca-11-v1",
quantization_config=BitsAndBytesConfig(load_in_8bit=True),
device_map="auto",
)
设置适配器
add_adapter() 向模型添加新适配器。要添加第二个适配器,新适配器必须与第一个适配器类型相同。使用 adapter_name
参数为适配器分配名称。
model.add_adapter(lora_config, adapter_name="lora_2")
添加后,使用 set_adapter() 强制模型使用指定的适配器并禁用其他适配器。
model.set_adapter("lora_2")
启用和禁用适配器
enable_adapters() 是一个更广泛的函数,它启用附加到模型的所有适配器,而 disable_adapters() 禁用所有附加的适配器。
model.add_adapter(lora_1)
model.add_adapter(lora_2)
model.enable_adapters()
# disable all adapters
model.disable_adapters()