原文:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md
??? 加入我們的微信群。
[?English?| 中文 ]
LLaMA Board: 通過(guò)一站式網(wǎng)頁(yè)界面快速上手 LLaMA Factory
通過(guò)??? Spaces?或?ModelScope?預(yù)覽 LLaMA Board。
使用?CUDA_VISIBLE_DEVICES=0 python src/train_web.py
?啟動(dòng) LLaMA Board。(該模式目前僅支持單卡訓(xùn)練)
下面是使用單張 GPU 在 10 分鐘內(nèi)更改對(duì)話式大型語(yǔ)言模型自我認(rèn)知的示例。
?tutorial.mp4?
目錄
- 性能指標(biāo)
- 更新日志
- 模型
- 訓(xùn)練方法
- 數(shù)據(jù)集
- 軟硬件依賴
- 如何使用
- 使用了 LLaMA Factory 的項(xiàng)目
- 協(xié)議
- 引用
- 致謝
性能指標(biāo)
與 ChatGLM 官方的?P-Tuning?微調(diào)相比,LLaMA-Factory 的 LoRA 微調(diào)提供了?3.7 倍的加速比,同時(shí)在廣告文案生成任務(wù)上取得了更高的 Rouge 分?jǐn)?shù)。結(jié)合 4 比特量化技術(shù),LLaMA-Factory 的 QLoRA 微調(diào)進(jìn)一步降低了 GPU 顯存消耗。
變量定義
更新日志
[23/12/23] 我們針對(duì) LLaMA, Mistral 和 Yi 模型支持了?unsloth?的 LoRA 訓(xùn)練加速。請(qǐng)使用?--use_unsloth
?參數(shù)啟用 unsloth 優(yōu)化。該方法可提供 1.7 倍的訓(xùn)練速度,詳情請(qǐng)查閱此頁(yè)面。
[23/12/12] 我們支持了微調(diào)最新的混合專家模型?Mixtral 8x7B。硬件需求請(qǐng)查閱此處。
[23/12/01] 我們支持了從?魔搭社區(qū)?下載預(yù)訓(xùn)練模型和數(shù)據(jù)集。詳細(xì)用法請(qǐng)參照?此教程。
展開日志
模型
模型名 | 模型大小 | 默認(rèn)模塊 | Template |
---|---|---|---|
Baichuan | 7B/13B | W_pack | baichuan |
Baichuan2 | 7B/13B | W_pack | baichuan2 |
BLOOM | 560M/1.1B/1.7B/3B/7.1B/176B | query_key_value | - |
BLOOMZ | 560M/1.1B/1.7B/3B/7.1B/176B | query_key_value | - |
ChatGLM3 | 6B | query_key_value | chatglm3 |
Falcon | 7B/40B/180B | query_key_value | falcon |
InternLM | 7B/20B | q_proj,v_proj | intern |
LLaMA | 7B/13B/33B/65B | q_proj,v_proj | - |
LLaMA-2 | 7B/13B/70B | q_proj,v_proj | llama2 |
Mistral | 7B | q_proj,v_proj | mistral |
Mixtral | 8x7B | q_proj,v_proj | mistral |
Phi-1.5/2 | 1.3B/2.7B | Wqkv | - |
Qwen | 1.8B/7B/14B/72B | c_attn | qwen |
XVERSE | 7B/13B/65B | q_proj,v_proj | xverse |
Yi | 6B/34B | q_proj,v_proj | yi |
Yuan | 2B/51B/102B | q_proj,v_proj | yuan |
Note
默認(rèn)模塊應(yīng)作為?--lora_target
?參數(shù)的默認(rèn)值,可使用?--lora_target all
?參數(shù)指定全部模塊。
對(duì)于所有“基座”(Base)模型,--template
?參數(shù)可以是?default
,?alpaca
,?vicuna
?等任意值。但“對(duì)話”(Chat)模型請(qǐng)務(wù)必使用對(duì)應(yīng)的模板。
項(xiàng)目所支持模型的完整列表請(qǐng)參閱?constants.py。
訓(xùn)練方法
方法 | 全參數(shù)訓(xùn)練 | 部分參數(shù)訓(xùn)練 | LoRA | QLoRA |
---|---|---|---|---|
預(yù)訓(xùn)練 | ? | ? | ? | ? |
指令監(jiān)督微調(diào) | ? | ? | ? | ? |
獎(jiǎng)勵(lì)模型訓(xùn)練 | ? | ? | ? | ? |
PPO 訓(xùn)練 | ? | ? | ? | ? |
DPO 訓(xùn)練 | ? | ? | ? | ? |
Note
請(qǐng)使用?--quantization_bit 4
?參數(shù)來(lái)啟用 QLoRA 訓(xùn)練。
數(shù)據(jù)集
預(yù)訓(xùn)練數(shù)據(jù)集
指令微調(diào)數(shù)據(jù)集
偏好數(shù)據(jù)集
使用方法請(qǐng)參考?data/README_zh.md?文件。
部分?jǐn)?shù)據(jù)集的使用需要確認(rèn),我們推薦使用下述命令登錄您的 Hugging Face 賬戶。
pip install --upgrade huggingface_hub huggingface-cli login
軟硬件依賴
- Python 3.8+ 和 PyTorch 1.13.1+
- ??Transformers, Datasets, Accelerate, PEFT 和 TRL
- sentencepiece, protobuf 和 tiktoken
- jieba, rouge-chinese 和 nltk (用于評(píng)估及預(yù)測(cè))
- gradio 和 matplotlib (用于網(wǎng)頁(yè)端交互)
- uvicorn, fastapi 和 sse-starlette (用于 API)
硬件依賴
訓(xùn)練方法 | 精度 | 7B | 13B | 30B | 65B | 8x7B |
---|---|---|---|---|---|---|
全參數(shù) | 16 | 160GB | 320GB | 600GB | 1200GB | 900GB |
部分參數(shù) | 16 | 20GB | 40GB | 120GB | 240GB | 200GB |
LoRA | 16 | 16GB | 32GB | 80GB | 160GB | 120GB |
QLoRA | 8 | 10GB | 16GB | 40GB | 80GB | 80GB |
QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | 32GB |
如何使用
數(shù)據(jù)準(zhǔn)備(可跳過(guò))
關(guān)于數(shù)據(jù)集文件的格式,請(qǐng)參考?data/README_zh.md?的內(nèi)容。構(gòu)建自定義數(shù)據(jù)集時(shí),既可以使用單個(gè)?.json
?文件,也可以使用一個(gè)數(shù)據(jù)加載腳本和多個(gè)文件。
Note
使用自定義數(shù)據(jù)集時(shí),請(qǐng)更新?data/dataset_info.json
?文件,該文件的格式請(qǐng)參考?data/README_zh.md
。
環(huán)境搭建(可跳過(guò))
git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python=3.10 conda activate llama_factory cd LLaMA-Factory pip install -r requirements.txt
如果要在 Windows 平臺(tái)上開啟量化 LoRA(QLoRA),需要安裝預(yù)編譯的?bitsandbytes
?庫(kù), 支持 CUDA 11.1 到 12.1.
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl
使用魔搭社區(qū)(可跳過(guò))
如果您在 Hugging Face 模型和數(shù)據(jù)集的下載中遇到了問題,可以通過(guò)下述方法使用魔搭社區(qū)。
export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1`
接著即可通過(guò)指定模型名稱來(lái)訓(xùn)練對(duì)應(yīng)的模型。(在魔搭社區(qū)查看所有可用的模型)
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --model_name_or_path modelscope/Llama-2-7b-ms \ ... # 參數(shù)同上
LLaMA Board 同樣支持魔搭社區(qū)的模型和數(shù)據(jù)集下載。
CUDA_VISIBLE_DEVICES=0 USE_MODELSCOPE_HUB=1 python src/train_web.py
單 GPU 訓(xùn)練
Important
如果您使用多張 GPU 訓(xùn)練模型,請(qǐng)移步多 GPU 分布式訓(xùn)練部分。
預(yù)訓(xùn)練
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage pt \ --do_train \ --model_name_or_path path_to_llama_model \ --dataset wiki_demo \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --output_dir path_to_pt_checkpoint \ --overwrite_cache \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 5e-5 \ --num_train_epochs 3.0 \ --plot_loss \ --fp16
指令監(jiān)督微調(diào)
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage sft \ --do_train \ --model_name_or_path path_to_llama_model \ --dataset alpaca_gpt4_zh \ --template default \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --output_dir path_to_sft_checkpoint \ --overwrite_cache \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 5e-5 \ --num_train_epochs 3.0 \ --plot_loss \ --fp16
獎(jiǎng)勵(lì)模型訓(xùn)練
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage rm \ --do_train \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_sft_checkpoint \ --create_new_adapter \ --dataset comparison_gpt4_zh \ --template default \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --output_dir path_to_rm_checkpoint \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 1e-6 \ --num_train_epochs 1.0 \ --plot_loss \ --fp16
PPO 訓(xùn)練
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage ppo \ --do_train \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_sft_checkpoint \ --create_new_adapter \ --dataset alpaca_gpt4_zh \ --template default \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --reward_model path_to_rm_checkpoint \ --output_dir path_to_ppo_checkpoint \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --top_k 0 \ --top_p 0.9 \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 1e-5 \ --num_train_epochs 1.0 \ --plot_loss \ --fp16
Warning
如果使用 fp16 精度進(jìn)行 LLaMA-2 模型的 PPO 訓(xùn)練,請(qǐng)使用?--per_device_train_batch_size=1
。
DPO 訓(xùn)練
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage dpo \ --do_train \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_sft_checkpoint \ --create_new_adapter \ --dataset comparison_gpt4_zh \ --template default \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --output_dir path_to_dpo_checkpoint \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 1e-5 \ --num_train_epochs 1.0 \ --plot_loss \ --fp16
多 GPU 分布式訓(xùn)練
使用 Huggingface Accelerate
accelerate config # 首先配置分布式環(huán)境 accelerate launch src/train_bash.py # 參數(shù)同上
LoRA 訓(xùn)練的 Accelerate 配置示例
使用 DeepSpeed
deepspeed --num_gpus 8 --master_port=9901 src/train_bash.py \ --deepspeed ds_config.json \ ... # 參數(shù)同上
使用 DeepSpeed ZeRO-2 進(jìn)行全參數(shù)訓(xùn)練的 DeepSpeed 配置示例
合并 LoRA 權(quán)重并導(dǎo)出模型
python src/export_model.py \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_checkpoint \ --template default \ --finetuning_type lora \ --export_dir path_to_export \ --export_size 2 \ --export_legacy_format False
Warning
尚不支持量化模型的 LoRA 權(quán)重合并及導(dǎo)出。
Tip
合并 LoRA 權(quán)重之后可再次使用?--export_quantization_bit 4
?和?--export_quantization_dataset data/c4_demo.json
?量化模型。
API 服務(wù)
python src/api_demo.py \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_checkpoint \ --template default \ --finetuning_type lora
Tip
關(guān)于 API 文檔請(qǐng)見?http://localhost:8000/docs
。
命令行測(cè)試
python src/cli_demo.py \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_checkpoint \ --template default \ --finetuning_type lora
瀏覽器測(cè)試
python src/web_demo.py \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_checkpoint \ --template default \ --finetuning_type lora
模型評(píng)估
CUDA_VISIBLE_DEVICES=0 python src/evaluate.py \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_checkpoint \ --template vanilla \ --finetuning_type lora \ --task ceval \ --split validation \ --lang zh \ --n_shot 5 \ --batch_size 4
模型預(yù)測(cè)
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage sft \ --do_predict \ --model_name_or_path path_to_llama_model \ --adapter_name_or_path path_to_checkpoint \ --dataset alpaca_gpt4_zh \ --template default \ --finetuning_type lora \ --output_dir path_to_predict_result \ --per_device_eval_batch_size 8 \ --max_samples 100 \ --predict_with_generate \ --fp16
Warning
如果使用 fp16 精度進(jìn)行 LLaMA-2 模型的預(yù)測(cè),請(qǐng)使用?--per_device_eval_batch_size=1
。
Tip
我們建議在量化模型的預(yù)測(cè)中使用?--per_device_eval_batch_size=1
?和?--max_target_length 128
。
使用了 LLaMA Factory 的項(xiàng)目
- StarWhisper: 天文大模型 StarWhisper,基于 ChatGLM2-6B 和 Qwen-14B 在天文數(shù)據(jù)上微調(diào)而得。
- DISC-LawLLM: 中文法律領(lǐng)域大模型 DISC-LawLLM,基于 Baichuan-13B 微調(diào)而得,具有法律推理和知識(shí)檢索能力。
- Sunsimiao: 孫思邈中文醫(yī)療大模型 Sumsimiao,基于 Baichuan-7B 和 ChatGLM-6B 在中文醫(yī)療數(shù)據(jù)上微調(diào)而得。
- CareGPT: 醫(yī)療大模型項(xiàng)目 CareGPT,基于 LLaMA2-7B 和 Baichuan-13B 在中文醫(yī)療數(shù)據(jù)上微調(diào)而得。
Tip
如果您有項(xiàng)目希望添加至上述列表,請(qǐng)通過(guò)郵件聯(lián)系或者創(chuàng)建一個(gè) PR。
協(xié)議
本倉(cāng)庫(kù)的代碼依照?Apache-2.0?協(xié)議開源。
使用模型權(quán)重時(shí),請(qǐng)遵循對(duì)應(yīng)的模型協(xié)議:Baichuan?/?Baichuan2?/?BLOOM?/?ChatGLM3?/?Falcon?/?InternLM?/?LLaMA?/?LLaMA-2?/?Mistral?/?Phi-1.5?/?Qwen?/?XVERSE?/?Yi?/?Yuan
引用
如果您覺得此項(xiàng)目有幫助,請(qǐng)考慮以下列格式引用
@Misc{llama-factory, title = {LLaMA Factory}, author = {hiyouga}, howpublished = {\url{https://github.com/hiyouga/LLaMA-Factory}}, year = {2023} }
致謝
本項(xiàng)目受益于?PEFT、QLoRA?和?FastChat,感謝以上諸位作者的付出。
Star History
相關(guān)資料:
模型微調(diào)圖文教程:
https://zhuanlan.zhihu.com/p/645010851?
非官方視頻教程:https://www.bilibili.com/video/BV1Hw411B75j文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-788044.html
在線預(yù)覽網(wǎng)頁(yè)微調(diào)界面 LLaMA Board:https://www.modelscope.cn/studios/hiyouga/LLaMA-Board
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-788044.html
到了這里,關(guān)于LLaMA Board: 通過(guò)一站式網(wǎng)頁(yè)界面快速上手 LLaMA Factory的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!