PEFT定制化LoRA模型配置
《PEFT定制化LoRA模型配置》共 0.1 万字,通篇围绕 LoRA、预训练、Transformer、推理 展开,归在「训练、微调与数据」这一层。
适合要自己训模型、或者判断这一版该不该训的人
目录骨架(3 节)
- 示例代码
- PEFT 配置
- PEFT 模型
示例代码
前言
如今大型预训练模型规模庞大(通常有数十亿参数),这对训练提出了重大挑战,因为它们需要更多的存储空间和更强大的计算能力来处理所有这些计算。您需要访问强大的 GPU 或 TPU 才能训练这些大型预训练模型,这既昂贵,又没有普及到每个人,也不环保,而且不是很实用。PEFT 方法解决了许多这些挑战。PEFT 方法有几种类型(软提示、矩阵分解、适配器),但它们都专注于同一件事:减少可训练参数的数量。这使得在消费级硬件上训练和存储大型模型变得更容易。
PEFT 库旨在帮助您在免费或低成本的 GPU 上快速训练大型模型。在本教程中,您将学习如何设置配置,以将 PEFT 方法应用于预训练的基础模型进行训练。一旦 PEFT 配置设置完成,您可以使用任何您喜欢的训练框架(Transformer 的 Trainer 类、Accelerate、自定义 PyTorch 训练循环)。
PEFT 配置
在各自的 API 参考页面中了解有关您可以为每种 PEFT 方法配置的参数的更多信息。
配置存储了重要的参数,这些参数指定了应如何应用特定的 PEFT 方法。
例如,看看以下用于应用 LoRA 的 LoraConfig 和用于应用 p-tuning 的 PromptEncoderConfig(这些配置文件已经 JSON 序列化)。每当您加载 PEFT 适配器时,最好检查它是否具有关联的 adapter_config.json 文件,这是必需的。
LoraConfig
PromptEncoderConfig
{
"base_model_name_or_path": "facebook/opt-350m", #base model to apply LoRA to
"bias": "none",
"fan_in_fan_out": false,
"inference_mode": true,
"init_lora_weights": true,
"layers_pattern": null,
"layers_to_transform": null,
"lora_alpha": 32,
"lora_dropout": 0.05,
"modules_to_save": null,
"peft_type": "LORA", #PEFT method type
"r": 16,
"revision": null,
"target_modules": [
"q_proj", #model modules to apply LoRA to (query and value projection layers)
"v_proj"
],
"task_type": "CAUSAL_LM" #type of task to train model on
}
您可以通过初始化 LoraConfig 来创建自己的训练配置。
from peft import LoraConfig, TaskType
lora_config = LoraConfig(
r=16,
target_modules=["q_proj", "v_proj"],
task_type=TaskType.CAUSAL_LM,
lora_alpha=32,
lora_dropout=0.05
)
PEFT 模型
有了 PEFT 配置,您现在可以将其应用于任何预训练模型,以创建 PeftModel。从 Transformers 库中的任何最先进的模型、自定义模型,甚至新的和不受支持的 Transformer 架构中进行选择。
在本教程中,加载一个基础模型 facebook/opt-350m 以进行微调。
