当前位置:AIGC资讯 > AIGC > 正文

LLaMA-Factory

文章目录

一、关于 LLaMA-Factory 项目特色 性能指标 二、如何使用 1、安装 LLaMA Factory 2、数据准备 3、快速开始 4、LLaMA Board 可视化微调 5、构建 Docker CUDA 用户: 昇腾 NPU 用户: 不使用 Docker Compose 构建 CUDA 用户: 昇腾 NPU 用户: 数据卷详情 6、利用 vLLM 部署 OpenAI API 7、从魔搭社区下载 8、使用 W&B 面板 三、支持 1、模型 2、训练方法 3、数据集 预训练数据集 指令微调数据集 偏好数据集 4、软硬件依赖 硬件依赖

一、关于 LLaMA-Factory

A WebUI for Efficient Fine-Tuning of 100+ LLMs

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

Demo 视频

其他打开方式

Colab:https://colab.research.google.com/drive/1d5KQtbemerlSDSxZIfAaWXhKr30QypiK?usp=sharing PAI-DSW: https://gallery.pai-ml.com/#/preview/deepLearning/nlp/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 和 Agent 微调。 实用技巧:FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等等。 极速推理:基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。

性能指标

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

二、如何使用

1、安装 LLaMA Factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

可选的额外依赖项:torch、torch-npu、metrics、deepspeed、bitsandbytes、hqq、eetq、gptq、awq、aqlm、vllm、galore、badam、qwen、modelscope、quality

Tip : 遇到包冲突时,可使用 pip install --no-deps -e . 解决。

Windows 和 昇腾 NPU 用户指南 详见:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md

2、数据准备

关于数据集文件的格式,请参考 data/README_zh.md 的内容。你可以使用 HuggingFace / ModelScope 上的数据集或加载本地数据集。

Note:使用自定义数据集时,请更新 data/dataset_info.json 文件。

3、快速开始

下面三行命令分别对 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 微调)。

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

4、LLaMA Board 可视化微调

由 Gradio 驱动

llamafactory-cli webui

5、构建 Docker

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
不使用 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 ./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 ./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
数据卷详情
hf_cache:使用宿主机的 Hugging Face 缓存文件夹,允许更改为新的目录。 data:宿主机中存放数据集的文件夹路径。 output:将导出目录设置为该路径后,即可在宿主机中访问导出后的模型。

6、利用 vLLM 部署 OpenAI API

API_PORT=8000 llamafactory-cli api examples/inference/llama3_vllm.yaml

Tip : API 文档请查阅 https://platform.openai.com/docs/api-reference/chat/create。

7、从魔搭社区下载

如果您在 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

8、使用 W&B 面板

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

report_to: wandb
run_name: test_run # 可选

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

三、支持

1、模型

模型名 模型大小 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 Falcon 7B/11B/40B/180B falcon Gemma/Gemma 2/CodeGemma 2B/7B/9B/27B gemma GLM-4 9B glm4 InternLM2 7B/20B intern2 Llama 7B/13B/33B/65B - Llama 2 7B/13B/70B llama2 Llama 3 8B/70B llama3 LLaVA-1.5 7B/13B vicuna Mistral/Mixtral 7B/8x7B/8x22B mistral OLMo 1B/7B - PaliGemma 3B gemma Phi-1.5/Phi-2 1.3B/2.7B - Phi-3 4B/7B/14B phi Qwen/Qwen1.5/Qwen2 (Code/MoE) 0.5B/1.5B/4B/7B/14B/32B/72B/110B qwen StarCoder 2 3B/7B/15B - XVERSE 7B/13B/65B xverse Yi/Yi-1.5 6B/9B/34B yi Yi-VL 6B/34B yi_vl Yuan 2 2B/51B/102B yuan

Note : 对于所有“基座”(Base)模型,template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Instruct/Chat)模型请务必使用对应的模板。

请务必在训练和推理时采用完全一致的模板。

项目所支持模型的完整列表请参阅 constants.py。

您也可以在 template.py 中添加自己的对话模板。

2、训练方法

方法 全参数训练 部分参数训练 LoRA QLoRA 预训练 ✅ ✅ ✅ ✅ 指令监督微调 ✅ ✅ ✅ ✅ 奖励模型训练 ✅ ✅ ✅ ✅ PPO 训练 ✅ ✅ ✅ ✅ DPO 训练 ✅ ✅ ✅ ✅ KTO 训练 ✅ ✅ ✅ ✅ ORPO 训练 ✅ ✅ ✅ ✅ SimPO 训练 ✅ ✅ ✅ ✅

3、数据集

预训练数据集
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) WebInstructSub (en) Magpie-Pro-300K-Filtered (en) LLaVA mixed (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) 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

