LLaMA-Factory 主流调优算法详解

作者:吴业亮
博客:wuyeliang.blog.csdn.net

LLaMA-Factory 是一站式大语言模型(LLM)微调框架,支持多种参数高效调优(PEFT)和全参数调优算法,适配不同算力、精度和任务场景。本文详细解析其中核心的 Full Parameter Fine-tuning、Freeze、LoRA、Galore、BAdam 五种调优算法的原理、适用场景、实现逻辑及优缺点。

一、Full Parameter Fine-tuning(全参数微调)

1. 核心原理

全参数微调是最基础的微调方式:对模型的所有参数(包括词嵌入、Transformer 编码器/解码器的所有层、输出层等) 进行更新,通过反向传播优化所有权重,使模型完全适配下游任务。

2. LLaMA-Factory 实现逻辑

  • 加载完整的预训练模型权重(如 LLaMA/LLaMA2/Qwen 等),禁用部分层的梯度冻结(requires_grad=True);
  • 使用标准的 AdamW/Adam 优化器更新所有参数;
  • 支持混合精度训练(FP16/FP8/BF16)以降低显存占用,但仍需海量显存(如 7B 模型全参数微调需 ≥40GB 显存)。

3. 适用场景

  • 下游任务与预训练任务差异极大(如专业领域微调:医疗、法律);
  • 有充足算力(多卡 A100/H100),追求极致的任务适配效果;
  • 需完全覆盖预训练模型的知识偏差。

4. 优缺点

优点 缺点
调优效果最优,无参数更新限制 显存占用极高,训练速度慢
无需兼容 PEFT 适配逻辑,部署简单 易过拟合(小数据集下),训练成本高
保留模型全量知识的同时适配任务 不支持跨任务快速切换(需重新训练)

二、Freeze(冻结微调)

1. 核心原理

冻结微调是"部分参数更新"的基础方案:冻结模型的底层/大部分层参数(仅保留梯度不更新),只对顶层(如最后几层 Transformer 层、输出层、词嵌入层)的参数进行微调。

  • 核心逻辑:LLM 的底层层学习通用特征(如语法、语义),顶层层学习任务特定特征,冻结底层可复用预训练知识,减少更新参数量。

2. LLaMA-Factory 实现逻辑

  • 通过 --freeze_layer <num> 指定冻结的层数(如 --freeze_layer 20 表示冻结前 20 层,仅更新后 4 层,以 LLaMA2-7B 的 24 层为例);
  • 冻结层设置 requires_grad=False,仅未冻结层计算梯度并更新;
  • 可结合混合精度,7B 模型冻结微调仅需 ≥16GB 显存。

3. 适用场景

  • 算力有限(单卡 2080Ti/A10),小数据集微调;
  • 下游任务与预训练任务差异较小(如通用对话微调);
  • 快速验证任务效果,无需深度适配。

4. 优缺点

优点 缺点
显存占用低,训练速度快 调优效果弱于全参数/LoRA(仅更新少量层)
复用预训练通用特征,不易过拟合 顶层参数易"遗忘"预训练知识(极端场景)
实现简单,无额外适配成本 无法适配复杂任务(需底层特征调整)

三、LoRA(Low-Rank Adaptation)

1. 核心原理

LoRA 是目前最主流的参数高效微调(PEFT)算法,核心是低秩分解

  • 对模型中关键层(如 Attention 的 Q/K/V 矩阵)引入两个低秩矩阵 A(d×r)B(r×d)(r≪d,如 d=4096,r=8/16/32);
  • 训练时仅更新 AB,原模型参数冻结;
  • 推理时将 A×B 的结果叠加到原矩阵上,无额外推理延迟。

