欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 【微调大模型】轻松微调百余种大模型:LLaMA-Factory

【微调大模型】轻松微调百余种大模型:LLaMA-Factory

2025/4/12 21:39:55 来源:https://blog.csdn.net/wss794/article/details/147108217  浏览:    关键词:【微调大模型】轻松微调百余种大模型:LLaMA-Factory

github: https://github.com/hiyouga/LLaMA-Factory

目录

项目特色

性能指标

模型

训练方法

数据集

软硬件依赖

使用

安装 LLaMA Factory

数据准备

快速开始

LLaMA Board 可视化微调(由 Gradio 驱动)

构建 Docker

利用 vLLM 部署 OpenAI API

从魔搭社区下载

从魔乐社区下载

使用 W&B 面板

使用 SwanLab 面板



项目特色

  • 多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Qwen2-VL、DeepSeek、Yi、Gemma、ChatGLM、Phi 等等。
  • 集成方法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。
  • 多种精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调
  • 先进算法GaLoreBAdamAPOLLOAdam-mini、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。
  • 实用技巧FlashAttention-2UnslothLiger Kernel、RoPE scaling、NEFTune 和 rsLoRA。
  • 广泛任务:多轮对话、工具调用、图像理解、视觉定位、视频识别和语音理解等等。
  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等等
  • 极速推理:基于 vLLM 或 SGLang 的 OpenAI 风格 API、浏览器界面和命令行接口。

性能指标

与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。

变量定义

  • Training  Speed: 训练阶段每秒处理的样本数量。(批处理大小=4,截断长度=1024)
  • Rouge Score广告文案生成任务验证集上的 Rouge-2 分数。(批处理大小=4,截断长度=1024)
  • GPU Memory: 4 比特量化训练的 GPU 显存峰值。(批处理大小=1,截断长度=1024)

在 ChatGLM 的 P-Tuning 中采用 pre_seq_len=128,在 LLaMA Factory 的 LoRA 微调中采用 lora_rank=32

模型

模型名参数量Template
Baichuan 27B/13Bbaichuan2
BLOOM/BLOOMZ560M/1.1B/1.7B/3B/7.1B/176B-
ChatGLM36Bchatglm3
Command R35B/104Bcohere
DeepSeek (Code/MoE)7B/16B/67B/236Bdeepseek
DeepSeek 2.5/3236B/671Bdeepseek3
DeepSeek R1 (Distill)1.5B/7B/8B/14B/32B/70B/671Bdeepseek3
Falcon7B/11B/40B/180Bfalcon
Gemma/Gemma 2/CodeGemma2B/7B/9B/27Bgemma
Gemma 31B/4B/12B/27Bgemma3/gemma (1B)
GLM-49Bglm4
GPT-20.1B/0.4B/0.8B/1.5B-
Granite 3.0-3.11B/2B/3B/8Bgranite3
Hunyuan7Bhunyuan
Index1.9Bindex
InternLM 2-37B/8B/20Bintern2
Llama7B/13B/33B/65B-
Llama 27B/13B/70Bllama2
Llama 3-3.31B/3B/8B/70Bllama3
Llama 3.2 Vision11B/90Bmllama
Llama 4109B/402Bllama4
LLaVA-1.57B/13Bllava
LLaVA-NeXT7B/8B/13B/34B/72B/110Bllava_next
LLaVA-NeXT-Video7B/34Bllava_next_video
MiniCPM1B/2B/4Bcpm/cpm3
MiniCPM-o-2.6/MiniCPM-V-2.68Bminicpm_o/minicpm_v
Ministral/Mistral-Nemo8B/12Bministral
Mistral/Mixtral7B/8x7B/8x22Bmistral
Mistral Small24Bmistral_small
OLMo1B/7B-
PaliGemma/PaliGemma23B/10B/28Bpaligemma
Phi-1.5/Phi-21.3B/2.7B-
Phi-3/Phi-3.54B/14Bphi
Phi-3-small7Bphi_small
Phi-414Bphi4
Pixtral12Bpixtral
Qwen/QwQ (1-2.5) (Code/Math/MoE)0.5B/1.5B/3B/7B/14B/32B/72B/110Bqwen
Qwen2-Audio7Bqwen2_audio
Qwen2.5-Omni7Bqwen2_omni
Qwen2-VL/Qwen2.5-VL/QVQ2B/3B/7B/32B/72Bqwen2_vl
Skywork o18Bskywork_o1
StarCoder 23B/7B/15B-
TeleChat23B/7B/35B/115Btelechat2
XVERSE7B/13B/65Bxverse
Yi/Yi-1.5 (Code)1.5B/6B/9B/34Byi
Yi-VL6B/34Byi_vl
Yuan 22B/51B/102Byuan

 对于所有“基座”(Base)模型,template 参数可以是 defaultalpacavicuna 等任意值。但“对话”(Instruct/Chat)模型请务必使用对应的模板。请务必在训练和推理时采用完全一致的模板。 

