手把手教你微调 Qwen3.5-2B:从0到1的LoRA实战指南
本文将完整带你走通通义千问3.5-2B模型的LoRA微调全流程,代码可直接复制运行,适合新手入门大模型微调,消费级显卡。
一、项目概述与环境准备
- 项目目标
我们将使用LoRA(Low-Rank Adaptation)技术对Qwen/Qwen3.5-2B进行轻量级微调,在保留模型通用能力的同时,让它适配特定任务(如对话、知识问答)。
- 核心依赖安装
# 安装核心依赖pip install -q transformers datasets peft accelerate bitsandbytes torch sentencepiece
- 关键库说明
transformers: 加载模型与Tokenizer
peft: 实现LoRA微调
bitsandbytes: 4/8位量化,节省显存
accelerate: 分布式训练加速
datasets: 处理自定义数据集
二、加载模型与Tokenizer
- 加载量化模型
import torchfrom 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)# 加载Tokenizertokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)tokenizer.pad_token = tokenizer.eos_tokentokenizer.padding_side = "right"
- 测试模型基础能力
# 简单测试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))
三、准备自定义数据集
- 数据集格式
我们使用对话格式数据集,也可以通过大模型输出结构化数据结构的数据集,示例如下:
[ { "instruction": "请解释什么是LoRA微调?", "input": "", "output": "LoRA(Low-Rank Adaptation)是一种轻量级微调技术,通过在模型Transformer层插入低秩矩阵,仅训练少量参数即可适配新任务,大幅降低显存占用和训练成本。" }, { "instruction": "写一段关于春天的短句", "input": "", "output": "春风拂过,柳丝轻摇,暖阳洒在刚冒芽的青草上,万物都在温柔地苏醒。" } ]
- 加载与预处理数据集
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)})
- 划分训练集与测试集
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_modellora_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=32r=16 → alpha=64r=4 → alpha=16新手建议:跟着 r 走就行,不用乱改3. target_modules=["q_proj", "v_proj"] → 训练目标模块通俗意思:你要对模型的哪些 “神经层” 动手微调作用:Transformer 里最重要的层是:q_projk_projv_projout_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新手建议:直接用 none6. 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, DataCollatorForLanguageModelingtraining_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()
七、保存与加载微调后的模型
- 保存LoRA适配器
model.save_pretrained("./qwen3.5-2b-lora-final")tokenizer.save_pretrained("./qwen3.5-2b-lora-final")
- 加载微调后模型并推理
from peft import PeftModel, PeftConfigpeft_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))
八、下一步计划与总结
- 下一步优化方向
调整LoRA参数(r、alpha)提升效果
尝试更大的数据集或多轮训练
结合RLHF进一步对齐人类偏好
部署为API服务或Web应用
- 核心总结
✅ LoRA优势:仅训练~0.1%参数,显存占用低,训练速度快
✅ 量化关键:4位量化让2B模型在单张消费级GPU上即可微调
✅ 流程闭环:从数据准备到模型推理,完整覆盖大模型微调全链路
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
👇👇扫码免费领取全部内容👇👇
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 2026行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
更多推荐


所有评论(0)