文章目錄
- 一、關于 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: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 ./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
數據卷詳情
- 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(三)