4、软硬件依赖

必需项 至少 推荐 python 3.8 3.11 torch 1.13.1 2.3.0 transformers 4.41.2 4.41.2 datasets 2.16.0 2.19.2 accelerate 0.30.1 0.30.1 peft 0.11.1 0.11.1 trl 0.8.6 0.9.4 可选项 至少 推荐 CUDA 11.6 12.2 deepspeed 0.10.0 0.14.0 bitsandbytes 0.39.0 0.43.1 vllm 0.4.3 0.4.3 flash-attn 2.3.0 2.5.9
硬件依赖

* 估算值

方法 精度 7B 13B 30B 70B 110B 8x7B 8x22B Full AMP 120GB 240GB 600GB 1200GB 2000GB 900GB 2400GB Full 16 60GB 120GB 300GB 600GB 900GB 400GB 1200GB Freeze 16 20GB 40GB 80GB 200GB 360GB 160GB 400GB LoRA/GaLore/BAdam 16 16GB 32GB 64GB 160GB 240GB 120GB 320GB QLoRA 8 10GB 20GB 40GB 80GB 140GB 60GB 160GB QLoRA 4 6GB 12GB 24GB 48GB 72GB 30GB 96GB QLoRA 2 4GB 8GB 16GB 24GB 48GB 18GB 48GB

2024-07-17(三)

总结

### 文章总结: LLaMA-Factory
**一、关于LLaMA-Factory**
**项目简介**:
- LLaMA-Factory是一个支持100多种LLMs(大语言模型)高效微调的WebUI工具,为LLMs提供了快速、灵活的定制和实验平台。
- **GitHub地址**:https://github.com/hiyouga/LLaMA-Factory
- **Demo视频及其他访问方式**:提供了Colab和PAI-DSW等在线演示链接及本地机器的使用方法。
**项目特色**:
- **多样性**:支持多种LLMs模型(如LLaMA、ChatGLM等)和微调技术(如LoRA、PPO等)。
- **灵活性**:提供全参数微调、冻结微调、LoRA微调等多种精度选项,结合不同的量化技术(如QLoRA)以进一步节省资源。
- **高级算法**:集成多种前沿算法如GaLore、BAdam等,提供FlashAttention-2等高级实用技巧。
- **实验监控**:支持LlamaBoard、TensorBoard等多种工具进行实验结果的可视化和监控。
- **极速推理**:基于vLLM实现OpenAI风格的API,提供浏览器界面和命令行接口。
**性能指标:**
- **加速效果**:相比ChatGLM官方的P-Tuning微调,LLaMA Factory在LoRA微调中提供了3.7倍的加速比,且在高Rouge分数的广告文案生成任务上表现优异。
- **GPU显存消耗**:结合4比特量化技术进一步降低了GPU显存消耗。
**二、如何使用**
1. **安装LLaMA Factory**:通过Git克隆和pip安装主要依赖,可选依赖项包括deepspeed、bitsandbytes等。
2. **数据准备**:支持HuggingFace/ModelScope等多个数据源,数据格式和自定义数据集均提供参考指南。
3. **快速开始**:通过三行命令实现LoRA微调、推理和合并模型。
4. **LLaMA Board可视化微调**:通过`llamafactory-cli webui`命令启动由Gradio驱动的Web界面进行可视化微调。
5. **构建Docker**:针对不同硬件(CUDA用户和昇腾NPU用户),提供了详细的Docker构建和运行步骤。
6. **部署OpenAI API**:利用vLLM部署符合OpenAI风格的API。
7. **从魔搭社区下载**:通过环境变量设置使用魔搭社区的数据源,避免Hugging Face下载问题。
8. **使用W&B面板**:在yaml文件中添加Weights & Biases的参数,记录和分析实验数据。
**三、支持**
1. **模型**:支持多达数十种LLMs模型,包含不同大小和多语言支持,需确保训练和推理使用相同的模型模板。
2. **训练方法**:全覆盖预训练、指令监督微调、奖励模型训练等多种训练方法,同时支持全参数训练、部分参数训练及多种量化微调技术。
3. **数据集**:涵盖了广泛的预训练、指令微调及偏好数据集源,确保充分支持和多语言适配。
4. **软硬件依赖**:详细列出了必须的Python库和可选依赖项的最低和推荐版本,以及不同硬件支持的CUDA版本和微调消耗估算。
**总结**
LLaMA-Factory提供了一个灵活且易于上手的平台,用于多样化LLMs的高效微调、推理及API部署,通过丰富的支持和详尽的使用指南,帮助用户和研究者快速进行实验和创新。

更新时间 2024-08-10