模型sft全量微调与Lora微调的详细步骤和区别
发表于|更新于
|浏览量:
1. 全量微调(SFT)实现详解
1.1 基本原理
全量微调(Supervised Fine-Tuning)是指在下游任务上对预训练模型的所有参数进行微调。这种方法能够充分利用预训练模型的知识,并通过微调使其适应特定任务。
1.2 实现步骤
- 数据准备
1 2 3 4 5 6 7 8
| from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
def preprocess_function(examples): return tokenizer(examples["text"], truncation=True, padding="max_length")
dataset = dataset.map(preprocess_function, batched=True)
|
- 模型加载
1 2 3 4 5 6
| from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained( "bert-base-chinese", num_labels=2 )
|
- 训练配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from transformers import TrainingArguments, Trainer
training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=8, num_train_epochs=3, save_steps=10_000, save_total_limit=2, )
trainer = Trainer( model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["test"], )
|
- 开始训练
2. LoRA微调实现详解
2.1 基本原理
LoRA(Low-Rank Adaptation)是一种高效的微调方法,它通过低秩分解在原始模型参数旁添加可训练的小型矩阵,只训练这些新增参数而冻结原始模型参数。
2.2 实现步骤
- 安装依赖
- 配置LoRA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| from peft import LoraConfig, get_peft_model
lora_config = LoraConfig( r=8, lora_alpha=16, target_modules=["query", "value"], lora_dropout=0.1, bias="none", task_type="SEQ_CLS" )
model = AutoModelForSequenceClassification.from_pretrained( "bert-base-chinese", num_labels=2 )
model = get_peft_model(model, lora_config) model.print_trainable_parameters()
|
- 训练配置(与全量微调类似)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| training_args = TrainingArguments( output_dir="./lora_results", per_device_train_batch_size=8, num_train_epochs=3, learning_rate=1e-3, save_steps=10_000, save_total_limit=2, )
trainer = Trainer( model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["test"], )
|
- 开始训练
3. 两种方法的对比
特性 |
全量微调(SFT) |
LoRA微调 |
训练参数 |
全部参数 |
仅新增的低秩矩阵 |
显存占用 |
高 |
低 |
训练速度 |
慢 |
快 |
存储需求 |
大(保存整个模型) |
小(仅保存适配器) |
效果 |
通常更好 |
略低但接近 |
适用场景 |
数据充足、资源丰富 |
资源有限、快速迭代 |
4. 实际应用建议
选择全量微调当:
- 有充足的计算资源
- 下游任务与预训练任务差异较大
- 追求最佳模型性能
选择LoRA当:
- 计算资源有限
- 需要快速实验和迭代
- 需要微调多个不同任务
- 需要共享基础模型
5. 总结
全量微调和LoRA微调各有优劣,实际应用中应根据具体需求和资源情况选择。对于大多数场景,LoRA提供了很好的性价比,而全量微调则适合追求极致性能的情况。随着参数高效微调技术的发展,LoRA及其变种正在成为越来越主流的微调方式。