# Datawhale AI 夏令营
夏令营手册:从零入门 AI 逻辑推理
比赛:第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估
代码运行平台:魔搭社区
大模型微调
LoRA
LoRA(Low-Rank Adaptation)微调是一种高效的模型微调技术,特别适用于大型预训练语言模型的适应性调整。LoRA的核心思想是通过引入低秩矩阵来调整模型的权重,从而在不显著增加模型参数数量的情况下,实现对模型的微调。
优势
- 可以针对不同的下游任务构建小型 LoRA 模块,从而在共享预训练模型参数基础上有效地切换下游任务。
- LoRA 使用自适应优化器(Adaptive Optimizer),不需要计算梯度或维护大多数参数的优化器状态,训练更有效、硬件门槛更低。
- LoRA 使用简单的线性设计,在部署时将可训练矩阵与冻结权重合并,不存在推理延迟。
- LoRA 与其他方法正交,可以组合。
基本原理
代码
定义LoraConfig
from peft import LoraConfig, TaskType, get_peft_model
config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
inference_mode=False, # 训练模式
r=8, # Lora 秩
lora_alpha=32, # Lora alaph,具体作用参见 Lora 原理
lora_dropout=0.1# Dropout 比例
)
config
LoraConfig
LoRA的配置类
task_type
:模型类型target_modules
:需要训练的模型层的名字,主要就是attention
部分的层,不同的模型对应的层的名字不同,可以传入数组,也可以字符串,也可以正则表达式。r
:lora
的秩,具体可以看Lora
原理lora_alpha
:Lora alaph
,具体作用参见Lora
原理
Lora
的缩放是什么,这个缩放就是lora_alpha/r
, 在这个LoraConfig
中缩放就是4倍。
创建PeftModel
使用 get_peft_model()
函数创建一个 PeftModel
。
它需要一个基本模型(您可以从 Transformers
库加载)和 LoraConfig
,其中包含如何配置模型以使用 LoRA 进行训练的参数。
model = get_peft_model(model, config)
config
model.print_trainable_parameters()
自定义 TrainingArguments 参数
args = TrainingArguments(
output_dir="./output/Qwen2_instruct_lora",
per_device_train_batch_size=1,
gradient_accumulation_steps=4,
logging_steps=10,
num_train_epochs=1,
save_steps=100,
learning_rate=1e-4,
save_on_each_node=True,
gradient_checkpointing=True
)
TrainingArguments
设置训练参数
output_dir
:模型的输出路径per_device_train_batch_size
:顾名思义batch_size
gradient_accumulation_steps
: 梯度累加,如果你的显存比较小,那可以把batch_size
设置小一点,梯度累加增大一些。logging_steps
:多少步,输出一次log
num_train_epochs
:顾名思义epoch
gradient_checkpointing
:梯度检查,这个一旦开启,模型就必须执行model.enable_input_require_grads()
,这个原理大家可以自行探索
模型训练
trainer = Trainer(
model=model,
args=args,
train_dataset=tokenized_id,
data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer, padding=True),
)
torch.backends.cuda.enable_mem_efficient_sdp(False)
trainer.train()