2. LLaMA-Factory 实现逻辑

  • 依赖 Hugging Face PEFT 库的 LoRA 实现,支持自定义:
    • --lora_rank:低秩矩阵的秩(r,默认 8);
    • --lora_alpha:缩放系数(α,默认 16);
    • --lora_target:指定 LoRA 作用的层(如 q_proj,k_proj,v_proj,o_proj);
  • 仅 LoRA 矩阵的参数参与梯度更新,7B 模型 LoRA 微调仅需 ≤10GB 显存(参数量仅 0.1%~0.5%);
  • 支持 LoRA 权重合并(merge_lora),合并后可直接部署,与原模型兼容。

3. 适用场景

  • 算力受限(单卡 RTX 3090/4090),大规模推广微调;
  • 多任务微调(每个任务一个 LoRA 权重,切换成本低);
  • 平衡调优效果与训练效率(效果接近全参数,成本仅 1/100)。

4. 优缺点

优点 缺点
参数量极小,显存/算力成本极低 效果略逊于全参数(极端复杂任务)
多任务切换灵活,部署无额外延迟 需指定目标层,参数选择依赖经验
不易过拟合,小数据集效果好 不支持跨层联动优化(仅目标层更新)

四、Galore(Gradient Low-Rank Projection)

1. 核心原理

Galore 是针对全参数微调显存瓶颈的优化算法,核心是"梯度低秩投影":

  • 全参数微调的显存瓶颈在于"梯度存储"(梯度与参数同尺寸),Galore 对梯度进行低秩近似:
    1. 计算完整梯度后,对梯度矩阵做 SVD 分解,保留前 r 个主成分;
    2. 仅用低秩梯度更新参数,减少梯度存储和计算量;
  • 区别于 LoRA:Galore 仍更新全参数,但通过梯度压缩降低显存占用;LoRA 仅更新低秩矩阵,原参数冻结。

2. LLaMA-Factory 实现逻辑

  • 集成 Galore 库,核心参数:
    • --galore_rank:梯度低秩投影的秩(r,默认 128);
    • --galore_update_interval:梯度投影的间隔(默认 1);
    • --galore_scale:梯度缩放系数;
  • 7B 模型 Galore 全参数微调显存占用比原生全参数降低 30%~50%(如从 40GB 降至 20~28GB);
  • 训练速度与全参数接近,效果几乎无损失(梯度低秩近似误差可忽略)。

3. 适用场景

  • 希望用全参数微调的效果,但显存不足(如单卡 A100 40GB 微调 7B 模型);
  • 对调优效果要求高,且不愿牺牲参数更新范围;
  • 大规模模型(13B/70B)的全参数微调轻量化。

4. 优缺点

优点 缺点
保留全参数更新,效果与原生全参数一致 梯度投影引入少量计算开销(可忽略)
显存占用降低 30%~50%,无需牺牲效果 仅优化显存,训练速度无明显提升
无需修改模型结构,兼容现有训练流程 秩的选择需适配模型尺寸(如 7B 选 128,13B 选 256)

五、BAdam(Block-wise Adam)

1. 核心原理

BAdam 是针对大模型优化器效率的改进算法,基于 Adam 优化器的"分块更新":

  • 传统 Adam 需为每个参数维护一阶矩(m)和二阶矩(v),显存占用为参数的 2 倍;
  • BAdam 将参数矩阵分块(Block),对每个块共享矩估计(或低秩近似矩),减少矩存储量;
  • 同时优化 Adam 的更新步长策略,适配大模型的梯度分布特性。

2. LLaMA-Factory 实现逻辑

  • 替换默认优化器为 BAdam,核心参数:
    • --badam_block_size:分块大小(默认 1024);
    • --badam_eps:数值稳定性系数(默认 1e-8);
  • 矩存储量降低 50%~80%,结合混合精度可进一步降低显存;
  • 支持与 Galore/LoRA 结合使用,叠加显存优化效果。

3. 适用场景

  • 超大模型(13B/70B)的全参数微调,优化器显存瓶颈突出;
  • 对训练稳定性要求高(BAdam 对大梯度更鲁棒);
  • 需长期训练(BAdam 收敛速度略快于原生 Adam)。

4. 优缺点

