LLamaFactory 微调实战

LLamaFactory 微调实战

仓库地址

https://github.com/hiyouga/LlamaFactory?tab=readme-ov-file

本次任务是训练llm 抽取query中的实体

微调种类

llamafactory 目前是支持这些种类的微调

  • 列(Full / Freeze / LoRA / QLoRA / OFT / QOFT):讲的是“怎么更新参数”(参数高效微调 PEFT vs 全量微调)。
  • 行(SFT / Reward Modeling / PPO / DPO / KTO / ORPO / SimPO):讲的是“用什么训练目标/数据形式”(监督、偏好、RL 等)。

怎么更新参数

1) Full-tuning(全量微调)

做法:模型所有参数都更新。
优点

  • 表达能力最强,理论上效果上限最高(尤其是你要强改模型行为/风格/能力时)。
  • 训练/推理代码最简单(不用插 LoRA 模块)。
    缺点
  • 显存、训练成本最高;多卡/ZeRO/FSDP 常见。
  • 容易“灾难性遗忘”,也更容易把模型训歪(数据不够干净时)。
    什么时候用:数据量大、预算足、你想做“真正的模型版本迭代”。

2) Freeze-tuning(冻结主干,只训少量模块)

做法:大部分参数冻结,只训练很少一部分(常见:最后几层、LayerNorm、Adapter、小 head)。
优点

  • 成本低、稳定、不太容易把模型训崩。
    缺点
  • 可塑性有限,效果上限通常不如 LoRA/全量。
    什么时候用:快速适配、资源很紧、或者你只想“轻微对齐/轻微迁移”。

3) LoRA(最常用的 PEFT)

做法:冻结原权重,在注意力/MLP 的线性层旁边加一对低秩矩阵 A,B,只训练这部分“增量”。
优点

  • 性价比极高:显存大幅下降,效果通常接近全量微调(尤其做 SFT / DPO 这类)。
  • 可以为同一个基座模型保存多套 LoRA(切换任务很方便)。
    缺点
  • 仍然需要基座模型以 FP16/BF16 方式加载训练(比 QLoRA 贵)。
    什么时候用:几乎所有“常规微调”默认首选(SFT、DPO、ORPO、SimPO…都很常见)。

4) QLoRA(LoRA + 4bit 量化训练:超省显存)

做法:基座权重量化到 4bit(常见 NF4),仍然只训练 LoRA 参数;计算中用一些技巧保证训练稳定。
优点

  • 显存最省:单卡也能训更大的模型(比如 13B/34B 更现实)。
    缺点
  • 训练更“工程化”:依赖 bitsandbytes / 量化算子,速度可能慢一点,偶尔有数值/兼容坑。
  • 极端情况下效果可能比 LoRA 略差一点点,但很多任务差距不大。
    什么时候用:你想在有限 GPU 上把模型尺寸顶上去——现在非常非常常用

用什么训练目标/数据形式

1) SFT(Supervised Fine-Tuning)

数据:(prompt,response)(prompt, response)(prompt,response) 的标准监督数据(指令-答案)。
在干嘛:最大化参考答案的似然(cross-entropy)。
优点:最简单、最稳、最常用的第一步;能快速让模型“会按指令说话”。
缺点:只能学到“数据里长什么样”,不直接优化偏好/安全/有用性;数据质量决定上限。

一句话:把模型训练成“像数据集里的优秀助教”。


2) Reward Modeling(RM,奖励模型/偏好模型)

数据:偏好对比(同一 prompt 下 A vs B,标哪个更好),或打分数据。
在干嘛:训练一个 r(x,y)去预测“人类更喜欢哪个回答”。
用途:RM 本身不是最终模型,而是给后面的 RL(比如 PPO)提供 reward。
优点:把“人类偏好”变成可优化的标量信号。
缺点:训练/维护一个额外模型;reward 容易被“钻空子”(reward hacking)。

一句话:先学会“怎么评卷”,再用它指导学生练习。


3) PPO Training(经典 RLHF 的 RL 阶段)

数据:prompt(模型自己采样回答),再用 RM 给 reward。
在干嘛:用 PPO 最大化 reward,同时用 KL 约束别偏离原模型太多(稳定训练)。
优点:能直接优化“偏好得分”;在一些场景能带来明显提升。
缺点成本最高、最难调(采样+RL 不稳定);对实现细节很敏感。

一句话:真正“用奖励做强化学习”,但工程最重。

4) DPO/KTO/ORPO/SimPO 偏好优化

DPO(Direct Preference Optimization)— 现在超常用

