1 介绍
- PEFT 提供了参数高效的方法来微调大型预训练模型。
- 传统的范式是为每个下游任务微调模型的所有参数,但由于当前模型的参数数量巨大,这变得极其昂贵且不切实际。
- 相反,训练较少数量的提示参数或使用诸如低秩适应 (LoRA) 的重新参数化方法来减少可训练参数数量是更有效的
2 训练
2.1 加载并创建 LoraConfig 类
- 每种 PEFT 方法都由一个 PeftConfig 类定义,该类存储了构建 PeftModel 的所有重要参数
- eg:使用 LoRA 进行训练,加载并创建一个 LoraConfig 类,并指定以下参数
- task_type:要训练的任务(在本例中为序列到序列语言建模)
- inference_mode:是否将模型用于推理
- r:低秩矩阵的维度
- lora_alpha:低秩矩阵的缩放因子
- lora_dropout:LoRA 层的丢弃概率
from peft import LoraConfig, TaskType
peft_config = LoraConfig(
task_type=TaskType.SEQ_2_SEQ_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1)
2.2 创建 PeftModel
- 一旦设置了 LoraConfig,就可以使用 get_peft_model() 函数创建一个 PeftModel
- 需要一个基础模型 - 可以从 Transformers 库加载 -
- 以及包含如何配置 LoRA 模型参数的 LoraConfig
2.2.1 加载需要微调的基础模型
from transformers import AutoModel,AutoTokenizer
import os
import torch
os.environ["HF_TOKEN"] = '*'
#huggingface的私钥
tokenizer=AutoTokenizer.from_pretrained('meta-llama/Meta-Llama-3-8B')
model=AutoModel.from_pretrained('meta-llama/Meta-Llama-3-8B',
torch_dtype=to