优点 缺点
大幅降低优化器显存占用(矩存储) 分块策略需适配模型结构(如 Transformer 层尺寸)
收敛速度略快,训练稳定性更好 效果依赖分块大小(过小会引入误差)
兼容所有调优算法(全参数/Freeze/LoRA) 仅优化优化器,无模型效果提升

六、算法对比与选型建议

算法 参数更新范围 7B 模型显存需求 调优效果 适用算力 核心优势
Full Parameter 全部参数 ≥40GB ★★★★★ 多卡 A100/H100 效果最优
Freeze 顶层少量层 ≥16GB ★★★☆☆ 单卡 2080Ti/A10 简单快速
LoRA 低秩矩阵(0.1%) ≤10GB ★★★★☆ 单卡 3090/4090 极致性价比
Galore 全部参数(梯度压缩) ≥20GB ★★★★★ 单卡 A100 40GB 全参数效果+显存优化
BAdam 全部/部分参数 降低 50% 矩存储 ★★★★★ 超大模型训练 优化器显存+收敛速度

选型建议

  1. 小算力(单卡消费级):优先 LoRA(平衡效果与成本);
  2. 中等算力(单卡专业卡):Freeze(快速验证)或 Galore(全参数效果);
  3. 大算力(多卡集群):全参数微调(极致效果)+ BAdam(优化显存);
  4. 多任务场景:LoRA(快速切换);
  5. 超大模型:Galore + BAdam(叠加显存优化)。

七、LLaMA-Factory 调优算法使用示例

以 LLaMA2-7B 为例,核心命令行参数:

bash 复制代码
# 1. 全参数微调
python train.py --model_name_or_path llama2-7b --finetuning_type full --batch_size 8 --fp16 True

# 2. Freeze 微调(冻结前20层)
python train.py --model_name_or_path llama2-7b --finetuning_type freeze --freeze_layer 20 --batch_size 8

# 3. LoRA 微调(目标层 q/k/v,秩8)
python train.py --model_name_or_path llama2-7b --finetuning_type lora --lora_rank 8 --lora_target q_proj,k_proj,v_proj

# 4. Galore 全参数微调(梯度秩128)
python train.py --model_name_or_path llama2-7b --finetuning_type full --galore_rank 128 --fp16 True

# 5. BAdam 优化器(分块大小1024)
python train.py --model_name_or_path llama2-7b --finetuning_type full --optimizer badam --badam_block_size 1024

综上,LLaMA-Factory 通过对不同调优算法的集成,覆盖了从"轻量快速"到"极致效果"的全场景微调需求,用户可根据算力、任务复杂度和效果要求灵活选择。

相关推荐
Yeliang Wu12 小时前
LLaMA-Factory 模型评估理论与实战:基于 Ubuntu 22.04 的系统化指南
linux·ubuntu·llama·评估·llamafactory
Yeliang Wu13 小时前
基于FSDP的LLaMA-Factory大模型高效训练指南
fsdp·llamafactory
Yeliang Wu14 小时前
Ubuntu 22.04 上的 LLaMA Factory 量化实践:bitsandbytes、GPTQ与AWQ详解
量化·llamafactory
Yeliang Wu15 小时前
Ubuntu 22.04 上运用LLaMA Factory与DeepSpeed进行高效模型训练
微调·llamafactory·deepseed
Yeliang Wu15 小时前
LLaMA Factory DDP并行训练全解析:从核心原理到Ubuntu 22.04实践
微调·ddp·llamafactory
Yeliang Wu16 小时前
LLaMA Factory训练可视化管理:Loss曲线解析与性能优化
loss·llamafactory
@鱼香肉丝没有鱼3 天前
大模型分布式微调 & Xtuner
分布式·大模型微调·xtuner·llamafactory
it&s me1 个月前
llamafactory lora体验
ai·llamafactory
it&s me1 个月前
EulerOS(NPU)安装llamafactory
ai·1024程序员节·llamafactory