跳到主要内容LLaMa-Factory 实战进阶:WebUI 配置与分布式训练详解 | 极客日志PythonAI算法
LLaMa-Factory 实战进阶:WebUI 配置与分布式训练详解
LLaMa-Factory 实战进阶涵盖 WebUI 配置与分布式训练详解。内容涉及基座模型选择、数据集配置、RLHF/DPO/KTO 训练阶段差异。深入解析量化技术(bitsandbytes/HQQ/EETQ)及加速方案(FlashAttention-2/Unsloth/Liger Kernel)。提供 LoRA 合并、模型导出命令行实操,并对比 DDP、DeepSpeed、FSDP 三种分布式训练引擎的配置与适用场景,助力高效微调大模型。
怪力乱神18 浏览 引言
本文聚焦 LLaMA-Factory 的高级应用,涵盖 WebUI 参数深度解析、模型合并量化以及分布式训练方案。前文已介绍过基础概念和数据格式,这一部分将深入实战细节,帮助大家在微调大模型时少走弯路。
WebUI 详解
1. 基座模型
这部分主要定义模型的来源和路径。注意,模型本体通常需要手动下载,工具只负责加载。
| 字段 | 说明 |
|---|
| 模型名称 | 支持的所有基座模型列表。部分名称可能不够明确,例如 DeepSeek-R1-7B-Distill,仅说明使用了 R1 作为教师模型,未指明学生模型具体版本,需自行确认。 |
| 模型路径 | 本地存储路径。 |
| 检查点路径 | 如需断点续训,填写 checkpoint 路径;否则留空。 |
| 对话模板 | 不同模型差异较大,建议选用同系列或相近模型的模板,避免报错。 |

2. 数据集
训练数据的配置相对直接,关键在于 dataset_info.json 文件的编写。
| 字段 | 说明 |
|---|
| 数据路径 | 存放训练数据和 dataset_info.json 的本地路径。 |
| 数据集 | dataset_info.json 中定义的名称。 |
{
"chat-train": {
"file_name": "train.jsonl"
}
}

