一、为什么需要微调?

预训练大模型(如GPT、Llama、Qwen)具备强大的通用能力,但在垂直领域往往表现不佳。微调(Fine-tuning)通过在特定领域数据上继续训练,让模型"学会"你的业务知识、术语和风格。

回到顶部

二、LoRA为什么是最佳选择?

LoRA(Low-Rank Adaptation)的核心思想是:冻结预训练模型的原始权重,只训练两个低秩矩阵(A和B)。这将可训练参数量大幅降低,成本大幅减少。

回到顶部

三、环境准备

安装依赖:

pip install transformers peft datasets accelerate bitsandbytes

回到顶部

四、完整实战代码

4.1 数据准备

from datasets import load_dataset

train_data = [
    {"instruction": "请用Java实现一个线程池", "input": "", "output": "..."},
]

4.2 配置LoRA

from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B-Instruct", device_map="auto", load_in_4bit=True)

lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()

4.3 训练配置

training_args = TrainingArguments(
    output_dir="./lora_output",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    learning_rate=2e-4,
    fp16=True,
)
trainer = Trainer(model=model, args=training_args, train_dataset=train_dataset)
trainer.train()
model.save_pretrained("./lora_weights")

4.4 推理

from peft import PeftModel

model = PeftModel.from_pretrained(base_model, "./lora_weights")
model.eval()

def chat(prompt):
    inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
    outputs = model.generate(**inputs, max_new_tokens=512)
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

回到顶部

五、实战效果对比

场景微调前LoRA微调后
专业术语准确率~45%~92%
显存占用28GB+~6GB
训练时间(3B模型)数周(不可行)~4小时
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