原文:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md
?👋 加入我们的微信群。
[?English?| 中文 ]
通过?🤗 Spaces?或?ModelScope?预览 LLaMA Board。
使用?CUDA_VISIBLE_DEVICES=0 python src/train_web.py
?启动 LLaMA Board。(该模式目前仅支持单卡训练)
下面是使用单张 GPU 在 10 分钟内更改对话式大型语言模型自我认知的示例。
?tutorial.mp4?
与 ChatGLM 官方的?P-Tuning?微调相比,LLaMA-Factory 的 LoRA 微调提供了?3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA-Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。
变量定义
[23/12/23] 我们针对 LLaMA, Mistral 和 Yi 模型支持了?unsloth?的 LoRA 训练加速。请使用?--use_unsloth
?参数启用 unsloth 优化。该方法可提供 1.7 倍的训练速度,详情请查阅此页面。
[23/12/12] 我们支持了微调最新的混合专家模型?Mixtral 8x7B。硬件需求请查阅此处。
[23/12/01] 我们支持了从?魔搭社区?下载预训练模型和数据集。详细用法请参照?此教程。
展开日志
模型名 | 模型大小 | 默认模块 | 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
默认模块应作为?--lora_target
?参数的默认值,可使用?--lora_target all
?参数指定全部模块。
对于所有“基座”(Base)模型,--template
?参数可以是?default
,?alpaca
,?vicuna
?等任意值。但“对话”(Chat)模型请务必使用对应的模板。
项目所支持模型的完整列表请参阅?constants.py。
方法 | 全参数训练 | 部分参数训练 | LoRA | QLoRA |
---|---|---|---|---|
预训练 | ? | ? | ? | ? |
指令监督微调 | ? | ? | ? | ? |
奖励模型训练 | ? | ? | ? | ? |
PPO 训练 | ? | ? | ? | ? |
DPO 训练 | ? | ? | ? | ? |
Note
请使用?--quantization_bit 4
?参数来启用 QLoRA 训练。
预训练数据集
指令微调数据集
偏好数据集
使用方法请参考?data/README_zh.md?文件。
部分数据集的使用需要确认,我们推荐使用下述命令登录您的 Hugging Face 账户。
pip install --upgrade huggingface_hub huggingface-cli login
训练方法 | 精度 | 7B | 13B | 30B | 65B | 8x7B |
---|---|---|---|---|---|---|
全参数 | 16 | 160GB | 320GB | 600GB | 1200GB | 900GB |
部分参数 | 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 |
关于数据集文件的格式,请参考?data/README_zh.md?的内容。构建自定义数据集时,既可以使用单个?.json
?文件,也可以使用一个数据加载脚本和多个文件。
Note
使用自定义数据集时,请更新?data/dataset_info.json
?文件,该文件的格式请参考?data/README_zh.md
。
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 平台上开启量化 LoRA(QLoRA),需要安装预编译的?bitsandbytes
?库, 支持 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
如果您在 Hugging Face 模型和数据集的下载中遇到了问题,可以通过下述方法使用魔搭社区。
export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1`
接着即可通过指定模型名称来训练对应的模型。(在魔搭社区查看所有可用的模型)
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --model_name_or_path modelscope/Llama-2-7b-ms \ ... # 参数同上
LLaMA Board 同样支持魔搭社区的模型和数据集下载。
CUDA_VISIBLE_DEVICES=0 USE_MODELSCOPE_HUB=1 python src/train_web.py
Important
如果您使用多张 GPU 训练模型,请移步多 GPU 分布式训练部分。
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
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
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
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 精度进行 LLaMA-2 模型的 PPO 训练,请使用?--per_device_train_batch_size=1
。
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
accelerate config # 首先配置分布式环境 accelerate launch src/train_bash.py # 参数同上
LoRA 训练的 Accelerate 配置示例
deepspeed --num_gpus 8 --master_port=9901 src/train_bash.py \ --deepspeed ds_config.json \ ... # 参数同上
使用 DeepSpeed ZeRO-2 进行全参数训练的 DeepSpeed 配置示例
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 权重合并及导出。
Tip
合并 LoRA 权重之后可再次使用?--export_quantization_bit 4
?和?--export_quantization_dataset data/c4_demo.json
?量化模型。
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
关于 API 文档请见?http://localhost:8000/docs
。
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
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
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
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 精度进行 LLaMA-2 模型的预测,请使用?--per_device_eval_batch_size=1
。
Tip
我们建议在量化模型的预测中使用?--per_device_eval_batch_size=1
?和?--max_target_length 128
。
Tip
如果您有项目希望添加至上述列表,请通过邮件联系或者创建一个 PR。
本仓库的代码依照?Apache-2.0?协议开源。
使用模型权重时,请遵循对应的模型协议:Baichuan?/?Baichuan2?/?BLOOM?/?ChatGLM3?/?Falcon?/?InternLM?/?LLaMA?/?LLaMA-2?/?Mistral?/?Phi-1.5?/?Qwen?/?XVERSE?/?Yi?/?Yuan
如果您觉得此项目有帮助,请考虑以下列格式引用
@Misc{llama-factory, title = {LLaMA Factory}, author = {hiyouga}, howpublished = {\url{https://github.com/hiyouga/LLaMA-Factory}}, year = {2023} }
本项目受益于?PEFT、QLoRA?和?FastChat,感谢以上诸位作者的付出。