Qwen3.5-2B微调保姆级教程(非常详细),LoRA实战从入门到精通,收藏这一篇就够了!
本文将完整带你走通**通义千问****3.5-2B****模型**的LoRA微调全流程,代码可直接复制运行,适合新手入门大模型微调,消费级显卡。
本文将完整带你走通通义千问3.5-2B模型的LoRA微调全流程,代码可直接复制运行,适合新手入门大模型微调,消费级显卡。
一、项目概述与环境准备
**1.**项目目标
我们将使用**LoRA****(Low-Rank Adaptation)**技术对Qwen/Qwen3.5-2B进行轻量级微调,在保留模型通用能力的同时,让它适配特定任务(如对话、知识问答)。
**2.**核心依赖安装
# 安装核心依赖
pip install -q transformers datasets peft accelerate bitsandbytes torch sentencepiece
**3.**关键库说明
•transformers: 加载模型与Tokenizer
•peft: 实现LoRA微调
•bitsandbytes: 4/8位量化,节省显存
•accelerate: 分布式训练加速
•datasets: 处理自定义数据集
二、加载模型与****Tokenizer
**1.**加载量化模型
import torch
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
)
# 4位量化配置
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model_name = "Qwen/Qwen3.5-2B"
# 加载模型
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
# 加载Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
**2.**测试模型基础能力
# 简单测试
prompt = "你好,介绍一下你自己。"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(
**inputs,
max_new_tokens=200,
temperature=0.7,
do_sample=True
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
三、准备自定义数据集
**1.**数据集格式
我们使用对话格式数据集,也可以通过大模型输出结构化数据结构的数据集,示例如下:
[
{
"instruction": "请解释什么是LoRA微调?",
"input": "",
"output": "LoRA(Low-Rank Adaptation)是一种轻量级微调技术,通过在模型Transformer层插入低秩矩阵,仅训练少量参数即可适配新任务,大幅降低显存占用和训练成本。"
},
{
"instruction": "写一段关于春天的短句",
"input": "",
"output": "春风拂过,柳丝轻摇,暖阳洒在刚冒芽的青草上,万物都在温柔地苏醒。"
}
]
**2.**加载与预处理数据集
from datasets import load_dataset
# 加载本地JSON数据集(替换为你的文件路径)
dataset = load_dataset("json", data_files="custom_data.json")
# 数据格式化函数
def format_prompt(sample):
return f"""<|im_start|>user
{sample['instruction']} {sample['input']}<|im_end|>
<|im_start|>assistant
{sample['output']}<|im_end|>"""
# 应用格式化
dataset = dataset.map(lambda x: {"text": format_prompt(x)})
**3.**划分训练集与测试集
dataset = dataset["train"].train_test_split(test_size=0.1)
train_dataset = dataset["train"]
eval_dataset = dataset["test"]
四、Tokenizer数据处理
def tokenize_function(examples):
return tokenizer(
examples["text"],
truncation=True,
max_length=512,
padding="max_length"
)
# 对数据集进行Token化
tokenized_train = train_dataset.map(tokenize_function, batched=True, remove_columns=["text"])
tokenized_eval = eval_dataset.map(tokenize_function, batched=True, remove_columns=["text"])
# 设置标签(与输入ID一致,用于语言建模)
tokenized_train.set_format("torch", columns=["input_ids", "attention_mask", "labels"])
tokenized_eval.set_format("torch", columns=["input_ids", "attention_mask", "labels"])
tokenized_train = tokenized_train.map(lambda x: {"labels": x["input_ids"]})
tokenized_eval = tokenized_eval.map(lambda x: {"labels": x["input_ids"]})
五、LoRA微调配置
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=8, # 秩
lora_alpha=32, # 缩放因子alpha 一般设置为 r 的 4 倍
target_modules=["q_proj", "v_proj"], # 目标模块
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
# 包装模型为LoRA模型
model = get_peft_model(model, lora_config)
model.print_trainable_parameters() # 查看可训练参数比例
参数含义:
1. r=8 → 秩(Rank)
通俗意思:
LoRA 矩阵的大小,决定你训练多少新知识
作用:
LoRA 不训练全模型,只训练两个小矩阵
r 就是这两个小矩阵的 “宽度”
r 越大 → 学的越多 → 占显存越大 → 训练越慢
r 越小 → 学的越少 → 轻量化、快、稳
常用值:
轻量对话:4, 8(推荐)
复杂任务:16, 32, 64
新手建议:
直接用 r=8 最稳、最快、最省显存
2. lora_alpha=32 → 缩放因子(Scaling)
通俗意思:
LoRA 学习强度 = 学习力度旋钮
作用:
控制 LoRA 权重对原模型的影响强度
alpha 越大 → LoRA 影响越强
alpha 越小 → 越柔和
经验规则(非常重要):
alpha 一般设置为 r 的 4 倍
r=8 → alpha=32
r=16 → alpha=64
r=4 → alpha=16
新手建议:
跟着 r 走就行,不用乱改
3. target_modules=["q_proj", "v_proj"] → 训练目标模块
通俗意思:
你要对模型的哪些 “神经层” 动手微调
作用:
Transformer 里最重要的层是:
q_proj
k_proj
v_proj
out_proj /
o_proj
为什么常用
q_proj, v_proj?
因为这两个层效果最好、最稳定、训练最快
几乎所有开源模型(LLaMA、Qwen、GLM)都用这两个。
想更强可以全开:
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"]
新手建议:
默认 q_proj + v_proj 足够用
4. lora_dropout=0.05 → 随机失活
通俗意思:
防止过拟合(防止模型死记硬背训练集)
作用:
训练时随机 “关掉” 5% 的 LoRA 神经元,让模型更健壮、不背答案。
常用值:
0.05 ~ 0.1
新手建议:
0.05 最稳,不用改
5. bias="none" → 偏置项是否训练
通俗意思:
是否训练模型里很小的偏置参数(基本没用)
三个选项:
"none":不训练(最快、最常用)
"all":全部训练(没必要)
"lora_only":只训练 LoRA 相关的 bias
新手建议:
直接用 none
6. task_type="CAUSAL_LM" → 任务类型
通俗意思:
告诉 PEFT 你在做什么任务
任务类型:
CAUSAL_LM:因果语言模型(对话、续写、聊天)
SEQ_2_SEQ_LM:翻译、摘要
TOKEN_CLS:分类
QUESTION_ANS:问答
我们微调 Qwen 对话模型 → 必须用:
CAUSAL_LM
超简记忆口诀(新手必背)
- r=8 → 学多少
- alpha=32→ 学习力度
- q_proj, v_proj → 微调核心层
- dropout=0.05→ 防止过拟合
- bias=none→ 不动小参数
- CAUSAL_LM→ 对话任务
六、设置训练参数并启动训练
from transformers import TrainingArguments, Trainer, DataCollatorForLanguageModeling
training_args = TrainingArguments(
output_dir="./qwen3.5-2b-lora",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
logging_steps=10,
evaluation_strategy="epoch",
save_strategy="epoch",
fp16=True,
optim="paged_adamw_8bit",
report_to="none"
)
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_train,
eval_dataset=tokenized_eval,
data_collator=data_collator
)
# 开始训练
trainer.train()
七、保存与加载微调后的模型
1.保存LoRA****适配器
model.save_pretrained("./qwen3.5-2b-lora-final")
tokenizer.save_pretrained("./qwen3.5-2b-lora-final")
**2.**加载微调后模型并推理
from peft import PeftModel, PeftConfig
peft_config = PeftConfig.from_pretrained("./qwen3.5-2b-lora-final")
base_model = AutoModelForCausalLM.from_pretrained(
peft_config.base_model_name_or_path,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
fine_tuned_model = PeftModel.from_pretrained(base_model, "./qwen3.5-2b-lora-final")
# 测试微调效果
prompt = "<|im_start|>user\n请解释什么是LoRA微调?<|im_end|>\n<|im_start|>assistant\n"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = fine_tuned_model.generate(
**inputs,
max_new_tokens=300,
temperature=0.7,
do_sample=True
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
八、下一步计划与总结
**1.**下一步优化方向
•调整LoRA参数(r、alpha)提升效果
•尝试更大的数据集或多轮训练
•结合RLHF进一步对齐人类偏好
•部署为API服务或Web应用
**2.**核心总结
✅ LoRA****优势:仅训练~0.1%参数,显存占用低,训练速度快
✅ 量化关键:4位量化让2B模型在单张消费级GPU上即可微调
✅ 流程闭环:从数据准备到模型推理,完整覆盖大模型微调全链路
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐



所有评论(0)