github: https://github.com/hiyouga/LLaMA-Factory
目录
项目特色
性能指标
模型
训练方法
数据集
软硬件依赖
使用
安装 LLaMA Factory
数据准备
快速开始
LLaMA Board 可视化微调(由 Gradio 驱动)
构建 Docker
利用 vLLM 部署 OpenAI API
从魔搭社区下载
从魔乐社区下载
使用 W&B 面板
使用 SwanLab 面板
与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。
变量定义
在 ChatGLM 的 P-Tuning 中采用 pre_seq_len=128,在 LLaMA Factory 的 LoRA 微调中采用 lora_rank=32。
模型名 | 参数量 | Template |
---|---|---|
Baichuan 2 | 7B/13B | baichuan2 |
BLOOM/BLOOMZ | 560M/1.1B/1.7B/3B/7.1B/176B | - |
ChatGLM3 | 6B | chatglm3 |
Command R | 35B/104B | cohere |
DeepSeek (Code/MoE) | 7B/16B/67B/236B | deepseek |
DeepSeek 2.5/3 | 236B/671B | deepseek3 |
DeepSeek R1 (Distill) | 1.5B/7B/8B/14B/32B/70B/671B | deepseek3 |
Falcon | 7B/11B/40B/180B | falcon |
Gemma/Gemma 2/CodeGemma | 2B/7B/9B/27B | gemma |
Gemma 3 | 1B/4B/12B/27B | gemma3/gemma (1B) |
GLM-4 | 9B | glm4 |
GPT-2 | 0.1B/0.4B/0.8B/1.5B | - |
Granite 3.0-3.1 | 1B/2B/3B/8B | granite3 |
Hunyuan | 7B | hunyuan |
Index | 1.9B | index |
InternLM 2-3 | 7B/8B/20B | intern2 |
Llama | 7B/13B/33B/65B | - |
Llama 2 | 7B/13B/70B | llama2 |
Llama 3-3.3 | 1B/3B/8B/70B | llama3 |
Llama 3.2 Vision | 11B/90B | mllama |
Llama 4 | 109B/402B | llama4 |
LLaVA-1.5 | 7B/13B | llava |
LLaVA-NeXT | 7B/8B/13B/34B/72B/110B | llava_next |
LLaVA-NeXT-Video | 7B/34B | llava_next_video |
MiniCPM | 1B/2B/4B | cpm/cpm3 |
MiniCPM-o-2.6/MiniCPM-V-2.6 | 8B | minicpm_o/minicpm_v |
Ministral/Mistral-Nemo | 8B/12B | ministral |
Mistral/Mixtral | 7B/8x7B/8x22B | mistral |
Mistral Small | 24B | mistral_small |
OLMo | 1B/7B | - |
PaliGemma/PaliGemma2 | 3B/10B/28B | paligemma |
Phi-1.5/Phi-2 | 1.3B/2.7B | - |
Phi-3/Phi-3.5 | 4B/14B | phi |
Phi-3-small | 7B | phi_small |
Phi-4 | 14B | phi4 |
Pixtral | 12B | pixtral |
Qwen/QwQ (1-2.5) (Code/Math/MoE) | 0.5B/1.5B/3B/7B/14B/32B/72B/110B | qwen |
Qwen2-Audio | 7B | qwen2_audio |
Qwen2.5-Omni | 7B | qwen2_omni |
Qwen2-VL/Qwen2.5-VL/QVQ | 2B/3B/7B/32B/72B | qwen2_vl |
Skywork o1 | 8B | skywork_o1 |
StarCoder 2 | 3B/7B/15B | - |
TeleChat2 | 3B/7B/35B/115B | telechat2 |
XVERSE | 7B/13B/65B | xverse |
Yi/Yi-1.5 (Code) | 1.5B/6B/9B/34B | yi |
Yi-VL | 6B/34B | yi_vl |
Yuan 2 | 2B/51B/102B | yuan |
对于所有“基座”(Base)模型,template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Instruct/Chat)模型请务必使用对应的模板。请务必在训练和推理时采用完全一致的模板。
项目所支持模型的完整列表请参阅 constants.py。也可以在 template.py 中添加自己的对话模板。
方法 | 全参数训练 | 部分参数训练 | LoRA | QLoRA |
---|---|---|---|---|
预训练 | ✅ | ✅ | ✅ | ✅ |
指令监督微调 | ✅ | ✅ | ✅ | ✅ |
奖励模型训练 | ✅ | ✅ | ✅ | ✅ |
PPO 训练 | ✅ | ✅ | ✅ | ✅ |
DPO 训练 | ✅ | ✅ | ✅ | ✅ |
KTO 训练 | ✅ | ✅ | ✅ | ✅ |
ORPO 训练 | ✅ | ✅ | ✅ | ✅ |
SimPO 训练 | ✅ | ✅ | ✅ | ✅ |
有关 PPO 的实现细节,请参考此博客。
Wiki Demo (en)
RefinedWeb (en)
RedPajama V2 (en)
Wikipedia (en)
Wikipedia (zh)
Pile (en)
SkyPile (zh)
FineWeb (en)
FineWeb-Edu (en)
The Stack (en)
StarCoder (en)
Identity (en&zh)
Stanford Alpaca (en)
Stanford Alpaca (zh)
Alpaca GPT4 (en&zh)
Glaive Function Calling V2 (en&zh)
LIMA (en)
Guanaco Dataset (multilingual)
BELLE 2M (zh)
BELLE 1M (zh)
BELLE 0.5M (zh)
BELLE Dialogue 0.4M (zh)
BELLE School Math 0.25M (zh)
BELLE Multiturn Chat 0.8M (zh)
UltraChat (en)
OpenPlatypus (en)
CodeAlpaca 20k (en)
Alpaca CoT (multilingual)
OpenOrca (en)
SlimOrca (en)
MathInstruct (en)
Firefly 1.1M (zh)
Wiki QA (en)
Web QA (zh)
WebNovel (zh)
Nectar (en)
deepctrl (en&zh)
Advertise Generating (zh)
ShareGPT Hyperfiltered (en)
ShareGPT4 (en&zh)
UltraChat 200k (en)
AgentInstruct (en)
LMSYS Chat 1M (en)
Evol Instruct V2 (en)
Cosmopedia (en)
STEM (zh)
Ruozhiba (zh)
Neo-sft (zh)
Magpie-Pro-300K-Filtered (en)
Magpie-ultra-v0.1 (en)
WebInstructSub (en)
OpenO1-SFT (en&zh)
Open-Thoughts (en)
Open-R1-Math (en)
Chinese-DeepSeek-R1-Distill (zh)
LLaVA mixed (en&zh)
Pokemon-gpt4o-captions (en&zh)
Open Assistant (de)
Dolly 15k (de)
Alpaca GPT4 (de)
OpenSchnabeltier (de)
Evol Instruct (de)
Dolphin (de)
Booksum (de)
Airoboros (de)
Ultrachat (de)
DPO mixed (en&zh)
UltraFeedback (en)
RLHF-V (en)
VLFeedback (en)
Orca DPO Pairs (en)
HH-RLHF (en)
Nectar (en)
Orca DPO (de)
KTO mixed (en)
部分数据集的使用需要确认,推荐使用下述命令登录 Hugging Face 账户。
pip install --upgrade huggingface_hub
huggingface-cli login
必需项 | 至少 | 推荐 |
---|---|---|
python | 3.9 | 3.10 |
torch | 1.13.1 | 2.6.0 |
transformers | 4.41.2 | 4.50.0 |
datasets | 2.16.0 | 3.2.0 |
accelerate | 0.34.0 | 1.2.1 |
peft | 0.14.0 | 0.15.0 |
trl | 0.8.6 | 0.9.6 |
可选项 | 至少 | 推荐 |
---|---|---|
CUDA | 11.6 | 12.2 |
deepspeed | 0.10.0 | 0.16.4 |
bitsandbytes | 0.39.0 | 0.43.1 |
vllm | 0.4.3 | 0.8.2 |
flash-attn | 2.3.0 | 2.7.2 |
硬件依赖
* 估算值
方法 | 精度 | 7B | 14B | 30B | 70B | x B |
---|---|---|---|---|---|---|
Full (bf16 or fp16 ) |
32 | 120GB | 240GB | 600GB | 1200GB | 18x GB |
Full (pure_bf16 ) |
16 | 60GB | 120GB | 300GB | 600GB | 8x GB |
Freeze/LoRA/GaLore/APOLLO/BAdam | 16 | 16GB | 32GB | 64GB | 160GB | 2x GB |
QLoRA | 8 | 10GB | 20GB | 40GB | 80GB | x GB |
QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | x/2 GB |
QLoRA | 2 | 4GB | 8GB | 16GB | 24GB | x/4 GB |
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
可选的额外依赖项:torch、torch-npu、metrics、deepspeed、liger-kernel、bitsandbytes、hqq、eetq、gptq、awq、aqlm、vllm、sglang、galore、apollo、badam、adam-mini、qwen、minicpm_v、modelscope、openmind、swanlab、quality。
遇到包冲突时,可使用 pip install --no-deps -e . 解决。
关于数据集文件的格式,请参考 data/README_zh.md 的内容。可以使用 HuggingFace / ModelScope / Modelers 上的数据集或加载本地数据集。
使用自定义数据集时,请更新 data/dataset_info.json 文件。
下面三行命令分别对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并。
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml
高级用法请参考 examples/README_zh.md(包括多 GPU 微调)。
使用 llamafactory-cli help 显示帮助信息。
遇到报错请先看常见问题。
llamafactory-cli webui
CUDA 用户:
cd docker/docker-cuda/
docker compose up -d
docker compose exec llamafactory bash
昇腾 NPU 用户:
cd docker/docker-npu/
docker compose up -d
docker compose exec llamafactory bash
AMD ROCm 用户:
cd docker/docker-rocm/
docker compose up -d
docker compose exec llamafactory bash
不使用 Docker Compose 构建
CUDA 用户:
docker build -f ./docker/docker-cuda/Dockerfile \
--build-arg INSTALL_BNB=false \
--build-arg INSTALL_VLLM=false \
--build-arg INSTALL_DEEPSPEED=false \
--build-arg INSTALL_FLASHATTN=false \
--build-arg PIP_INDEX=https://pypi.org/simple \
-t llamafactory:latest .
docker run -dit --gpus=all \
-v ./hf_cache:/root/.cache/huggingface \
-v ./ms_cache:/root/.cache/modelscope \
-v ./om_cache:/root/.cache/openmind \
-v ./data:/app/data \
-v ./output:/app/output \
-p 7860:7860 \
-p 8000:8000 \
--shm-size 16G \
--name llamafactory \
llamafactory:latest
docker exec -it llamafactory bash
昇腾 NPU 用户:
# 根据您的环境选择镜像
docker build -f ./docker/docker-npu/Dockerfile \
--build-arg INSTALL_DEEPSPEED=false \
--build-arg PIP_INDEX=https://pypi.org/simple \
-t llamafactory:latest .
# 根据您的资源更改 `device`
docker run -dit \
-v ./hf_cache:/root/.cache/huggingface \
-v ./ms_cache:/root/.cache/modelscope \
-v ./om_cache:/root/.cache/openmind \
-v ./data:/app/data \
-v ./output:/app/output \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-p 7860:7860 \
-p 8000:8000 \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
--shm-size 16G \
--name llamafactory \
llamafactory:latest
docker exec -it llamafactory bash
AMD ROCm 用户:
docker build -f ./docker/docker-rocm/Dockerfile \
--build-arg INSTALL_BNB=false \
--build-arg INSTALL_VLLM=false \
--build-arg INSTALL_DEEPSPEED=false \
--build-arg INSTALL_FLASHATTN=false \
--build-arg PIP_INDEX=https://pypi.org/simple \
-t llamafactory:latest .
docker run -dit \
-v ./hf_cache:/root/.cache/huggingface \
-v ./ms_cache:/root/.cache/modelscope \
-v ./om_cache:/root/.cache/openmind \
-v ./data:/app/data \
-v ./output:/app/output \
-v ./saves:/app/saves \
-p 7860:7860 \
-p 8000:8000 \
--device /dev/kfd \
--device /dev/dri \
--shm-size 16G \
--name llamafactory \
llamafactory:latest
docker exec -it llamafactory bash
数据卷详情
API_PORT=8000 llamafactory-cli api examples/inference/llama3_vllm.yaml
API 文档请查阅这里。 示例:图像理解 | 工具调用
如果在 Hugging Face 模型和数据集的下载中遇到了问题,可以通过下述方法使用魔搭社区。
export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1`
将 model_name_or_path 设置为模型 ID 来加载对应的模型。在魔搭社区查看所有可用的模型,例如 LLM-Research/Meta-Llama-3-8B-Instruct。
也可以通过下述方法,使用魔乐社区下载数据集和模型。
export USE_OPENMIND_HUB=1 # Windows 使用 `set USE_OPENMIND_HUB=1`
将 model_name_or_path 设置为模型 ID 来加载对应的模型。在魔乐社区查看所有可用的模型,例如 TeleAI/TeleChat-7B-pt。
若要使用 Weights & Biases 记录实验数据,请在 yaml 文件中添加下面的参数。
report_to: wandb
run_name: test_run # 可选
在启动训练任务时,将 WANDB_API_KEY 设置为密钥来登录 W&B 账户。
若要使用 SwanLab 记录实验数据,请在 yaml 文件中添加下面的参数。
use_swanlab: true
swanlab_run_name: test_run # 可选
在启动训练任务时,登录SwanLab账户有以下三种方式:
至此,本文的内容就结束了。