项目所支持模型的完整列表请参阅 constants.py也可以在 template.py 中添加自己的对话模板

训练方法

方法全参数训练部分参数训练LoRAQLoRA
预训练
指令监督微调
奖励模型训练
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_hubhuggingface-cli login

软硬件依赖

必需项至少推荐
python3.93.10
torch1.13.12.6.0
transformers4.41.24.50.0
datasets2.16.03.2.0
accelerate0.34.01.2.1
peft0.14.00.15.0
trl0.8.60.9.6
可选项至少推荐
CUDA11.612.2
deepspeed0.10.00.16.4
bitsandbytes0.39.00.43.1
vllm0.4.30.8.2
flash-attn2.3.02.7.2

硬件依赖

估算值

方法精度7B14B30B70BxB
Full (bf16 or fp16)32120GB240GB600GB1200GB18xGB
Full (pure_bf16)1660GB120GB300GB600GB8xGB
Freeze/LoRA/GaLore/APOLLO/BAdam1616GB32GB64GB160GB2xGB
QLoRA810GB20GB40GB80GBxGB
QLoRA46GB12GB24GB48GBx/2GB
QLoRA24GB8GB16GB24GBx/4GB

使用

安装 LLaMA Factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip 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.yamlllamafactory-cli chat examples/inference/llama3_lora_sft.yamlllamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

高级用法请参考 examples/README_zh.md(包括多 GPU 微调)。

 使用 llamafactory-cli help 显示帮助信息。 

遇到报错请先看常见问题

LLaMA Board 可视化微调(由 Gradio 驱动)

llamafactory-cli webui

构建 Docker

CUDA 用户:

cd docker/docker-cuda/docker compose up -ddocker compose exec llamafactory bash

昇腾 NPU 用户:

cd docker/docker-npu/docker compose up -ddocker compose exec llamafactory bash

AMD ROCm 用户:

cd docker/docker-rocm/docker compose up -ddocker 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:latestdocker 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:latestdocker 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:latestdocker exec -it llamafactory bash

数据卷详情

  • hf_cache:使用宿主机的 Hugging Face 缓存文件夹,允许更改为新的目录。
  • ms_cache:类似 Hugging Face 缓存文件夹,为 ModelScope 用户提供。
  • om_cache:类似 Hugging Face 缓存文件夹,为 Modelers 用户提供。
  • data:宿主机中存放数据集的文件夹路径。
  • output:将导出目录设置为该路径后,即可在宿主机中访问导出后的模型。

利用 vLLM 部署 OpenAI API

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

使用 W&B 面板

若要使用 Weights & Biases 记录实验数据,请在 yaml 文件中添加下面的参数。

report_to: wandbrun_name: test_run # 可选

在启动训练任务时,将 WANDB_API_KEY 设置为密钥来登录 W&B 账户。

使用 SwanLab 面板

若要使用 SwanLab 记录实验数据,请在 yaml 文件中添加下面的参数。

use_swanlab: trueswanlab_run_name: test_run # 可选

在启动训练任务时,登录SwanLab账户有以下三种方式:

  • 方式一:在 yaml 文件中添加 swanlab_api_key=<your_api_key> ,并设置为你的 API 密钥
  • 方式二:将环境变量 SWANLAB_API_KEY 设置为你的 API 密钥
  • 方式三:启动前使用 swanlab login 命令完成登录。

至此,本文的内容就结束了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词