LLaMA Factory 大模型微调实战指南
LLaMA Factory 是一个高效的大型语言模型训练与微调平台。其安装部署、数据准备、SFT 训练、LoRA 合并与量化、推理及评估全流程。支持多种模型架构与训练算法,可通过 WebUI 或命令行完成零代码微调,适用于本地化部署与模型优化场景。

LLaMA Factory 是一个高效的大型语言模型训练与微调平台。其安装部署、数据准备、SFT 训练、LoRA 合并与量化、推理及评估全流程。支持多种模型架构与训练算法,可通过 WebUI 或命令行完成零代码微调,适用于本地化部署与模型优化场景。

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调。
框架特性包括:
CUDA 是由 NVIDIA 创建的并行计算平台和编程模型。
uname -m && cat /etc/*release。gcc。输入 gcc --version。sudo /usr/local/cuda-12.1/bin/cuda-uninstaller。nvcc -V 检查版本号。基础环境建议:Ubuntu 22.04, CUDA 12.4.0, Python 3.11, PyTorch 2.x。
运行以下指令安装 LLaMA-Factory 及其依赖:
# 创建 python 环境
conda create -n llama_factory python=3.10 -y
# 切换到新环境
conda activate llama_factory
# 安装 cuda pytorch 等核心工具
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
# 安装 llama_factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安装环境依赖
pip install -e ".[torch,metrics]"
如果出现环境冲突,可尝试 pip install --no-deps -e .。
安装完成后,使用 llamafactory-cli version 校验。
启动 WebUI 页面:
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 上启用量化 LoRA,请根据您的 CUDA 版本选择适当的 bitsandbytes 发行版本。
若要在 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": "劣质回答"
}
]
对每一轮问答只给出一个 true/false 的 label,需额外添加 kto_tag 列。
支持图像、视频及音频数据集输入,需分别添加 images, videos, audios 列。
LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。
启动命令:
llamafactory-cli webui
开始训练前需指定:
模型训练完毕后,可在评估界面指定模型及适配器路径进行数据集评估;或在对话界面指定模型、适配器及推理引擎进行交互。
满意后可在导出界面指定模型、适配器、分块大小、量化等级等参数导出模型。
使用配置文件进行微调:
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
也可追加参数更新 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 适配器合并导出成一个模型:
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
LLaMA-Factory 支持多种推理方式。
使用 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
启动 vllm 推理引擎:
python scripts/vllm_infer.py --model_name_or_path path_to_merged_model --dataset alpaca_en_demo
调用 API 服务示例:
API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml
Python 调用代码:
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
获得 BLEU 和 ROUGE 分数:
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 | 保存评估结果的路径 |

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online