LLaMA-Factory 大模型微调实战 - AI 面试题全解析
一、核心要点速览
💡 核心考点
- LLaMA-Factory: 一站式大语言模型训练与微调平台,支持 100+ 模型和多种训练算法
- 核心优势: 零代码启动、WebUI 界面、多GPU/NPU 分布式训练、量化支持、RLHF/DPO 对齐
- 训练算法: SFT、DPO、KTO、ORPO、PPO、RM 等多种后训练方法
- 微调方法: Full、Freeze、LoRA、QLoRA、DoRA、GaLore、BAdam 等
- 适用场景: 垂直领域适配、指令跟随优化、人类偏好对齐、私有数据训练
二、LLaMA-Factory 是什么
1. 项目简介
LLaMA-Factory 是一个开源的大语言模型训练与微调框架,由 Hiyouga 团队开发维护。它提供了统一的接口来训练、微调和部署各种主流大语言模型,大幅降低了大模型定制化的技术门槛。
- GitHub: https://github.com/hiyouga/LLaMA-Factory
- 官方文档: https://llamafactory.readthedocs.io/zh-cn/latest/
2. 核心特性
| 特性类别 | 支持内容 | 价值 |
|---|---|---|
| 模型种类 | LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等 100+ 模型 | 无需为不同模型学习不同工具 |
| 训练算法 | 预训练(PT)、指令微调(SFT)、奖励模型(RM)、PPO、DPO、KTO、ORPO | 覆盖从预训练到对齐的全流程 |
| 运算精度 | 16-bit Full、Freeze、LoRA、2/3/4/5/6/8-bit QLoRA (AQLM/AWQ/GPTQ/HQQ/EETQ) | 根据资源灵活选择精度 |
| 优化算法 | GaLore、BAdam、DoRA、LongLoRA、LoRA+、LoftQ、PiSSA | 前沿优化技术开箱即用 |
| 加速算子 | FlashAttention-2、Unsloth、Liger Kernel | 训练速度提升 2-3 倍 |
| 推理引擎 | Transformers、vLLM | 高性能推理部署 |
| 实验监控 | LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab | 可视化追踪训练过程 |
| 硬件支持 | GPU (NVIDIA/AMD)、NPU (华为 Ascend) | 国产化适配 |
三、快速开始
1. 环境准备
硬件要求
| 微调方法 | 最小显存 | 推荐配置 | 适用场景 |
|---|---|---|---|
| QLoRA (4-bit) | 8GB | RTX 3090/4090 (24GB) | 个人开发者、小规模实验 |
| LoRA | 16GB | A100/A6000 (40-80GB) | 中等规模数据集 |
| Full Fine-tuning | 80GB+ | 多卡 A100/H100 | 企业级大规模训练 |
| NPU (Ascend 910B) | 64GB | 华为 Atlas 800 | 国产化部署 |
软件依赖
# 1. 创建虚拟环境
conda create -n llama-factory python=3.10
conda activate llama-factory
# 2. 安装 PyTorch (根据你的 CUDA 版本)
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118
# 3. 克隆并安装 LLaMA-Factory
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
# 4. 可选:安装额外依赖
pip install deepspeed # 分布式训练
pip install bitsandbytes # 量化支持
pip install flash-attn --no-build-isolation # Flash Attention 加速
pip install unsloth # Unsloth 加速 (可选)
pip install vllm # vLLM 推理引擎NPU 环境配置(华为昇腾)
bash
# 方式一:手动安装
# 1. 安装 CANN toolkit
# 2. 安装 torch-npu
pip install torch-npu==2.1.0
# 方式二:使用 Docker 预安装镜像
docker pull llamafactory/llama-factory:npu-latest
docker run -it --device=/dev/davinci0 llamafactory/llama-factory:npu-latest2. 数据准备
数据格式规范
LLaMA-Factory 支持多种数据格式,最常用的是 Alpaca 格式:
[
{
"instruction": "解释什么是机器学习",
"input": "",
"output": "机器学习是人工智能的一个分支..."
},
{
"instruction": "将以下文本翻译成英文",
"input": "你好,世界",
"output": "Hello, World"
}
]DPO 偏好数据格式
[
{
"instruction": "写一首关于春天的诗",
"input": "",
"chosen": "春风拂面花自开,燕子归来筑新巢...",
"rejected": "春天来了,花开了,鸟飞回来了。"
}
]自定义数据集示例
# 构建医疗问答数据集
import json
medical_data = [
{
"instruction": "请诊断以下症状",
"input": "患者持续发热3天,伴有咳嗽和乏力",
"output": "根据症状描述,可能的诊断包括:\n1. 上呼吸道感染\n2. 流感\n3. 新冠肺炎(需进一步检查)\n\n建议进行血常规和胸部CT检查。"
}
]
with open("medical_qa.json", "w", encoding="utf-8") as f:
json.dump(medical_data, f, ensure_ascii=False, indent=2)注册自定义数据集
在 data/dataset_info.json 中添加:
json
{
"medical_qa": {
"file_name": "medical_qa.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
},
"medical_dpo": {
"file_name": "medical_dpo.json",
"ranking": true,
"columns": {
"prompt": "instruction",
"query": "input",
"chosen": "chosen",
"rejected": "rejected"
}
}
}四、训练算法详解
1. 训练方法对比
| 方法 | 类型 | 数据需求 | 目标 | 适用场景 |
|---|---|---|---|---|
| Pre-training (PT) | 预训练 | 海量无标注文本 | 学习语言建模 | 从头训练基础模型 |
| Supervised Fine-Tuning (SFT) | 监督微调 | 指令-响应对 | 指令跟随能力 | 垂直领域适配 |
| Reward Modeling (RM) | 奖励模型 | 偏好排序数据 | 学习人类偏好 | RLHF 前置步骤 |
| PPO | 强化学习 | RM + prompt | 最大化奖励 | 高质量对齐(复杂) |
| DPO | 直接偏好优化 | 偏好排序数据 | 直接优化偏好 | 替代 PPO,更简单 |
| KTO | Kahneman-Tversky 优化 | 二元偏好数据 | 心理学启发优化 | 数据稀缺场景 |
| ORPO | 几率比偏好优化 | 偏好排序数据 | 结合 SFT + DPO | 单阶段训练 |
2. 微调方法对比
| 方法 | 原理 | 可训练参数 | 显存占用 | 效果 | 适用场景 |
|---|---|---|---|---|---|
| Full Fine-tuning | 更新所有参数 | 100% | 极高 | 最佳 | 资源充足、追求极致效果 |
| Freeze | 冻结大部分层,只训顶层 | 5-10% | 较低 | 一般 | 快速验证可行性 |
| LoRA | 低秩分解,添加旁路 | 0.1-1% | 中等 | 接近 Full | 大多数场景的首选 |
| QLoRA | LoRA + 4-bit 量化 | 0.1-1% | 最低 | 略低于 LoRA | 显存受限时的最优解 |
| DoRA | 改进的 LoRA,分解权重幅度 | 0.1-1% | 中等 | 优于 LoRA | 对精度要求高的场景 |
| GaLore | 梯度低秩投影 | 100% | 中等 | 接近 Full | 全参数微调但显存有限 |
| BAdam | 块坐标下降 | 100% | 中等 | 接近 Full | 替代 GaLore |
3. LoRA 原理
传统 Full Fine-tuning:
W_new = W_pretrained + ΔW (ΔW 与 W 同维度,参数量巨大)
LoRA 的核心思想:
ΔW = BA (A: d×r, B: r×d, r << d)
例如:
- 原始矩阵: 4096 × 4096 = 16.7M 参数
- LoRA (r=8): 4096×8 + 8×4096 = 65K 参数
- 压缩比: 99.6%4. QLoRA 原理
QLoRA = Quantization + LoRA
步骤:
1. 将基座模型量化为 4-bit NF4 格式
2. 在量化模型上应用 LoRA
3. 使用分页优化器避免内存峰值
优势:
- 显存降低 60-70%
- 效果仅损失 1-2%
- 可在消费级显卡上微调 70B 模型5. DPO (Direct Preference Optimization)
传统 RLHF 流程(复杂):
SFT → Reward Model → PPO Training
DPO 流程(简化):
SFT → DPO (直接优化偏好)
核心公式:
L_DPO = -E[log σ(β log(π_θ(y_w|x)/π_ref(y_w|x)) - β log(π_θ(y_l|x)/π_ref(y_l|x)))]
其中:
- y_w: chosen response (优选回答)
- y_l: rejected response (拒绝回答)
- π_ref: reference model (参考模型,通常是 SFT 后的模型)
- β: 温度参数,控制偏离参考模型的程度五、实战案例
案例 1: WebUI 方式微调(推荐新手)
步骤 1: 启动 WebUI
bash
cd LLaMA-Factory
python src/webui.py浏览器访问 http://localhost:7860
步骤 2: 配置训练参数
# 在 WebUI 中填写以下配置
【模型设置】
- 模型名称: Qwen2.5-7B-Instruct
- 模型路径: Qwen/Qwen2.5-7B-Instruct (自动从 HuggingFace 下载)
- 微调方法: LoRA
【数据设置】
- 训练数据集: medical_qa
- 验证集比例: 0.1
- 最大长度: 1024
【训练参数】
- 学习率: 1e-4
- 训练轮数 (epochs): 3
- 批次大小 (per_device_train_batch_size): 2
- 梯度累积步数: 4
- LoRA Rank: 8
- LoRA Alpha: 16
- LoRA Dropout: 0.05
【输出设置】
- 输出目录: output/qwen2_medical_lora
- 保存策略: steps
- 每 100 步保存一次
【实验监控】
- 启用 LlamaBoard: ✓
- 启用 Wandb: (可选)步骤 3: 开始训练
点击 "开始训练" 按钮,实时监控损失曲线和指标。
案例 2: CLI 方式 SFT 微调
单卡 LoRA 微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
--model_name_or_path Qwen/Qwen2.5-7B-Instruct \
--stage sft \
--do_train \
--dataset medical_qa \
--template qwen \
--finetuning_type lora \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--output_dir output/qwen2_medical_lora \
--overwrite_cache \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 100 \
--learning_rate 1e-4 \
--num_train_epochs 3.0 \
--plot_loss \
--fp16多卡分布式训练 (DeepSpeed)
deepspeed --num_gpus 4 src/train.py \
--model_name_or_path Qwen/Qwen2.5-7B-Instruct \
--stage sft \
--do_train \
--dataset medical_qa \
--template qwen \
--finetuning_type lora \
--deepspeed ds_config.json \
--output_dir output/qwen2_medical_lora_ds \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 2 \
--learning_rate 1e-4 \
--num_train_epochs 3.0 \
--bf16DeepSpeed 配置文件 (ds_config.json):
json
{
"train_micro_batch_size_per_gpu": 4,
"gradient_accumulation_steps": 2,
"optimizer": {
"type": "AdamW",
"params": {
"lr": 1e-4,
"betas": [0.9, 0.999],
"eps": 1e-8,
"weight_decay": 0.01
}
},
"scheduler": {
"type": "WarmupLR",
"params": {
"warmup_min_lr": 0,
"warmup_max_lr": 1e-4,
"warmup_num_steps": 100
}
},
"bf16": {
"enabled": true
},
"zero_optimization": {
"stage": 2,
"offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
"allgather_partitions": true,
"overlap_comm": true,
"reduce_scatter": true,
"contiguous_gradients": true
}
}QLoRA 微调(低显存方案)
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
--model_name_or_path meta-llama/Llama-3-8b \
--stage sft \
--do_train \
--dataset alpaca_zh \
--template llama3 \
--finetuning_type lora \
--quantization_bit 4 \
--lora_rank 8 \
--lora_alpha 16 \
--output_dir output/llama3_qlora \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--learning_rate 2e-4 \
--num_train_epochs 3.0 \
--fp16案例 3: DPO 偏好优化
准备 DPO 数据
[
{
"instruction": "如何保持健康的生活方式?",
"input": "",
"chosen": "保持健康生活方式的建议:\n1. 均衡饮食,多吃蔬菜水果\n2. 每周至少150分钟中等强度运动\n3. 保证7-8小时充足睡眠\n4. 定期体检,预防疾病",
"rejected": "健康生活就是多运动,少吃东西。"
}
]执行 DPO 训练
llamafactory-cli train \
--model_name_or_path Qwen/Qwen2.5-7B-Instruct \
--adapter_name_or_path output/qwen2_sft_lora \
--stage dpo \
--do_train \
--dataset medical_dpo \
--template qwen \
--finetuning_type lora \
--pref_beta 0.1 \
--pref_loss sigmoid \
--output_dir output/qwen2_dpo_lora \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 4 \
--learning_rate 5e-6 \
--num_train_epochs 3.0 \
--fp16关键参数说明:
--adapter_name_or_path: 加载 SFT 后的 LoRA 适配器作为初始模型--pref_beta: DPO 的温度参数,控制偏离参考模型的程度(通常 0.1-0.5)--pref_loss: 偏好损失函数,可选sigmoid(默认)、hinge、ipo
案例 4: 推理与评估
加载微调后的模型
from llmtuner import ChatModel
# 加载基座模型 + LoRA 适配器
model = ChatModel(dict(
model_name_or_path="Qwen/Qwen2.5-7B-Instruct",
adapter_name_or_path="output/qwen2_medical_lora",
template="qwen",
finetuning_type="lora"
))
# 对话测试
response, history = model.chat("高血压患者应该注意什么?")
print(response)批量评估
import json
from llmtuner import ChatModel
model = ChatModel(dict(
model_name_or_path="Qwen/Qwen2.5-7B-Instruct",
adapter_name_or_path="output/qwen2_medical_lora",
template="qwen"
))
# 读取测试集
with open("test_data.json", "r", encoding="utf-8") as f:
test_data = json.load(f)
# 逐条评估
correct = 0
for item in test_data:
pred, _ = model.chat(item["instruction"] + "\n" + item["input"])
if item["output"][:20] in pred: # 简单匹配
correct += 1
accuracy = correct / len(test_data)
print(f"准确率: {accuracy:.2%}")案例 5: 模型合并与导出
合并 LoRA 权重到基座模型
llamafactory-cli export \
--model_name_or_path Qwen/Qwen2.5-7B-Instruct \
--adapter_name_or_path output/qwen2_medical_lora \
--template qwen \
--finetuning_type lora \
--export_dir output/qwen2_medical_merged \
--export_size 2 \
--export_legacy_format False转换为 HuggingFace 格式
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载合并后的模型
model = AutoModelForCausalLM.from_pretrained(
"output/qwen2_medical_merged",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(
"output/qwen2_medical_merged",
trust_remote_code=True
)
# 推送到 HuggingFace Hub
model.push_to_hub("your-username/qwen2-medical-finetuned")
tokenizer.push_to_hub("your-username/qwen2-medical-finetuned")六、超参数调优指南
1. 关键超参数说明
| 参数 | 推荐范围 | 影响 | 调优建议 |
|---|---|---|---|
| learning_rate | 1e-5 ~ 5e-4 | 收敛速度和稳定性 | SFT-LoRA: 1e-4, QLoRA: 2e-4, DPO: 5e-6 |
| lora_rank | 8, 16, 32, 64 | 表达能力和参数量 | 从 8 开始,不足再增加 |
| lora_alpha | rank 的 1-2 倍 | 缩放因子 | 通常设为 rank × 2 |
| lora_dropout | 0.05 ~ 0.1 | 防止过拟合 | 小数据集用 0.1,大数据集用 0.05 |
| batch_size | 1 ~ 8 | 训练稳定性和显存 | 显存允许下尽量大 |
| gradient_accumulation | 1 ~ 8 | 等效批次大小 | 与 batch_size 配合使用 |
| num_train_epochs | 2 ~ 5 | 训练充分程度 | 监控验证集损失,早停 |
| warmup_ratio | 0.03 ~ 0.1 | 初期学习率预热 | 默认 0.03 即可 |
| pref_beta (DPO) | 0.1 ~ 0.5 | 偏好优化强度 | 从 0.1 开始尝试 |
2. 调优流程
graph LR
A[baseline: lr=1e-4, rank=8] --> B{验证集损失下降?}
B -->|是| C[尝试增大 lr 或 rank]
B -->|否| D[降低 lr 或增大 batch_size]
C --> E{是否过拟合?}
D --> E
E -->|是| F[增加 dropout 或减少 epochs]
E -->|否| G[记录最佳配置]
F --> G
G --> H[在测试集上评估]3. 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 损失不下降 | 学习率过大/过小 | 尝试 lr=5e-5 或 lr=2e-4 |
| 显存溢出 (OOM) | 批次太大或未量化 | 减小 batch_size 或使用 QLoRA |
| 过拟合 | 训练轮数过多 | 减少 epochs 或增加 dropout |
| 欠拟合 | 训练不充分 | 增加 epochs 或增大 rank |
| 输出乱码 | 模板错误 | 检查 --template 参数是否正确 |
| DPO 效果差 | beta 值不当 | 调整 pref_beta (0.1-0.5) |
七、性能优化技巧
1. 训练加速
# 启用 Flash Attention 2 (需 Ampere 架构以上 GPU)
pip install flash-attn --no-build-isolation
# 在训练命令中添加
--flash_attn fa2
# 使用 Unsloth 加速 (支持 LLaMA/Mistral/Qwen)
pip install unsloth
# 使用 bf16 代替 fp16 (Ampere 架构支持,推荐)
--bf16
# 梯度检查点 (节省显存,速度略降)
--gradient_checkpointing2. 显存优化
| 技术 | 显存节省 | 速度影响 | 使用方法 |
|---|---|---|---|
| QLoRA (4-bit) | 60-70% | -5% | --quantization_bit 4 |
| Gradient Checkpointing | 40-50% | -20% | --gradient_checkpointing |
| DeepSpeed ZeRO-2 | 30-40% | -10% | --deepspeed ds_config.json |
| CPU Offload | 额外 20% | -30% | 在 ds_config 中配置 |
| GaLore | 50-60% | -15% | --use_galore |
3. 混合精度训练
# FP16 (Volta 架构以上)
--fp16
# BF16 (Ampere 架构以上,推荐)
--bf16
# 纯 FP32 (调试用,极慢)
--fp32八、常见面试题
Q1: LoRA 和 QLoRA 有什么区别?如何选择?
标准回答:
核心区别:
- LoRA: 在完整精度(FP16/BF16)的基座模型上应用低秩分解
- QLoRA: 先将基座模型量化为 4-bit,再应用 LoRA
对比表格:
| 维度 | LoRA | QLoRA |
|---|---|---|
| 显存需求 | 较高 (7B 模型约 16GB) | 极低 (7B 模型约 8GB) |
| 训练速度 | 快 | 略慢 (-5~10%) |
| 最终效果 | 略好 | 略差 (-1~2%) |
| 适用硬件 | A100/A6000 | RTX 3090/4090 |
选型建议:
if 显存 >= 24GB:
选择 LoRA (效果更好)
elif 显存 >= 8GB:
选择 QLoRA (唯一可行方案)
else:
考虑云端训练或更小的模型记忆口诀: "LoRA 快又好,QLoRA 省显存;资源充足选 LoRA,显卡有限 QLoRA"
Q2: SFT 和 DPO 有什么区别?什么时候用 DPO?
标准回答:
核心区别:
| 维度 | SFT | DPO |
|---|---|---|
| 数据类型 | 指令-响应对 (单答案) | 偏好排序数据 (chosen/rejected) |
| 优化目标 | 模仿专家行为 | 对齐人类偏好 |
| 训练流程 | 单阶段 | 通常 SFT → DPO 两阶段 |
| 复杂度 | 简单 | 中等 |
| 效果 | 基础指令跟随 | 更符合人类价值观 |
DPO 的优势:
- 替代复杂的 RLHF: 无需训练独立的 Reward Model 和 PPO
- 更稳定: 避免了 PPO 的训练不稳定问题
- 更高效: 计算开销更低,收敛更快
使用时机:
典型流程:
1. 收集指令数据 → SFT 训练 → 获得基础指令跟随能力
2. 收集偏好数据 (人工标注 chosen/rejected) → DPO 训练 → 对齐人类偏好
3. 评估输出质量,迭代优化记忆口诀: "SFT 学技能,DPO 学品味;先会后好,两步到位"
Q3: 为什么微调后模型效果反而变差了?
标准回答:
常见原因有五个:
灾难性遗忘 (Catastrophic Forgetting)
- 现象: 通用能力下降
- 解决: 混合通用数据和领域数据,或使用 DPO 对齐
过拟合
- 现象: 训练集表现好,测试集差
- 解决: 减少 epochs、增加 dropout、增大数据集
学习率不当
- 现象: 损失震荡或不下降
- 解决: 使用学习率调度器,尝试不同初始 lr
数据质量问题
- 现象: 输出不合理或重复
- 解决: 清洗数据,确保指令-响应对质量
模板不匹配
- 现象: 输出格式混乱
- 解决: 确认
--template与基座模型匹配
排查流程:
1. 检查训练损失曲线 → 是否正常下降
2. 在少量样本上人工评估 → 定位具体问题
3. 对比基座模型输出 → 判断是否退化
4. 调整超参数重新训练 → 迭代优化Q4: LLaMA-Factory 相比其他微调框架有什么优势?
标准回答:
对比主流框架:
| 框架 | 易用性 | 功能丰富度 | 社区活跃度 | 适用人群 |
|---|---|---|---|---|
| LLaMA-Factory | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 全栈开发者 |
| HuggingFace PEFT | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 研究人员 |
| Axolotl | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | MLOps 工程师 |
| FastChat | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | 部署工程师 |
LLaMA-Factory 的核心优势:
- 零代码启动: WebUI 界面,拖拽式配置
- 模型覆盖广: 支持 100+ 模型,无需修改代码
- 算法全面: SFT/DPO/KTO/PPO 等全覆盖
- 中文友好: 完善的中文文档和社区
- 生产就绪: 内置 DeepSpeed、量化、合并导出
- 活跃维护: 每周更新,快速响应 Issue
选型建议:
- 快速原型/中小团队: LLaMA-Factory (首选)
- 学术研究/自定义算法: HuggingFace PEFT
- 大规模集群训练: Axolotl + Slurm
九、最佳实践总结
1. 微调流程 Checklist
□ 数据准备
□ 收集至少 1000+ 高质量样本
□ 清洗噪声数据(去重、纠错)
□ 划分训练集/验证集/测试集 (8:1:1)
□ 转换为 Alpaca/DPO 格式并注册
□ 环境配置
□ 安装正确版本的 PyTorch 和 CUDA
□ 验证 GPU/NPU 可用性和显存大小
□ 安装 LLaMA-Factory 及依赖
□ 实验设计
□ 选择合适的基座模型(根据任务和资源)
□ 确定训练方法(SFT/DPO/KTO)
□ 确定微调方法(LoRA/QLoRA/Full)
□ 设定超参数初始值
□ 规划实验次数和预算
□ 训练执行
□ 小规模试跑(100 steps)验证配置
□ 正式训练并监控损失曲线
□ 定期保存 checkpoint
□ 记录所有超参数和日志
□ 评估优化
□ 在验证集上评估
□ 人工抽样检查输出质量
□ 对比基座模型效果
□ 调整超参数重新训练
□ 部署上线
□ 合并 LoRA 权重
□ 转换为推理格式(vLLM/TGI)
□ 压力测试和延迟优化
□ 灰度发布和监控2. 资源推荐
| 类型 | 资源 | 链接 |
|---|---|---|
| 官方文档 | LLaMA-Factory 中文文档 | llamafactory.readthedocs.io/zh-cn |
| GitHub | 源码仓库 | github.com/hiyouga/LLaMA-Factory |
| 数据集 | Alpaca 中文版 | github.com/ymcui/Chinese-LLaMA-Alpaca |
| 教程 | 知乎专栏 | zhihu.com/column/llama-factory |
| 社区 | Discord | discord.gg/llama-factory |
| 论文 | LoRA 原论文 | arxiv.org/abs/2106.09685 |
| 论文 | QLoRA 原论文 | arxiv.org/abs/2305.14314 |
| 论文 | DPO 原论文 | arxiv.org/abs/2305.18290 |
十、总结与展望
核心要点回顾
| 知识点 | 关键信息 |
|---|---|
| LLaMA-Factory | 一站式训练框架,支持 100+ 模型和多种算法 |
| 训练算法 | SFT、DPO、KTO、ORPO、PPO、RM |
| 微调方法 | Full、LoRA、QLoRA、DoRA、GaLore、BAdam |
| LoRA | 参数高效微调,压缩比 99%+ |
| QLoRA | LoRA + 4-bit 量化,显存降低 60% |
| DPO | 直接偏好优化,替代复杂 RLHF |
| WebUI | 零代码配置,适合快速实验 |
| CLI | 脚本化自动化,适合生产环境 |
| 评估 | 自动指标 + 人工评估 + 基准测试 |
未来趋势
- 更大模型的平民化: QLoRA 让消费级显卡也能微调 70B 模型
- 自动化超参数搜索: Optuna、Ray Tune 集成
- 多模态微调: 支持图像、音频联合训练
- 在线学习: 持续从用户反馈中增量更新
- 安全对齐: RLHF、DPO 成为标配
- 国产化适配: NPU (华为昇腾) 支持完善