跳到主要内容LLaMA Factory 大模型微调实战指南 | 极客日志PythonAI算法
LLaMA Factory 大模型微调实战指南
LLaMA Factory 是一个高效的大型语言模型训练与微调平台。其安装部署、数据准备、SFT 训练、LoRA 合并与量化、推理及评估全流程。支持多种模型架构与训练算法,可通过 WebUI 或命令行完成零代码微调,适用于本地化部署与模型优化场景。
灵魂伴侣37 浏览 一、LLaMA-Factory 简介
LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调。
框架特性包括:
- 模型种类:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等。
- 训练算法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等。
- 运算精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
- 优化算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。
- 加速算子:FlashAttention-2 和 Unsloth。
- 推理引擎:Transformers 和 vLLM。
- 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等。
二、安装部署
1. CUDA 安装
CUDA 是由 NVIDIA 创建的并行计算平台和编程模型。
- 检查 GPU 是否支持 CUDA:访问 https://developer.nvidia.com/cuda-gpus。
- 确保 Linux 版本支持 CUDA。在命令行中输入
uname -m && cat /etc/*release。
- 检查是否安装了
gcc。输入 gcc --version。
- 下载并安装所需版本的 CUDA(推荐 12.2 版本)。注意根据系统输出选择正确版本。
- 如果之前安装过 CUDA,需先卸载。例如使用
sudo /usr/local/cuda-12.1/bin/cuda-uninstaller。
- 完成后输入
nvcc -V 检查版本号。
2. LLaMA-Factory 安装
基础环境建议:Ubuntu 22.04, CUDA 12.4.0, Python 3.11, PyTorch 2.x。
运行以下指令安装 LLaMA-Factory 及其依赖:
conda create -n llama_factory python=3.10 -y
conda activate llama_factory
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia
pip3 install torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install llmtuner
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
如果出现环境冲突,可尝试 pip install --no-deps -e .。
LLaMA-Factory 校验
安装完成后,使用 llamafactory-cli version 校验。
CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=1 GRADIO_SERVER_PORT=7860 llamafactory-cli webui
下载离线模型
git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
Windows 高级选项
QLoRA
若需在 Windows 上启用量化 LoRA,请根据您的 CUDA 版本选择适当的 bitsandbytes 发行版本。
FlashAttention-2
若要在 Windows 平台上启用 FlashAttention-2,请选择适当的 flash-attention 发行版本。
| 名称 | 描述 |
|---|
| torch | 开源深度学习框架 |
| metrics | 用于评估和监控机器学习模型性能 |
| deepspeed | 分布式训练所需的零冗余优化器 |
| bitsandbytes | 用于大型语言模型量化 |
| vllm | 提供了高速并发的模型推理服务 |
| galore | 提供了高效全参微调算法 |
| badam | 提供了高效全参微调算法 |
三、数据微调
dataset_info.json 包含了所有经过预处理的本地数据集以及在线数据集定义。目前支持 Alpaca 格式和 ShareGPT 格式。
指令监督微调数据集
指令监督微调(Instruct Tuning)通过让模型学习详细的指令及对应的回答来优化表现。
instruction:人类指令(必填)
input:人类输入(选填)
output:模型回答(必填)
system:系统提示词(选填)
history:历史消息列表(选填)
[
{
"instruction": "计算这些物品的总费用。",
"input": "输入:汽车 - $3000,衣服 - $100,书 - $20。",
"output": "汽车、衣服和书的总费用为 $3120。"
}
]
在 dataset_info.json 中的描述应为:
"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"history": "history"
}
}
预训练数据集
[{"text": "document"}, {"text": "document"}]
偏好数据集
用于奖励模型训练、DPO 训练和 ORPO 训练。需提供更优回答 (chosen) 和更差回答 (rejected)。
[
{
"instruction": "人类指令",
"input": "人类输入",
"chosen": "优质回答",
"rejected": "劣质回答"
}
]
KTO 数据集
对每一轮问答只给出一个 true/false 的 label,需额外添加 kto_tag 列。
多模态数据集
支持图像、视频及音频数据集输入,需分别添加 images, videos, audios 列。
四、WebUI
LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。
- 模型名称及路径
- 训练阶段
- 微调方法
- 训练数据集
- 学习率、训练轮数等参数
- 输出目录及配置路径
评估预测与对话
模型训练完毕后,可在评估界面指定模型及适配器路径进行数据集评估;或在对话界面指定模型、适配器及推理引擎进行交互。
导出
满意后可在导出界面指定模型、适配器、分块大小、量化等级等参数导出模型。
五、SFT 训练
命令行
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml learning_rate=1e-5 logging_steps=1
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
stage: sft
do_train: true
finetuning_type: lora
lora_target: all
dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
output_dir: saves/llama3-8b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
| 名称 | 描述 |
|---|
| model_name_or_path | 模型名称或路径 |
| stage | 训练阶段 (rm, pt, sft, PPO, DPO, KTO, ORPO) |
| do_train | true 用于训练,false 用于评估 |
| finetuning_type | 微调方式 (freeze, lora, full) |
| lora_target | LoRA 目标模块 |
| dataset | 使用的数据集 |
| template | 数据集模板 |
| output_dir | 输出路径 |
| learning_rate | 学习率 |
| num_train_epochs | 训练周期数 |
六、LoRA 合并
合并
将预训练模型和 LoRA 适配器合并导出成一个模型:
llamafactory-cli export merge_config.yaml
model:
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:
export_dir: models/llama3_lora_sft
export_size: 2
export_device: cpu
export_legacy_format: false
量化
量化技术可减少显存占用并加速推理。支持 AQLM, AWQ, GPTQ, QLoRA 等方法。
GPTQ 等后训练量化方法需要指定量化位数 export_quantization_bit 及校准数据集 export_quantization_dataset。
model:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
export:
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
七、推理
使用 llamafactory-cli chat inference_config.yaml 或 llamafactory-cli webchat inference_config.yaml 进行对话。
默认使用 Huggingface 引擎,也可指定 infer_backend: vllm 以获得更快的速度。
原始模型推理配置
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: huggingface
微调模型推理配置
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
infer_backend: huggingface
批量推理
python scripts/vllm_infer.py --model_name_or_path path_to_merged_model --dataset alpaca_en_demo
API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml
from openai import OpenAI
client = OpenAI(api_key="0", base_url="http://0.0.0.0:8000/v1")
messages = [{"role": "user", "content": "Who are you?"}]
result = client.chat.completions.create(messages=messages, model="meta-llama/Meta-Llama-3-8B-Instruct")
print(result.choices[0].message)
八、评估
通用能力评估
llamafactory-cli eval examples/train_lora/llama3_lora_eval.yaml
model:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
method:
finetuning_type: lora
dataset:
task: mmlu_test
template: fewshot
lang: en
n_shot: 5
output:
save_dir: saves/llama3-8b/lora/eval
eval:
batch_size: 4
NLG 评估
llamafactory-cli train examples/extras/nlg_eval/llama3_lora_predict.yaml
评估相关参数
| 参数名称 | 类型 | 介绍 |
|---|
| task | str | 评估任务名称 (mmlu_test, ceval_validation, cmmlu_test) |
| batch_size | int | 每个 GPU 使用的批量大小 |
| lang | str | 评估语言 (en, zh) |
| n_shot | int | few-shot 示例数量 |
| save_dir | str | 保存评估结果的路径 |
相关免费在线工具
- 加密/解密文本
使用加密算法(如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