> 技术文档 > Fine-tuning:微调技术,训练方式,LLaMA-Factory,MiniMind_ms-swift和llama factory

Fine-tuning:微调技术,训练方式,LLaMA-Factory,MiniMind_ms-swift和llama factory


1,微调技术

特征 Full-tuning Freeze-tuning LoRA QLoRA 训练参数量 全部 少量 极少 极少 显存需求 很低 最低 模型性能 最佳 中等 较好 接近 LoRA 模型修改方式 无变化 局部冻结 插入模块 量化+插入模块 多任务共享 不便 较便 非常适合 非常适合 适合超大模型微调 ✅(最优)

1.1,Full-tuning

Full-tuning(全参数微调):对模型的全部参数进行微调。训练过程中,所有层的权重都会被更新。

  • 加载预训练模型;

  • 所有参数设为可训练;

  • 使用下游任务的数据继续训练整个模型。

📈 优点

  • 最大化模型性能;

  • 可适配大幅度任务转变;

  • 简单直接,无结构变化。

📉 缺点

  • 资源消耗大:内存和显存使用高;

  • 训练时间长;

  • 在多任务场景下缺乏参数复用;

  • 不适合频繁变更的小任务定制(每次都得保存整套参数)。

适用场景

  • 对模型效果要求极高;

  • 拥有大量训练资源;

  • 任务和原始预训练任务差别较大。

1.2,Freeze-tuning 

Freeze-tuning(冻结微调):冻结预训练模型的部分或全部参数,仅微调某些新增模块(如分类头)或少数层。

  • 加载预训练模型;

  • 冻结大部分参数(如 Transformer encoder);

  • 仅微调一小部分,如最后几层或添加的下游任务层。

📈 优点

  • 节省计算资源;

  • 防止过拟合;

  • 训练速度快;

  • 对原始模型破坏小。

📉 缺点

  • 性能提升有限;

  • 表达能力受限,难以适配大跨度任务;

  • 调参难度大(决定哪些层冻结、哪些不冻结)。

适用场景

  • 轻量级部署;

  • 任务与预训练相似;

  • 快速原型验证。

1.3,LoRA

LoRA(Low-Rank Adaptation):LoRA是一种高效的参数高效微调方法,旨在通过低秩分解的方式对预训练模型进行微调。 相比于全参数微调(Full Fine-Tuning),LoRA 只需要更新少量的参数。LoRA 的核心思想是:在模型的权重矩阵中引入低秩分解,仅对低秩部分进行更新,而保持原始预训练权重不变。 

  • 不修改原始权重矩阵 W,而在其前后插入两个较小的可训练矩阵 A, B,构造为:

W^{\'}=W+\\alpha \\cdot AB

其中:A\\in \\mathbb{R}^{d\\times r},B\\in \\mathbb{R}^{r\\times d},r\\ll d

  • 进训练 A, B ,保持原始的权重不变。

📈 优点

  • 极大减少可训练参数数量(可减少至原来的 0.1%~1%);

  • 内存占用显著降低;

  • 适合多任务共享大模型,仅保存不同任务的低秩参数。

📉 缺点

  • 微调能力有限;

  • 可能无法达到 Full-tuning 的最优精度;

  • 在某些任务上收敛较慢。

适用场景

  • 多任务微调(如一个大模型服务多个业务);

  • 边缘设备或存储受限场景;

  • 希望在多个微调版本之间快速切换。

1.4,QLoRA

QLoRA(Quantized LoRA):在 LoRA 的基础上,将原始模型进行 量化(Quantization)(通常是 4-bit 量化),结合 LoRA 插件模块进行微调。

  • 使用 4-bit 量化将大模型压缩到极小显存占用;

  • 原始权重被量化,但仍然保持冻结状态;

  • LoRA 模块保持 float32/float16 精度进行训练;

  • 利用量化感知训练技术减少精度损失。

📈 优点

  • 显存占用极低(单卡 24GB GPU 可微调 65B 模型);

  • 准确率接近 LoRA;

  • 支持 CPU/GPU 微调;

  • 无需对全模型解冻,训练负担极小。

📉 缺点

  • 量化带来一定的数值不稳定性;

  • 性能略逊于全精度微调;

  • 对部署系统需支持混合精度和量化运算。

适用场景

  • 极端显存受限的环境;

  • 想在消费级设备(如笔记本、消费级 GPU)微调大模型;

  • 用于实验、原型开发和模型压缩部署。

2,训练方式

阶段 是否涉及标签 是否使用人类偏好 是否使用强化学习 典型方法/目标 Pre-Training 学习语言通用能力 Supervised Fine-Tuning 执行指令、完成任务 Reward Modeling ✅(对比标签) 构造奖励函数 PPO 提升人类偏好表现 DPO ✅(对比标签) ❌(间接) 更高效的人类偏好训练 KTO ✅(对比标签) 用 KL 优化拟合偏好分布 ORPO 离线优化,有效融合监督与偏好学习 SimPO 极简偏好优化方式

2.1,Pre-Training 

Pre-Training(预训练):预训练是整个语言模型生命周期的第一阶段,其目标是让模型掌握语言的基本结构、语义关系和常识知识。

  • 使用大规模无标签语料(如网页、图书、维基百科等);

  • 模型通常采用自监督学习目标,如:

    • Masked Language Modeling(BERT 系列):预测被遮盖的词;

    • Causal Language Modeling(GPT 系列):预测下一个词。

目标:学习词法、句法、语义、语言结构等通用能力,为下游任务打下基础。

特点

  • 数据量最大;

  • 训练时间最长;

  • 不依赖人工标注。

LLM首先要学习的并非直接与人交流,而是让网络参数中充满知识的墨水,“墨水” 理论上喝的越饱越好,产生大量的对世界的知识积累。预训练就是让Model先埋头苦学大量基本的知识,例如从Wiki百科、新闻、书籍整理大规模的高质量训练数据。这个过程是“无监督”的,即人类不需要在过程中做任何“有监督”的校正,而是由模型自己从大量文本中总结规律学习知识点。模型此阶段目的只有一个:学会词语接龙。例如我们输入“秦始皇”四个字,它可以接龙“是中国的第一位皇帝”。

2.2,Supervised Fine-Tuning

Supervised Fine-Tuning(有监督微调):在预训练模型基础上,使用有标签的数据集对模型进行微调,使其适配特定任务,如问答、摘要、分类等。

⚙️ 方法

  • 数据来源于人工标注或规则生成;

  • 常用损失函数为 Cross-Entropy;

  • 多用于 Instruct 模型训练(例如指令跟随数据,如 \"请翻译以下句子\")。

目标:让模型“听得懂”任务指令,具备基础的任务执行能力。

特点

  • 通常比预训练快;

  • 微调数据越高质量,模型行为越稳定;

  • 是 RLHF 流程的第一步。

经过预训练,LLM此时已经掌握了大量知识,然而此时它只会无脑地词语接龙,还不会与人聊天。SFT阶段就需要把半成品LLM施加一个自定义的聊天模板进行微调。例如模型遇到这样的模板【问题->回答,问题->回答】后不再无脑接龙,而是意识到这是一段完整的对话结束。称这个过程为指令微调,就如同让已经学富五车的「牛顿」先生适应21世纪智能手机的聊天习惯,学习屏幕左侧是对方消息,右侧是本人消息这个规律。

2.3,Reward Modeling

Reward Modeling(奖励建模):Reward Modeling 是强化学习前的关键步骤,用于训练一个奖励模型(Reward Model, RM),模拟人类偏好。

  • 输入:模型输出的多个候选答案;

  • 标签:由人类评审者对答案进行排序或打分;

  • 模型学习:预测哪个答案更好(即更符合人类偏好)。

目标:用一个可训练的模型替代人工打分,供后续强化学习优化使用。

特点

  • 训练的是一个新模型,不是语言模型本体;

  • 训练数据来源于人类偏好对比;

  • 是 RLHF(强化学习人类反馈)流程的桥梁环节。

人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF):在前面的训练步骤中,模型已经具备了基本的对话能力,但是这样的能力完全基于单词接龙,缺少正反样例的激励。模型此时尚未知什么回答是好的,什么是差的。我们希望它能够更符合人的偏好,降低让人类不满意答案的产生概率。这个过程就像是让模型参加新的培训,从优秀员工的作为例子,消极员工作为反例,学习如何更好地回复。此处使用的是RLHF系列之-直接偏好优化(Direct Preference Optimization, DPO)。 与PPO(Proximal Policy Optimization)这种需要奖励模型、价值模型的RL算法不同;DPO通过推导PPO奖励模型的显式解,把在线奖励模型换成离线数据,Ref模型输出可以提前保存。 DPO性能几乎不变,只用跑 actor_model 和 ref_model 两个模型,大大节省显存开销和增加训练稳定性。

注:RLHF训练步骤并非必须,此步骤难以提升模型“智力”而通常仅用于提升模型的“礼貌”,有利(符合偏好、减少有害内容)也有弊(样本收集昂贵、反馈偏差、多样性损失)。

2.4,PPO Training 

PPO Training(Proximal Policy Optimization):PPO 是一种常见的强化学习算法,广泛用于 LLM 微调中的 RLHF 阶段,使模型生成更符合人类期望的响应。

  • 使用奖励模型作为环境;

  • 模型作为策略网络,尝试生成更高分的回答;

  • 引入“剪切项”防止训练不稳定。

目标:在不显著破坏原模型的语言能力前提下,优化生成结果的人类偏好分数。

特点

  • 引入强化学习思想;

  • 训练复杂、稳定性要求高;

  • 是 ChatGPT 等对齐性模型的重要步骤。

2.5,DPO Training 

DPO Training(Direct Preference Optimization):DPO 是一种无需训练奖励模型的新方法,直接优化模型使其偏向于人类更喜欢的回答,是对 RLHF 的简化。

  • 直接用人类偏好对比(好 vs 差)训练语言模型;

  • 不需要额外的 Reward Model;

  • 目标函数基于“人类偏好答案比非偏好答案概率高”。

目标:简化 RLHF 流程,提高训练效率和稳定性。

特点

  • 更容易实现;

  • 效果接近 PPO;

  • 越来越受研究社区关注。

2.6,KTO Training

KTO Training(Kullback-Leibler Preference Optimization):KTO 是一种在 DPO 基础上发展的方法,通过 KL 散度更精确地拟合人类偏好分布,进一步提升模型对齐性。

  • 构建基于 KL 散度的目标函数;

  • 训练使模型生成的分布更接近于偏好更高的样本。

目标:在对齐能力和训练效率之间取得更好的平衡。

特点

  • 相较 DPO 提供更细粒度的控制;

  • 数学上更严谨;

  • 适用于人类偏好数据不充分的情况。

3,LLaMA-Factory

参考:

3步轻松微调Qwen3,本地电脑就能搞,这个方案可以封神了!【喂饭级教程】

12 大模型学习——LLaMA-Factory微调_llama factory-CSDN博客

3.1,项目安装

依赖安装:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e \".[torch,metrics]\" --no-build-isolation必需项至少推荐python3.93.10torch2.0.02.6.0torchvision0.15.00.21.0transformers4.45.04.50.0datasets2.16.03.2.0accelerate0.34.01.2.1peft0.14.00.15.1trl0.8.60.9.6

Gradio 启动:

llamafactory-cli webui

模型名称:

  • Base 版本(如 Qwen3-1.7B-Base)
    • 基础预训练模型
    •  没有经过指令微调
    • 适合继续搞预训练或从头开始指令微调
    • 通常情况下输出质量不如 Instruct 版本
  • Instruct 版本(如 Qwen3-1.7B-Instruct)
    • 经过指令微调的模型
    • 更适合直接对话和指令遵循
    • 已经具备基本的对话能力
    • 更适合用来进一步微调

微调方法:lora

检查点路径:在长时间训练大模型的时候会经常用,主要作用是把训练过程中的阶段性结果进行保存,这里是设置指定的保存地址的。这样如果训练过程意外中断,可以从检查点开始继续训练,不用从头再开始训练。若不设置,则默认保存在 LLaMA-Factory 的 /saves文件中

微调前可以加载模型 进入chat模型,看模型能否正常加载。

3.2,量化

【量化等级】用于指定是否对模型权重进行量化以减少内存使用:

  • none:不启用量化,使用原始全精度模型(如 FP16 或 BF16)。
  • 8:8比特量化(int8),在大多数场景下能提供不错的精度与性能平衡。
  • 4:4比特量化(int4),更大幅度地压缩模型大小,适合资源受限设备,精度会有所下降。

👉 QLoRA(Quantized LoRA)结合了量化和LoRA(低秩适配)技术,常用于在消费级显卡上进行大模型微调。

【量化方法】用于指定具体的量化实现库或算法:

  • bnb:BitsAndBytes(Meta 的实现),支持 int8 和 int4,兼容 HuggingFace。
  • hqq:HQQ(High Quality Quantization),一种高保真度的量化方法,强调量化后精度保持。
  • eetq:EETQ(Efficient and Effective Transformer Quantization),侧重性能与部署效率。

【对话模板】用于指定对话格式模板,影响 prompt 格式化,适配不同训练数据结构。

【RoPE 插值方法】用于扩展模型上下文长度:

  • none:不启用插值,只使用默认的 RoPE。
  • linear:线性插值法,广泛用于上下文扩展(如从 2K 扩展到 8K、32K)。
  • yam:Yarn-Aware Method,Yarn 插值的衍生方法。
  • llama3:LLaMA3 模型使用的插值方案,已被验证性能优秀。
  • dynatic:动态调整的插值方案(Dynamic RoPE Interpolation),提升长上下文效果。

【加速方法】

  • auto:自动选择最优的加速方法。
  • flashattn2:FlashAttention v2,显著提高 Transformer 中注意力模块的速度和效率。
  • unsloth:用于极高效训练,尤其配合 LoRA 等技术,适用于 consumer GPU。
  • liger_kernel:专为 NVIDIA GPU 优化的 kernel 级推理加速,速度极快。

3.3,数据集 

llama-factory目前只支持两种格式的数据集:Alpaca格式和Sharegpt格式

Alpaca 格式(单单轮指令跟随任务):每条数据是一个 JSON 对象。

{ \"instruction\": \"请写一篇关于气候变化的短文。\", \"input\": \"\", \"output\": \"气候变化是指由于自然因素和人类活动导致的气候系统的长期变化...\"}

ShareGPT 格式(多轮对话训练):通常是一个列表,每条数据是一个对话(dialogue),每个对话是多轮消息的列表。

[ { \"conversations\": [ { \"from\": \"human\", \"value\": \"你好,你是谁?\" }, { \"from\": \"gpt\", \"value\": \"你好!我是由OpenAI训练的大语言模型,很高兴为你服务。\" }, { \"from\": \"human\", \"value\": \"你能告诉我关于机器学习的基础知识吗?\" }, { \"from\": \"gpt\", \"value\": \"当然可以!机器学习是人工智能的一个子领域,主要研究如何让计算机通过数据自动学习和改进...\" } ] }]

【甄嬛数据集】魔搭社区

modelscope download --dataset kmno4zx/huanhuan-chat

【适配 LLaMA】

  • 将下载的数据集放在项目根目录的data文件夹下:

  • 修改:dataset_info.json

  • 保存之后,webui那边会实时更新,不需要重启

3.4,训练

学习率:可以不用修改

训练轮数:可以选择1轮,会快一些(如果后面发现效果不理想,可以多训练几轮),我这里最终选择了3轮,因为我发现仅1轮效果不佳。

最大梯度范数:防止梯度爆炸的一种技术,称为 梯度裁剪(Gradient Clipping)。

最大样本数:根据数据集大小和训练需求设置。主要是防止数据量过大导致的内存溢出问题
计算类型:

  • fp16:GPU 推理、训练等,NVIDIA 的 Tensor Core 使用该格式(混合精度训练)。节省内存带宽,能更快训练神经网络(尤其是 CNN)。
  • bf16:精度虽然比 fp16 更低,但动态范围更大,不易梯度爆炸/消失,更适合在 大模型训练 中替代 fp32。

截断长度:由于我们的数据集都是一些短问答,可以把截断长度设置小一点,为1024(默认是2048)

批处理大小:每个 GPU 处理的样本数量。

梯度累计:设置为4

验证集比例:验证集占全部样本的百分比。

学习率调节器:学习率调度器的名称。

日志间隔:多久输出日志信息

保存问题:多久保存权重,这里不是按轮次保存

预热步数:是学习率预热采用的步数,通常设置范围在2-8之间,这里配置4。

lora秩越大(可以看作学习的广度),学习的东西越多,微调之后的效果可能会越好,但是也不是越大越好。太大的话容易造成过拟合(书呆子,照本宣科,不知变通)。

lora缩放系数(可以看作学习强度),越大效果可能会越好,对于一些用于复杂场景的数据集可以设置更大一些,简单场景的数据集可以稍微小一点。

一轮接近24小时,在个人设备考虑微调小参数模型,这里14B的耗时实在是太久了。

训练结束:

如果想重新微调,记得改一下下面两个值

3.5,测试

微调成功后,在检查点路径这里,下拉可以选择刚刚微调好的模型:

把窗口切换到chat,点击加载模型:

【模型导出】切换到export,填写导出目录 /app/output/qwen2-0.5b-huanhuan

D:\\app\\output\\qwen2-0.5b-huanhuan
from modelscope import AutoModelForCausalLM, AutoTokenizermodel_name = \"D:\\\\app\\\\output\\\\qwen2-0.5b-huanhuan\"model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=\"auto\", device_map=\"auto\")tokenizer = AutoTokenizer.from_pretrained(model_name)prompt = \"你好啊,请问你是谁\"messages = [ {\"role\": \"system\", \"content\": \"你是甄嬛\"}, {\"role\": \"user\", \"content\": prompt}]text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors=\"pt\").to(model.device)generated_ids = model.generate( **model_inputs, max_new_tokens=512)generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]print(response)======================我是甄嬛,家父是大理寺少卿甄远道。

4,Minimind

大语言模型(Large Language Model, LLM)的出现引发了全世界对AI的空前关注。 无论是ChatGPT、DeepSeek还是Qwen,都以其惊艳的效果令人叹为观止。 然而,动辄数百亿参数的庞大规模,使得它们对个人设备而言不仅难以训练,甚至连部署都显得遥不可及。 打开大模型的“黑盒子”,探索其内部运作机制,多么令人心潮澎湃!遗憾的是,99%的探索只能止步于使用LoRA等技术对现有大模型进行少量微调,学习一些新指令或任务。 这就好比教牛顿如何使用21世纪的智能手机——虽然有趣,却完全偏离了理解物理本质的初衷。 与此同时,第三方的大模型框架和工具库,如transformers+trl,几乎只暴露了高度抽象的接口。 通过短短10行代码,就能完成“加载模型+加载数据集+推理+强化学习”的全流程训练。 这种高效的封装固然便利,但也像一架高速飞船,将我们与底层实现隔离开来,阻碍了深入探究LLM核心代码的机会。 然而,“用乐高拼出一架飞机,远比坐在头等舱里飞行更让人兴奋!”。 

5,ms-swift

5.1,项目安装

git clone https://github.com/modelscope/ms-swift.gitcd ms-swiftpip install -e .
swift web-ui

【报错】ValueError: Cannot parse cmd line: cmd:D:\\Miniconda3\\envs\\LLaMA\\python.exe

【解决】关闭后重启就可以,具体原因未知。

【报错】ImportError: FlashAttention2 has been toggled on, but it cannot be used due to the following error: the package flash_attn seems to be not installed. Please refer to the documentation of https://huggingface.co/docs/transformers/perf_infer_gpu_one#flashattention-2 to install Flash Attention 2.

【解决】下载 windows 版本 https://github.com/kingbri1/flash-attention/releases

5.2,参数介绍

【数据集】

【报错】All the data files must have the same columns, but at some point there are 3 new columns ({\'input\', \'output\', \'instruction\'}) and 1 missing columns ({\'default\'}).

【解决】ms-swift 跟 LLaMA 不同,数据需要直接指定到文件!

D:\\modelscope_cache\\datasets\\kmno4zx\\huanhuan-chat\\huanhuan.json

5.3,训练

大浪论坛