3. 训练阶段
这里的选项并非并列关系,而是根据任务需求选择的流程组合。
| 训练阶段 | 说明 |
|---|
| Pre-Training | 预训练,大模型的起步阶段。 |
| Supervised Fine-Tuning | 有监督微调(SFT)。 |
| Reward Modeling | RLHF 第一步,训练奖励模型。 |
3.1 RLHF(Reward Modeling + PPO)
RLHF 的核心在于引入人类反馈。流程通常是:先用初始模型生成多样化回答,人工排序评分,训练奖励模型,最后用 PPO 算法调整策略。
PPO(近端策略优化)的关键是限制每次更新的幅度,防止模型'学崩',就像给学习过程加了安全绳。这常用于 ChatGPT 类任务的对齐。
3.2 DPO
DPO 简化了 RLHF 流程,直接用人类标注的'A 比 B 好'这类偏好数据训练,跳过了训练奖励模型的步骤。它更简单高效,适合需要快速对齐人类价值观的场景。
3.3 KTO
KTO 借鉴了行为经济学中的前景理论,认为人类对损失比收益更敏感。因此它在训练中会不对称地处理正负反馈,惩罚错误比奖励正确更严厉。这有助于快速纠正不良行为,如不文明用语或安全漏洞。
本节要点
- RLHF 流程复杂但效果稳健,DPO/KTO 更轻量。
- 根据数据获取难度选择方法。
4. 训练方法
这里涉及具体的微调策略,如全量、LoRA 等,后续章节会详细展开。
5. 量化
量化能显著降低显存占用,提升推理速度。界面通常提供 none、8-bit、4-bit 选项。
5.1 bitsandbytes
这是最成熟的方案,Hugging Face 直接集成。8-bit 几乎不掉精度,4-bit 会有轻微下降。适合消费级显卡(如 RTX 3090)跑大模型。
类比:像把高清电影压缩成 MP4,8-bit 约等于 720P,4-bit 约等于 480P。
5.2 HQQ
半二次量化,通过数学优化动态分配位数。重要参数保留高精度,次要参数狠压缩。适合对体积极度敏感的端侧设备。
类比:搬家时瓷器用精装箱,旧衣服用真空袋。
5.3 EETQ
专为 GPU 推理加速设计的引擎,内核级优化,速度极快,但需手动转换格式,兼容性较低。适合高并发在线服务。
类比:F1 赛车改装,拆座椅换涡轮,只为冲速度。
| 方法 | 易用性 | 压缩率 | 速度 | 典型用途 |
|---|
| bitsandbytes | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | 个人快速部署 |
| HQQ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐ | 手机/嵌入式 |
| EETQ | ⭐ | ⭐⭐ | ⭐⭐⭐⭐ | 企业级推理 |
一句话总结:想简单试试选 bitsandbytes,要极限压缩选 HQQ,追求推理速度选 EETQ。
6. 加速算法
注意区分适用阶段:FlashAttention-2 用于训练和推理,Unsloth 侧重训练,Liger Kernel 侧重推理。它们可以组合使用。
6.1 FlashAttention-2
优化 Transformer 注意力计算,减少显存读写瓶颈。训练速度可提升 2-3 倍,适合所有基于 Transformer 的模型。
类比:学霸一次性记住公式,不再反复翻书。
6.2 Unsloth
针对微调优化的库,结合梯度检查点、自动混合精度等技术。微调速度提升 2-5 倍,显存减半。适合个人电脑微调大模型。
类比:给汽车加装涡轮增压。
6.3 Liger Kernel
专为推理阶段设计的 GPU 加速库,动态合并计算任务。吞吐量提升 5-10 倍,延迟更低。适合高并发在线服务。
类比:快餐店批量出餐,同时炸 10 份薯条。
一句话总结:改进底层计算选 FlashAttention-2,低成本微调选 Unsloth,高并发服务选 Liger Kernel。
7. RoPE 插值方法
RoPE Scaling 技术让模型能处理超长文本,相当于给模型'加长记忆'。
7.1 Linear(线性缩放)
简单粗暴按比例缩小位置编号。缺点太生硬,长文本效果差。
7.2 Dynamic(动态缩放)
推理时自动缩放,不用重训。缺点是超过一定长度(如原长 4 倍)效果变差。
7.3 YaRN(NTK-aware RoPE Scaling)
用神经切线核理论动态调整旋转角度,兼顾短长文本。扩展性更强,LLaMA-2 官方推荐。
7.4 LLaMA-3 的改进
结合 YaRN 和动态调整,进一步优化稳定性,在超长文本下表现更好。
小结:Linear 简单但效果差,Dynamic 方便有限,YaRN 智能效果好,LLaMA-3 在此基础上继续升级。
8. 通用参数
| 参数名称 | 说明 |
|---|
| 学习率 | 0.1 仅用于探索;0.01 从头训练标准;0.001 接近目标时调整;0.0001 微调;0.00005 预训练最后微调。 |
| 训练轮数 | 特性简单 1 轮即可,数据集太小不建议太多,可考虑数据增强。 |
| 最大梯度范数 | 防止梯度爆炸。 |
| 最大样本数 | 限制训练样本数量。 |
| 计算类型 | fp32 准确慢;fp16 省显存快但易溢出;bf16 脑浮点数,省显存快且不易溢出;pure_bf16 需硬件支持。 |
| 截断长度 | 输入样本的最大长度。 |
| 批处理大小 | 根据显存调整。 |
| 梯度累计 | 批处理大小 * 梯度累计 = 实际更新频率。 |
| 验证集比例 | 验证集占比。 |
| 学习率调节器 | 决定学习率变化曲线,cosine 最常用。 |
9. 其它参数
10. 部分参数微调设置
仅在微调方法为 freeze 时启用,指定参与训练的层和模块。
11. LoRA 参数设置
| 参数 | 说明 |
|---|
| LoRA 的秩 | 矩阵秩,决定参数量。 |
| LoRA 缩放系数 | 缩放大小。 |
| LoRA 随机丢弃 | 权重丢弃概率。 |
| LoRA+ 学习率比例 | A 矩阵用优化器学习率,B 矩阵为 λ * ηA。 |
| 使用 rslora | 动态调整缩放系数。 |
| 使用 DoRA | 分继承幅度和方向两部分优化。 |
| 使用 PiSSA | 调整主成分,减少计算量。 |
思考点:LoRA 训练哪个参数决定了计算量?未知场景下优先使用哪个?
12. RLHF 参数设置
13. 多模态参数设置
14. GaLore 参数设置
GaLore 是为全参数训练设计的优化工具,使用低秩优化器大幅降低显存。
15. APOLLO 参数设置
APOLLO 是升级版的 Adam/SGD,考虑二阶信息,调节效果更好。
16. BAdam 参数设置
BAdam 解决参数越界问题,当参数接近边界时自动调低更新率。
17. 模型和配置的保存路径
18. SwanLab 参数设置
19. 预测与评估
20. 推理
21. 导出模型
22. 小结
- LLaMA-Factory 支持多种训练阶段和方法。
- 量化与加速方案各有适用场景。
- LoRA 专用参数灵活可调。
- 多模态训练需特定参数设置。
LoRA 模型合并和量化
做 LoRA 微调时,如果有全精度模型和更大的量化模型,应优先选择更大的量化模型。低精度对效果影响有限,但对显存和推理速度影响巨大。
模型合并只能使用全精度模型。量化模型的基座和 LoRA 即使不合并影响也不大,反而部署更灵活,所以合并操作使用频率较低。
1. 模型合并
1.1 使用 WebUI
1.2 使用命令行
如果必须使用全精度模型,训练完成后可执行合并命令。
llamafactory-cli export merge_config.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora
export_dir: models/llama3_lora_sft
export_size: 2
export_device: cpu
export_legacy_format: false
2. 模型量化
2.1 使用 WebUI
2.2 使用命令行
llamafactory-cli export quantization_config.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
export_dir: models/llama3_gptq
export_quantization_bit: 4
export_quantization_dataset: data/c4_demo.json
export_size: 2
export_device: cpu
export_legacy_format: false
实操练习
- 将一个 LoRA 和基座模型做合并。
- 将一个全精度模型做量化。
分布式训练
LLaMA-Factory 支持单机多卡和多机多卡分布式训练,兼容 DDP、DeepSpeed 和 FSDP 三种引擎。
DDP 通过模型并行和数据并行加速,需生成多个进程并同步。DeepSpeed 提供 ZeRO、offload 等优化技术。FSDP 通过全切片数据并行处理更大模型,切分参数、梯度与优化器状态,每张 GPU 只保留一部分,还支持卸载至 CPU。
1. 整体介绍
2. DDP
NativeDDP 是 PyTorch 提供的分布式训练方式。
2.1 单机多卡
- 使用 llamafactory-cli 启动 DDP
FORCE_TORCHRUN=1 llamafactory-cli train examples/train_full/llama3_full_sft_ds3.yaml
默认使用所有 GPU。如需指定(如第 0、1 个):
FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli train config/config1.yaml
torchrun --standalone --nnodes=1 --nproc-per-node=8 src/train.py \
--stage sft \
--model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct \
--do_train \
--dataset alpaca_en_demo \
--template llama3 \
--finetuning_type lora \
--output_dir saves/llama3-8b/lora/ \
--overwrite_cache \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 100 \
--save_steps 500 \
--learning_rate 1e-4 \
--num_train_epochs 2.0 \
--plot_loss \
--bf16
运行 accelerate config 生成配置文件,然后:
accelerate launch \
--config_file accelerate_singleNode_config.yaml \
src/train.py training_config.yaml
compute_environment: LOCAL_MACHINE
distributed_type: MULTI_GPU
num_processes: 8
mixed_precision: fp16
2.2 多机多卡
- 使用 llamafactory-cli 启动 DDP
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 \
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 \
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
compute_environment: LOCAL_MACHINE
distributed_type: MULTI_GPU
num_machines: 2
num_processes: 16
main_process_ip: '192.168.0.1'
main_process_port: 29500
accelerate launch \
--config_file accelerate_multiNode_config.yaml \
train.py llm_config.yaml
实操练习
- 实操基于 DDP 的单机多卡训练。
- 实操基于 DDP 的多机多卡训练。
3. DeepSpeed
微软开发的优化库,支持 ZeRO 阶段。ZeRO-1 仅划分优化器参数,ZeRO-2 划分优化器与梯度,ZeRO-3 划分全部。阶段越高显存越小,速度越慢。若显存充足,建议使用 ZeRO-1 且 offload_param=none。
3.1 单机多卡
- 使用 llamafactory-cli 启动 DeepSpeed
FORCE_TORCHRUN=1 llamafactory-cli train examples/train_full/llama3_full_sft_ds3.yaml
deeepspeed: examples/deepspeed/ds_z3_config.json
deeepspeed --include localhost:1 your_program.py <normal cl args> --deepspeed ds_config.json
deeepspeed --num_gpus 8 src/train.py \
--deepspeed examples/deepspeed/ds_z3_config.json \
--stage sft \
--model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct \
--do_train \
--dataset alpaca_en \
--template llama3 \
--finetuning_type full \
--output_dir saves/llama3-8b/lora/full \
--overwrite_cache \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 500 \
--learning_rate 1e-4 \
--num_train_epochs 2.0 \
--plot_loss \
--bf16
注意:无法使用 CUDA_VISIBLE_DEVICES 指定 GPU,需用 --include localhost:1。
3.2 多机多卡
- 使用 llamafactory-cli 启动 DeepSpeed 训练
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/train_lora/llama3_lora_sft_ds3.yaml
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/train_lora/llama3_lora_sft_ds3.yaml
deeepspeed --num_gpus 8 --num_nodes 2 --hostfile hostfile --master_addr hostname1 --master_port=9901 \
your_program.py <normal cl args> --deepspeed ds_config.json
hostfile 每行指定一个节点,格式为 slots=<num_slots>。
compute_environment: LOCAL_MACHINE
distributed_type: DEEPSPEED
deeepspeed_config: deepspeed_multinode_launcher: standard
zero_stage: 3
num_machines: 2
num_processes: 16
accelerate launch \
--config_file deepspeed_config.yaml \
train.py llm_config.yaml
{"zero_optimization": {"stage": 0}}
{"zero_optimization": {"stage": 2}}
{"zero_optimization": {"stage": 3}}
{"zero_optimization": {"stage": 3, "offload_optimizer": {"device": "cpu"}, "offload_param": {"device": "cpu"}}}
实操练习
- 实操基于 DeepSpeed 的单机多卡训练。
- 实操基于 DeepSpeed 的多机多卡训练。
4. FSDP
PyTorch 的全切片数据并行技术,适合处理更大模型。ShardingStrategy 决定划分方式:FULL_SHARD 类似 ZeRO-3,SHARD_GRAD_OP 类似 ZeRO-2,NO_SHARD 类似 ZeRO-0。
4.1 llamafactory-cli
修改 examples/accelerate/fsdp_config.yaml 及训练配置,运行:
bash examples/extras/fsdp_qlora/train.sh
4.2 accelerate
运行 accelerate config 生成配置,或自行编辑 fsdp_config.yaml。
compute_environment: LOCAL_MACHINE
distributed_type: FSDP
fsdp_config:
fsdp_sharding_strategy: FULL_SHARD
fsdp_offload_params: true
num_processes: 2
accelerate launch \
--config_file fsdp_config.yaml \
src/train.py llm_config.yaml
确保 num_processes 与实际 GPU 数量一致。
实操练习
- 实操基于 FSDP 的单机多卡训练。
- 实操基于 FSDP 的多机多卡训练。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online