数据:偏好对 (x,y+,y−)(同一 prompt 下更好/更差)。
在干嘛不训练 RM、不跑 PPO,直接用一个“对比式”的目标让模型更偏向 y+而不是 y−。
优点:实现简单、训练稳定、效果强;很多团队用它替代 PPO。
缺点:仍然依赖高质量偏好数据;对“偏好覆盖面”敏感。

一句话:用“更像好答案、远离差答案”的概率比,直接把模型拉过去。

KTO(偏好优化的另一种口味)

数据:可以用偏好对,也常见“单条回答 + 好/坏标签”(不一定要成对)。
在干嘛:用更简单的方式把“好/坏反馈”变成优化信号(比 DPO 在某些数据形态上更灵活)。
优点:当你只有“这条好/这条不好”的反馈时更方便。
缺点:生态和默认程度不如 DPO;不同实现细节差异较大。

一句话:不强依赖成对比较的偏好优化方案。

ORPO / SimPO(更“轻量”的偏好优化变体)

它们可以理解为:把 SFT 和偏好项合在一个目标里(或者让偏好目标更简洁/更好训)。
优点:训练更省事、更稳,很多时候能拿到接近 DPO 的收益。
缺点:不同论文/实现差异大;不一定在所有任务上都稳赢 DPO。

一句话:更像“带偏好项的 SFT++”。

环境配置

我走的环境是docker

hiyouga/llamafactory:latest

 注意这个docker 拉下来自带llamafactory代码,不过因为权重放本地了所以我还是挂载本地目录了

/workspace/code/LlamaFactory

数据处理

具体看 readme_zh.md 

总之自定义数据记得往 dataset_info 里面塞个

训练参数

lora

--lora_rank

rank (r) 是 LoRA 低秩矩阵的秩,决定 LoRA 的“容量”。

  • LoRA 把一个线性层的权重更新写成:ΔW=BA
    其中 A∈Rr×d, B∈Rd′×r
  • r 越大 → 可学习参数更多 → 更能拟合你的任务,但更占显存、也更容易过拟合。

经验:

  • 轻任务/小数据:r=4/8
  • 多一点规则/结构化输出:r=16 常用
  • 很难的迁移/很大数据:r=32/64 才可能有意义

--lora_alpha 

alpha 是 LoRA 的缩放系数,控制 LoRA 更新幅度。

常见实现里会用一个缩放:

  • alpha 大 → LoRA 更新更“猛”
  • alpha 小 → 更新更“温和”

经验:

  • 经典搭配:alpha = 2*r(比如 r=16 → alpha=32),很常见、也比较稳。
  • 如果你发现模型输出开始乱飘/格式崩:可以减小 alpha 或学习率。

--lora_target

这个决定:LoRA 插到哪些线性层上(也就是你让哪些模块“可塑形”)

注意力层(Attention)

q_proj, k_proj, v_proj:把 hidden 投影成 Q/K/V

o_proj:注意力输出再投影回去

这些层决定模型“怎么注意、注意谁”,对改行为很有效。

前馈层(MLP / FFN)

gate_proj, up_proj, down_proj:对应 LLaMA/Qwen 这类常见的 gated-MLP 结构
MLP 是模型的“计算/表达”主力,占参数也多,给它上 LoRA 通常会更有力。

为什么不建议 lora_target all

all 会把一堆不关键的层也插 LoRA,慢、占用多、还可能不稳

常见默认就是只打在 attention + MLP 这些“最值钱”的线性层

调参技巧

想更准 / 规则更复杂:先加 rank(8 → 16),再看是否要加 alpha

输出格式容易崩:降低 learning_rate 或降低 alpha/r(比如 alpha=16 或 lr 从 5e-5 降到 2e-5)

过拟合(train 好、dev 差):加 dropout(0.05 → 0.1)或减 rank

evaluation

因为数据比较结构化,所以我就拿acc 来计算的

--do_eval \  # evaluation= True

--eval_strategy steps \ #拿步为单位,否则epoch

--eval_steps 20 \ 

--compute_accuracy true \   #是否计算acc

--val_size 0.1 \  #数据集划分

Read more

智能车竞赛实战:如何用地瓜机器人打造智慧医疗解决方案(附完整代码)

