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

【大模型原理与微调实战14】LoRA微调完整代码实战(一键可跑):标准SFT训练、参数配置、训练日志、保存权重全流程落地

专辑专栏:大模型原理与微调实战|从Transformer底层到大模型定制落地

文章标签:#大模型 #LLM #LoRA #微调实战 #SFT训练 #大模型落地 #代码实战

阅读前置:前面13篇我们完成了全套原理、避坑、环境搭建、数据集清洗。本篇进入真正落地环节,给出工业级、可直接一键运行的 LoRA-SFT 完整微调代码。

上节回顾:上一篇我们完成了标准 SFT 数据集构建,清洗、去重、标准化全部完成。本篇直接使用标准数据集,从零跑通完整训练流程。


前言

很多新手学微调最大的痛点:

网上代码残缺、参数乱、框架不统一、能跑但效果烂、各种显存报错、不会配置量化、不会改超参。

本篇给大家一套工业级、最简、零报错、适配所有个人GPU的完整 LoRA 微调代码。

适配:Qwen、LLaMA2、Mistral、ChatGLM3 主流7B模型

适配设备:6G/8G/12G 家用GPU、服务器全部通杀

包含:量化加载、LoRA配置、训练参数、日志输出、自动保存最优权重

跑完本篇代码,你就真正掌握大模型微调落地能力


一、本次训练整体流程(工业标准)

1. 加载基座模型 + Tokenizer

2. INT8 量化加载(极大节省显存)

3. 加载标准 SFT 问答数据集

4. 配置 LoRA 轻量化微调参数

5. 配置万能训练超参(不拟合、不崩、稳收敛)

6. 开始训练、输出 Loss 日志、自动保存最佳 LoRA 权重

7. 训练结束可直接推理测试效果


二、万能工业级超参(直接照搬,无需修改)

经过前面原理篇验证,这套参数适配99%微调场景

- 学习率:1.5e-4

- Epoch:3

- BatchSize:4

- LoRA Rank:16

- LoRA Alpha:32

- 精度:INT8 训练

- 优化器:AdamW

- 学习率策略:cosine 余弦退火

特点:不欠拟合、不过拟合、不崩模型、小样本效果极佳


三、完整可直接运行 LoRA 微调代码

将上一篇生成的sft_train_data.json和代码放在同一目录,直接运行即可。

import json import torch from datasets import Dataset from transformers import ( AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer, DataCollatorForLanguageModeling ) from peft import LoraConfig, get_peft_model, prepare_model_for_int8_training # ===================== 1. 基础配置(按需修改模型路径)===================== model_path = "qwen-7b-chat" # 本地模型路径 data_path = "sft_train_data.json" output_dir = "lora_sft_output" # ===================== 2. LoRA核心配置(工业标准)===================== lora_config = LoraConfig( r=16, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) # ===================== 3. 加载模型+量化INT8(省显存核心)===================== tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained( model_path, load_in_8bit=True, # 开启INT8训练 torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) model = prepare_model_for_int8_training(model) model = get_peft_model(model, lora_config) model.print_trainable_parameters() # 输出:可训练参数极低,证明LoRA生效 # ===================== 4. 加载SFT数据集 ===================== def load_sft_data(path): with open(path, "r", encoding="utf-8") as f: data = json.load(f) return data raw_data = load_sft_data(data_path) dataset = Dataset.from_list(raw_data) # ===================== 5. 数据集格式化 ===================== def format_prompt(prompt, response): return f"用户:{prompt}\n助手:{response}" def tokenize_func(example): text = format_prompt(example["prompt"], example["response"]) res = tokenizer( text, truncation=True, max_length=512, padding="max_length" ) res["labels"] = res["input_ids"].copy() return res train_dataset = dataset.map(tokenize_func) # ===================== 6. 训练参数(万能黄金参数)===================== train_args = TrainingArguments( output_dir=output_dir, per_device_train_batch_size=4, learning_rate=1.5e-4, num_train_epochs=3, logging_steps=10, save_strategy="epoch", fp16=True, optim="adamw_torch", lr_scheduler_type="cosine", warmup_ratio=0.1, report_to="none" ) data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False) # ===================== 7. 启动训练 ===================== trainer = Trainer( model=model, train_dataset=train_dataset, args=train_args, data_collator=data_collator ) if __name__ == "__main__": trainer.train() trainer.save_model(output_dir + "/best_lora") print("✅ LoRA微调训练完成,权重已保存!")

四、代码逐段通俗讲解(小白必看)

4.1 INT8 量化加载

普通7B模型 FP16 需要13G显存,开启INT8仅需6G显存

家用 6G/8G 显卡唯一可行的训练方式。

4.2 LoRA 配置解析

只训练注意力层的 q、v 矩阵,冻结整个大模型。

优点:不遗忘、不崩模型、显存极低、小样本极强

4.3 数据拼接模板

统一「用户:xxx \n 助手:xxx」对话格式,和官方对齐,训练效果最稳。

