Transformers 文档
PEFT
并获得增强的文档体验
开始使用
PEFT
PEFT 是一个参数高效微调方法库,它支持在消费级 GPU 上训练和存储大型模型。这些方法只对预训练模型基础之上的一小部分额外模型参数(也称为适配器)进行微调。由于 GPU 不需要存储预训练基础模型的优化器状态和梯度,因此可以节省大量的内存。适配器非常轻量,便于共享、存储和加载。
本指南简要介绍了 PEFT 库以及如何在 Transformers 中使用它进行训练。有关更多详细信息,请参阅 PEFT 文档。
使用以下命令安装 PEFT。
pip install -U peft
PEFT 目前支持 Transformers 的 LoRA、IA3 和 AdaLoRA 方法。要使用其他 PEFT 方法,例如 prompt learning 或 prompt tuning,请直接使用 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()