当前位置: 首页 > news >正文

大模型学习(二、使用lora进行微调)

目录

🧩 1. 什么是 SFT(Supervised Fine-Tuning)

(1)定义

(2)LOSS的数学表示

(3)一个真实的例子解释LOSS

2.什么是 LoRA(Low-Rank Adaptation)

(1)定义

3.示例代码

(1)数据集格式

(2)代码

(3)运行结果

(4)读取lora参数,重新进行模型推理


一、lora和SFT的介绍

🧩 1. 什么是 SFT(Supervised Fine-Tuning)

(1)定义

SFT = 监督微调
本质是:

用「输入 → 标准输出」对模型做有监督学习

形式:

用户:问题 AI:标准答案

训练目标:

特点:

  • 数据:成对的(prompt, answer)

  • loss:交叉熵

  • 和分类任务本质一样,只是输出是文本

👉 SFT 解决的是:
“模型该学什么行为?”

(2)LOSS的数学表示

语言模型的训练目标:

(3)一个真实的例子解释LOSS

这个输出的巴黎是标签。之后拿到对应标签模型输入的概率,之后log求和。

2.什么是 LoRA(Low-Rank Adaptation)

(1)定义

LoRA = 一种参数高效微调方法(PEFT)

核心思想:

❌ 不改原模型参数
✅ 只在部分层插入小矩阵并训练它们

数学上:
原本权重:

LoRA 改为:

3.示例代码

(1)数据集格式

{"system": "你是一个名为沐雪的可爱AI女孩子", "conversation": [{"human": "如何集中精力做一件事情", "assistant": "首当其冲的肯定是选择一个合适的地方啦,比如说图书馆之类的,如果你不想出去,那就找一个安静的地方吧。然后扔掉手机这类会让你分心的东西,或者关掉通知,确保你不会突然被打扰。明确你要做的事情,把它细化成分几步去完成,设置期限,任务完成之后放松放松。如果你感觉到累了不行了就去外面转转吧,喝一杯咖啡,思考让你停下来的地方,然后活力满满地继续接下来的工作。"}]}

(2)代码

from datasets import load_dataset from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer from peft import LoraConfig, get_peft_model import torch import json # ==================================================== # ① 模型路径与数据路径 # ==================================================== model_dir = r"C:\Users\64292\Desktop\大模型学习\xiaozhi\weitiao\Qwen2.5-1.5B-Instruct" data_path = r"C:\Users\64292\Desktop\大模型学习\xiaozhi\weitiao\competition_train.jsonl" # ==================================================== # ② 加载数据集 # ==================================================== dataset = load_dataset("json", data_files=data_path) # ==================================================== # ③ 预处理函数:把 system + human 拼成 prompt # ==================================================== def format_example(example): conversations = example["conversation"] if not conversations or len(conversations) == 0: return None conv = conversations[0] system = example.get("system", "") human = conv.get("human", "") assistant = conv.get("assistant", "") # 构建输入与输出 prompt = f"系统:{system}\n用户:{human}\nAI:" output = assistant.strip() return {"prompt": prompt, "output": output} dataset = dataset.map(format_example) dataset = dataset.filter(lambda x: x["prompt"] is not None) # ==================================================== # ④ 加载分词器与模型 # ==================================================== tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_dir, torch_dtype=torch.float16, device_map="auto" ) # ==================================================== # ⑤ LoRA 配置(低显存训练) # ==================================================== lora_config = LoraConfig( r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) model = get_peft_model(model, lora_config) # ==================================================== # ⑥ Tokenize 函数 # ==================================================== def preprocess(example): text = f"{example['prompt']}{example['output']}" tokenized = tokenizer(text, truncation=True, padding="max_length", max_length=512) tokenized["labels"] = tokenized["input_ids"].copy() return tokenized tokenized_ds = dataset.map(preprocess, remove_columns=dataset["train"].column_names) # ==================================================== # ⑦ 训练配置 # ==================================================== args = TrainingArguments( output_dir="./qwen2.5-1.5b-lora-muxue", per_device_train_batch_size=1, gradient_accumulation_steps=8, learning_rate=2e-4, num_train_epochs=3, fp16=True, logging_steps=10, save_steps=200, save_total_limit=2, report_to="none" ) # ==================================================== # ⑧ 训练启动 # ==================================================== trainer = Trainer( model=model, args=args, train_dataset=tokenized_ds["train"] ) trainer.train() # ==================================================== # ⑨ 保存权重 # ==================================================== model.save_pretrained("./qwen2.5-1.5b-lora-muxue") tokenizer.save_pretrained("./qwen2.5-1.5b-lora-muxue") print("✅ 微调完成!权重保存在 ./qwen2.5-1.5b-lora-muxue")