4.4 学习率 + Epoch 黄金组合

1.5e-4 + 3epoch 是千次实战验证的最稳不拟合参数


五、训练成功的日志表现

正常训练状态:

1. Loss 稳步缓慢下降,不震荡、不飙升

2. 每轮 Epoch 自动保存权重

3. 可训练参数仅 0.1%~0.5% 左右(证明是LoRA微调)

异常状态:

Loss 直接归零 = 过拟合(数据太少或Epoch太高)

Loss 完全不动 = 学习率太低 / 数据格式错误


六、训练后得到什么?

训练结束后文件夹生成:best_lora文件夹

大小仅几十 MB,不是几十GB原模型

这就是我们的行业专属能力权重:

- 不改变原模型通用能力

- 新增你的行业知识、专属话术、固定输出风格


七、微调后快速测试代码(立即看效果)

训练完直接运行下面代码,查看微调效果:

from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer model_path = "qwen-7b-chat" lora_path = "lora_sft_output/best_lora" tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_path, load_in_8bit=False, device_map="auto", trust_remote_code=True ) model = PeftModel.from_pretrained(model, lora_path) def chat(prompt): inputs = tokenizer(f"用户:{prompt}\n助手:", return_tensors="pt").cuda() outputs = model.generate(**inputs, max_new_tokens=300, temperature=0.5) return tokenizer.decode(outputs[0], skip_special_tokens=True) # 测试你的行业问题 print(chat("你的专业问题"))

八、本节总结

1. 本篇给出工业级可直接落地的LoRA完整微调代码

2. INT8量化训练,低配显卡也能跑7B模型微调;

3. 全套黄金超参,稳、不崩、不拟合、效果好;

4. 训练产出轻量化LoRA权重,可随时加载、替换、部署;

5. 真正实现:自己的数据 → 自己的专属大模型


九、下节预告

下一篇第十五篇:LoRA权重融合 + 永久固化模型,教大家把LoRA小权重和原模型合并,生成独立全新模型,脱离微调框架也能直接部署、量化、上线!


专辑订阅提示:全网最完整零基础大模型微调落地专栏,从原理→数据→训练→融合→量化→部署全闭环!

http://www.cnnetsun.cn/news/3204048.html

相关文章:

  • 高压隔离设计:ISOM8710与STM32F205RB的实战指南
  • 【2026最新】Adobe Lightroom Classic 15.3最新版怎么装?
  • 中兴光猫工厂模式终极指南:zteOnu一键解锁完整教程
  • Java毕设选题推荐:基于 SpringBoot 的高校车辆档案管理系统的设计与实现 基于 SpringBoot+Vue 的智慧校园车辆管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 锂离子电池过压保护方案与BQ29200芯片应用详解
  • 小微企业低成本勒索软件防护实战指南:从攻击链分析到自动化脚本部署
  • 平阳高性价比婚庆布置优势
  • 一个问题,轻松撕下DDD Fans的遮羞布
  • 埃氏筛与欧拉筛 Python 3.11 性能实测:10^7 数据量下耗时差 5 倍
  • AI视频分析并发优化性能优化指南
  • Linux命令全家桶:进程、磁盘、排序、搜索、压缩——Xshell全实操
  • 网盘直链下载助手:7天精通九大网盘一键加速下载终极指南
  • EM3080-W与MKV44F64VLH16在工业条码识别中的硬件优化方案
  • 为什么跨国办公时业务系统总卡顿?一文读懂跨地域网络访问的底层逻辑
  • 收藏!互联网产品经理转AI的8大行业方向深度解析,小白也能看懂
  • 基于MK60DN和PAM8904的低功耗多级警报系统设计
  • 从SQL注入到RCE:Jeecg-Boot积木报表CVE-2023-4450漏洞复现与深度剖析
  • Prompt 模板引擎:别把规则直接写死进代码里
  • 新手入局干细胞研究的五大认知陷阱
  • 26年软考系规备考!超靠谱三位老师全方位推荐
  • CBAM 注意力模块 PyTorch 实战:ResNet-50 集成 3 步代码提升 ImageNet 精度 1.5%
  • 基于ComfyUI的AI漫剧制作:8G显存下的零人工干预方案
  • 酒吧大屏互动系统怎么选?酒吧/夜店老板看这篇文章就够了
  • Codex 最新版更新后一直在思考中?修复 Codex 更新后 Win10 加载混乱:升级系统并安装本地依赖项目空间指南
  • 用户分层智能指引开发|SpringBoot实现海淘新手场景化权限与引导系统
  • FigmaCN:3分钟将Figma界面变中文的完整解决方案
  • AI 生活日程编排:把重复决策交给规则,把例外留给模型
  • 武汉昆仑星自研监控系统介绍:从AI表现监测到复盘优化
  • 27国考省考笔试,临汾星途径如何用科学备考体系帮助考生高效进阶?
  • Hypervisor Sparkle 研究日志 - VMCS