智能车竞赛实战:基于地瓜机器人的智慧医疗系统开发指南 在当今技术驱动的医疗创新浪潮中,智能车竞赛为大学生创客提供了绝佳的实践平台。地瓜机器人作为一款开源硬件平台,其灵活的可扩展性和丰富的传感器生态,使其成为开发智慧医疗解决方案的理想选择。本文将深入探讨如何从零开始构建一套完整的智慧医疗系统,涵盖硬件选型、算法设计到实战优化的全流程。 1. 硬件架构设计与环境搭建 构建智慧医疗系统的第一步是搭建可靠的硬件基础。地瓜机器人平台的核心优势在于其模块化设计,允许开发者根据具体需求灵活配置传感器和执行机构。 1.1 核心硬件选型建议 对于医疗应用场景,我们需要特别关注数据的准确性和系统的稳定性。以下是经过实战验证的硬件配置方案: * 主控单元:推荐使用地瓜机器人V3.2开发板,其搭载的STM32H743芯片提供充足的算力资源 * 环境传感器: * 温湿度:SHT31高精度数字传感器(±1.5%RH精度) * 空气质量:SGP30 VOC传感器 * 医疗监测模块: * 红外测温:MLX90614非接触式传感器 * 心率血氧:MAX30102光电传感器

手把手用ROS实现Ego-Planner动态避障:无人机撞树问题终结方案

手把手用ROS实现Ego-Planner动态避障:无人机撞树问题终结方案 你是否曾满怀期待地启动无人机,看着它在仿真环境中流畅起飞,却在下一秒“砰”地一声撞上突然出现的障碍物,仿真画面定格,留下一串令人沮丧的报错信息?在复杂、非结构化的真实飞行场景中,比如在枝叶交错的林间穿行,或在有行人、车辆移动的城区执行任务,传统的全局规划器往往显得力不从心。它们规划的路径可能全局最优,但面对瞬息万变的局部环境,反应速度跟不上变化,导致“撞树”成了家常便饭。今天,我们不谈空洞的理论对比,而是聚焦于一个能真正解决这个痛点的方案——Ego-Planner,并带你一步步在ROS和Gazebo搭建的仿真世界里,亲手实现一个能“眼观六路、随机应变”的无人机大脑。 本文面向的是已经具备一定ROS和无人机仿真基础,正被动态避障问题困扰的开发者、研究者或高级爱好者。我们将彻底抛开宏观的算法优劣论述,直接深入到代码配置、参数调优和实战排错层面。你将看到的不是“Ego-Planner实时性更好”这样的结论,而是“如何设置距离场梯度计算的网格分辨率”、“碰撞反作用力系数调到多少能让无人机既灵活又稳定”的具体操作。我们

VRM4U插件完整指南:在Unreal Engine 5中高效处理VRM模型

VRM4U插件完整指南:在Unreal Engine 5中高效处理VRM模型 【免费下载链接】VRM4URuntime VRM loader for UnrealEngine4 项目地址: https://gitcode.com/gh_mirrors/vr/VRM4U 还在为Unreal Engine 5中VRM模型导入的各种技术问题而烦恼吗?今天我要为你详细介绍一款能够彻底优化VRM工作流程的专业工具——VRM4U插件!这款专为UE5设计的VRM文件导入解决方案,让你能够专注于创意实现,而不是技术细节。 项目核心价值:为什么VRM4U是你的最佳选择 VRM4U插件不仅仅是一个格式转换器,它是一套完整的3D角色处理生态系统。通过智能化的技术实现,它解决了VRM模型在UE5环境中面临的多重挑战。 核心问题解决方案: * 自动化的材质系统转换 * 完整的骨骼结构映射 * 动画数据的无缝衔接 * 跨平台性能优化 快速入门:5分钟完成插件配置 获取插件资源 首先需要下载VRM4U插件,使用以下命令获取完整代码库: git clone https://gitcode

OFA-VE在AR内容生成中的应用:实时验证虚拟物体与现实图像逻辑关系

OFA-VE在AR内容生成中的应用:实时验证虚拟物体与现实图像逻辑关系 1. 引言:当虚拟遇见现实,如何确保它们“合情合理”? 想象一下,你正在开发一款增强现实(AR)应用,用户可以通过手机摄像头,在自家的客厅里“放置”一个虚拟的沙发。听起来很酷,对吧?但问题来了:如果用户家的客厅里已经摆满了家具,这个虚拟沙发应该放在哪里才显得真实、不突兀?是悬浮在半空,还是稳稳地落在地板上?它会不会和现实中的茶几“穿模”? 这就是AR内容生成中一个核心且棘手的挑战:逻辑一致性。虚拟物体不仅要“看起来”在现实场景中,更要“在逻辑上”与现实场景融为一体。传统方法往往依赖复杂的3D场景重建和物理引擎计算,过程繁琐且对硬件要求高。 今天,我们要介绍一个能优雅解决这个问题的“智能裁判”——OFA-VE。它不是一个AR开发工具,而是一个尖端的多模态推理系统。它的核心能力是进行“视觉蕴含”分析,简单来说,就是判断一段文字描述是否符合一张图片所展现的事实。 我们将深入探讨,如何利用OFA-VE的这种能力,为AR内容生成流程注入“逻辑验证”