(3)运行结果

(4)读取lora参数,重新进行模型推理

from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel import torch # ① 原始模型路径(基础模型) base_model_dir = r"C:\Users\64292\Desktop\xiaozhi\weitiao\Qwen2.5-1.5B-Instruct" # ② LoRA 权重路径(你的微调结果) lora_dir = r"./qwen2.5-1.5b-lora-muxue" # ③ 加载分词器 print("🚀 正在加载分词器和模型...") tokenizer = AutoTokenizer.from_pretrained(lora_dir, trust_remote_code=True) # ④ 加载基础模型 base_model = AutoModelForCausalLM.from_pretrained( base_model_dir, torch_dtype=torch.float16, device_map="auto" ) # ⑤ 加载 LoRA 微调权重 model = PeftModel.from_pretrained(base_model, lora_dir) model.eval() print("✅ 已加载 Qwen + LoRA 微调权重(人格:沐雪)!\n") # ⑥ 设定人格系统提示词 system_prompt = "你是一个名为世君同学的可爱AI女孩子,性格温柔、活泼、善解人意,说话要自然可爱。" chat_history = f"系统:{system_prompt}\n" # ⑦ 聊天循环 while True: user_input = input("👤 你:").strip() if user_input.lower() in ["exit", "quit", "q"]: print("👋 沐雪:再见呀~记得想我哦 💖") break # 将用户输入加入上下文 chat_history += f"用户:{user_input}\nAI:" # 编码输入 inputs = tokenizer(chat_history, return_tensors="pt").to(model.device) # 模型生成 outputs = model.generate( **inputs, max_new_tokens=200, temperature=0.7, top_p=0.9, do_sample=True, pad_token_id=tokenizer.eos_token_id ) # 解码生成文本 reply = tokenizer.decode(outputs[0], skip_special_tokens=True) # 提取模型新增部分(去掉历史) new_text = reply[len(chat_history):].strip() # 输出结果 print(f"🤖 沐雪:{new_text}\n") # 更新上下文 chat_history += new_text + "\n"
http://www.jsqmd.com/news/311516/

相关文章:

  • 2026年行业内做得好的不锈钢法兰供应商找哪家,不锈钢管板/不锈钢法兰/锻件/变压器法兰/法兰,不锈钢法兰工厂哪家权威
  • springboot智慧乡村治理平台系统设计实现
  • springboot养宠物指南服务平台管理系统
  • springboot幼儿园管理系统设计开发实现
  • springboot在线图书借阅平台系统设计实现
  • 学长亲荐8个一键生成论文工具,专科生轻松搞定毕业论文!
  • 杰理之音量加按键按住一直播放最大音量提示音,持续一段时间异常死机【篇】
  • 杰理之DAC 24bit 频响获取异常【篇】
  • 剑指offer-69、数字序列中某⼀位的数字
  • 杰理之音乐模式下不停打断播放提示音,会出现异常死机【篇】
  • 2026年好用的点焊机品牌推荐,点焊机制造厂哪个值得选呢
  • 南昌推拉门选购,有哪些技术强且口碑好的品牌
  • 探寻系统门窗标杆之作市场口碑,贝克洛产品选购要点揭秘
  • 2026年品牌论坛优势大揭秘,十大平台排名
  • 2026年小型球磨机厂家排名,无锡新而立上榜了吗
  • 交通便利可靠酒店选购攻略,兰州靠谱的有哪些
  • 北京狗狗寄养哪家好?北京狗狗寄养哪家比较专业正规?2026年机构盘点
  • 神秘训练
  • 2025年最新气动高温调节阀批发厂家口碑排行榜单,精小型调节阀/调节阀/特种调节阀/气动高温调节阀/气动调节阀/气动三通调节阀调节阀企业排行
  • 2026年北京宠物寄养哪家好?北京宠物寄养专业正规机构盘点
  • JL-21-A3 低功耗雨量记录仪 准确监测 长期稳定记录
  • Oracle 26ai 本地通用版这次是真的来了
  • 实用指南:X-Macros(2)
  • 打卡信奥刷题(2763)用C++实现信奥题 P3800 Power 收集
  • GEO招商加盟服务价格多少,南方网通讯灵AI性价比高不高
  • 激光切管机正规厂商推荐,庆源激光售后服务怎么样
  • 手机版安卓版IDM下载神器,100Mb/s+!支持磁力!(附下载地址)
  • 【Vue】13 Vue技术—— Vue 中的键盘事件处理详解
  • 2026年上海老房改造装修公司推荐:同济经典设计,老旧房子装修/二手房装修翻新/老房装修/二手房装修/老房翻新装修公司精选
  • idea使用学习记录