Merge pull request #2743 from S3Studio/DockerizeSupport Add dockerize support
Merge pull request #2743 from S3Studio/DockerizeSupport
Add dockerize support
👋 加入我们的微信群。
[ English | 中文 ]
微调大模型可以像这样轻松…
https://github.com/hiyouga/LLaMA-Factory/assets/16256802/ec36a9dd-37f4-4f72-81bd-d76c6d0a6594
选择你的打开方式:
与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA-Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA-Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。
pre_seq_len=128
lora_rank=32
[24/03/07] 我们支持了梯度低秩投影(**GaLore**)算法。请使用 --use_galore 参数切换显存高效的优化器。
--use_galore
[24/03/07] 我们集成了 vLLM 以实现极速并发推理。请使用 --infer_backend vllm 来获得 270% 的推理速度。(尚不支持 LoRA,请先合并权重。)
--infer_backend vllm
[24/02/28] 我们支持了 DoRA 微调。请使用 --use_dora 参数进行 DoRA 微调。
--use_dora
[24/02/15] 我们支持了 LLaMA Pro 提出的块扩展方法。详细用法请参照 scripts/llama_pro.py。
scripts/llama_pro.py
[24/02/05] Qwen1.5(Qwen2 测试版)系列模型已在 LLaMA-Factory 中实现微调支持。详情请查阅该博客页面。
[24/01/18] 我们针对绝大多数模型实现了 Agent 微调,微调时指定 --dataset glaive_toolcall 即可使模型获得工具调用能力。
--dataset glaive_toolcall
[23/12/23] 我们针对 LLaMA, Mistral 和 Yi 模型支持了 unsloth 的 LoRA 训练加速。请使用 --use_unsloth 参数启用 unsloth 优化。该方法可提供 170% 的训练速度,详情请查阅此页面。
--use_unsloth
[23/12/12] 我们支持了微调最新的混合专家模型 **Mixtral 8x7B**。硬件需求请查阅此处。
[23/12/01] 我们支持了从 魔搭社区 下载预训练模型和数据集。详细用法请参照 此教程。
[23/10/21] 我们支持了 NEFTune 训练技巧。请使用 --neftune_noise_alpha 参数启用 NEFTune,例如 --neftune_noise_alpha 5。
--neftune_noise_alpha
--neftune_noise_alpha 5
[23/09/27] 我们针对 LLaMA 模型支持了 LongLoRA 提出的 $S^2$-Attn。请使用 --shift_attn 参数以启用该功能。
--shift_attn
[23/09/23] 我们在项目中集成了 MMLU、C-Eval 和 CMMLU 评估集。使用方法请参阅此示例。
[23/09/10] 我们支持了 **FlashAttention-2**。如果您使用的是 RTX4090、A100 或 H100 GPU,请使用 --flash_attn 参数以启用 FlashAttention-2。
--flash_attn
[23/08/12] 我们支持了 RoPE 插值来扩展 LLaMA 模型的上下文长度。请使用 --rope_scaling linear 参数训练模型或使用 --rope_scaling dynamic 参数评估模型。
--rope_scaling linear
--rope_scaling dynamic
[23/08/11] 我们支持了指令模型的 **DPO 训练**。使用方法请参阅此示例。
[23/07/31] 我们支持了数据流式加载。请使用 --streaming 和 --max_steps 10000 参数来流式加载数据集。
--streaming
--max_steps 10000
[23/07/29] 我们在 Hugging Face 发布了两个 13B 指令微调模型。详细内容请查阅我们的 Hugging Face 项目(LLaMA-2 / Baichuan)。
[23/07/18] 我们开发了支持训练和测试的浏览器一体化界面。请使用 train_web.py 在您的浏览器中微调模型。感谢 @KanadeSiina 和 @codemayq 在该功能开发中付出的努力。
train_web.py
[23/07/09] 我们开源了 FastEdit ⚡🩹,一个简单易用的、能迅速编辑大模型事实记忆的工具包。如果您感兴趣请关注我们的 FastEdit 项目。
[23/06/29] 我们提供了一个可复现的指令模型微调示例,详细内容请查阅 Baichuan-7B-sft。
[23/06/22] 我们对齐了示例 API 与 OpenAI API 的格式,您可以将微调模型接入任意基于 ChatGPT 的应用中。
[23/06/03] 我们实现了 4 比特的 LoRA 训练(也称 **QLoRA**)。请使用 --quantization_bit 4 参数进行 4 比特量化微调。
--quantization_bit 4
[!NOTE] 默认模块应作为 --lora_target 参数的默认值,可使用 --lora_target all 参数指定全部模块。 对于所有“基座”(Base)模型,--template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。
[!NOTE] 默认模块应作为 --lora_target 参数的默认值,可使用 --lora_target all 参数指定全部模块。
--lora_target
--lora_target all
对于所有“基座”(Base)模型,--template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。
--template
default
alpaca
vicuna
项目所支持模型的完整列表请参阅 constants.py。
您也可以在 template.py 中添加自己的对话模板。
[!NOTE] 请使用 --quantization_bit 4 参数来启用 QLoRA 训练。
使用方法请参考 data/README_zh.md 文件。
部分数据集的使用需要确认,我们推荐使用下述命令登录您的 Hugging Face 账户。
pip install --upgrade huggingface_hub huggingface-cli login
* 估算值
关于数据集文件的格式,请参考 data/README_zh.md 的内容。构建自定义数据集时,既可以使用单个 .json 文件,也可以使用一个数据加载脚本和多个文件。
.json
[!NOTE] 使用自定义数据集时,请更新 data/dataset_info.json 文件,该文件的格式请参考 data/README_zh.md。
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.2。
bitsandbytes
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.40.0-py3-none-win_amd64.whl
如果要在 Windows 平台上开启 FlashAttention-2,需要安装预编译的 flash-attn 库,支持 CUDA 12.1 到 12.2,请根据需求到 flash-attention 下载对应版本安装。
flash-attn
如果您在 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_web.py
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
[!TIP] 使用 --adapter_name_or_path path_to_sft_checkpoint,path_to_ppo_checkpoint 来进行微调模型的推理。
--adapter_name_or_path path_to_sft_checkpoint,path_to_ppo_checkpoint
[!WARNING] 如果使用 fp16 精度进行 LLaMA-2 模型的 PPO 训练,请使用 --per_device_train_batch_size=1。
--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
[!TIP] 使用 --adapter_name_or_path path_to_sft_checkpoint,path_to_dpo_checkpoint 来进行微调模型的推理。
--adapter_name_or_path path_to_sft_checkpoint,path_to_dpo_checkpoint
accelerate launch --config_file config.yaml src/train_bash.py # 参数同上
compute_environment: LOCAL_MACHINE debug: false distributed_type: MULTI_GPU downcast_bf16: 'no' gpu_ids: all machine_rank: 0 main_training_function: main mixed_precision: fp16 num_machines: 1 num_processes: 4 rdzv_backend: static same_network: true tpu_env: [] tpu_use_cluster: false tpu_use_sudo: false use_cpu: false
[!TIP] 我们推荐使用 Accelerate 进行 LoRA 训练。
deepspeed --num_gpus 8 src/train_bash.py \ --deepspeed ds_config.json \ ... # 参数同上
{ "train_batch_size": "auto", "train_micro_batch_size_per_gpu": "auto", "gradient_accumulation_steps": "auto", "gradient_clipping": "auto", "zero_allow_untested_optimizer": true, "fp16": { "enabled": "auto", "loss_scale": 0, "loss_scale_window": 1000, "initial_scale_power": 16, "hysteresis": 2, "min_loss_scale": 1 }, "bf16": { "enabled": "auto" }, "zero_optimization": { "stage": 2, "allgather_partitions": true, "allgather_bucket_size": 5e8, "overlap_comm": true, "reduce_scatter": true, "reduce_bucket_size": 5e8, "contiguous_gradients": true, "round_robin_gradients": true } }
[!TIP] 更多训练脚本请查看 examples。
CUDA_VISIBLE_DEVICES=0 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] 仅使用 --model_name_or_path path_to_export 来加载导出后的模型。 合并 LoRA 权重之后可再次使用 --export_quantization_bit 4 和 --export_quantization_dataset data/c4_demo.json 基于 AutoGPTQ 量化模型。
[!TIP] 仅使用 --model_name_or_path path_to_export 来加载导出后的模型。
--model_name_or_path path_to_export
合并 LoRA 权重之后可再次使用 --export_quantization_bit 4 和 --export_quantization_dataset data/c4_demo.json 基于 AutoGPTQ 量化模型。
--export_quantization_bit 4
--export_quantization_dataset data/c4_demo.json
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 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。
http://localhost:8000/docs
CUDA_VISIBLE_DEVICES=0 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
CUDA_VISIBLE_DEVICES=0 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 1 \ --max_samples 100 \ --predict_with_generate \ --fp16
[!WARNING] 如果使用 fp16 精度进行 LLaMA-2 模型的预测,请使用 --per_device_eval_batch_size=1。
--per_device_eval_batch_size=1
[!TIP] 我们建议在量化模型的预测中使用 --per_device_eval_batch_size=1 和 --max_target_length 128。
--max_target_length 128
[!TIP] 如果您有项目希望添加至上述列表,请通过邮件联系或者创建一个 PR。
本仓库的代码依照 Apache-2.0 协议开源。
使用模型权重时,请遵循对应的模型协议:Baichuan2 / BLOOM / ChatGLM3 / DeepSeek / Falcon / Gemma / InternLM2 / LLaMA / LLaMA-2 / Mistral / Phi-1.5/2 / Qwen / StarCoder2 / XVERSE / Yi / Yuan
如果您觉得此项目有帮助,请考虑以下列格式引用
@Misc{llama-factory, title = {LLaMA Factory}, author = {hiyouga}, howpublished = {\url{https://github.com/hiyouga/LLaMA-Factory}}, year = {2023} }
本项目受益于 PEFT、QLoRA 和 FastChat,感谢以上诸位作者的付出。
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
👋 加入我们的微信群。
[ English | 中文 ]
微调大模型可以像这样轻松…
https://github.com/hiyouga/LLaMA-Factory/assets/16256802/ec36a9dd-37f4-4f72-81bd-d76c6d0a6594
选择你的打开方式:
目录
项目特色
性能指标
与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA-Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA-Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。
变量定义
pre_seq_len=128
,在 LLaMA-Factory 的 LoRA 微调中采用lora_rank=32
。更新日志
[24/03/07] 我们支持了梯度低秩投影(**GaLore**)算法。请使用
--use_galore
参数切换显存高效的优化器。[24/03/07] 我们集成了 vLLM 以实现极速并发推理。请使用
--infer_backend vllm
来获得 270% 的推理速度。(尚不支持 LoRA,请先合并权重。)[24/02/28] 我们支持了 DoRA 微调。请使用
--use_dora
参数进行 DoRA 微调。[24/02/15] 我们支持了 LLaMA Pro 提出的块扩展方法。详细用法请参照
scripts/llama_pro.py
。展开日志
[24/02/05] Qwen1.5(Qwen2 测试版)系列模型已在 LLaMA-Factory 中实现微调支持。详情请查阅该博客页面。
[24/01/18] 我们针对绝大多数模型实现了 Agent 微调,微调时指定
--dataset glaive_toolcall
即可使模型获得工具调用能力。[23/12/23] 我们针对 LLaMA, Mistral 和 Yi 模型支持了 unsloth 的 LoRA 训练加速。请使用
--use_unsloth
参数启用 unsloth 优化。该方法可提供 170% 的训练速度,详情请查阅此页面。[23/12/12] 我们支持了微调最新的混合专家模型 **Mixtral 8x7B**。硬件需求请查阅此处。
[23/12/01] 我们支持了从 魔搭社区 下载预训练模型和数据集。详细用法请参照 此教程。
[23/10/21] 我们支持了 NEFTune 训练技巧。请使用
--neftune_noise_alpha
参数启用 NEFTune,例如--neftune_noise_alpha 5
。[23/09/27] 我们针对 LLaMA 模型支持了 LongLoRA 提出的 $S^2$-Attn。请使用
--shift_attn
参数以启用该功能。[23/09/23] 我们在项目中集成了 MMLU、C-Eval 和 CMMLU 评估集。使用方法请参阅此示例。
[23/09/10] 我们支持了 **FlashAttention-2**。如果您使用的是 RTX4090、A100 或 H100 GPU,请使用
--flash_attn
参数以启用 FlashAttention-2。[23/08/12] 我们支持了 RoPE 插值来扩展 LLaMA 模型的上下文长度。请使用
--rope_scaling linear
参数训练模型或使用--rope_scaling dynamic
参数评估模型。[23/08/11] 我们支持了指令模型的 **DPO 训练**。使用方法请参阅此示例。
[23/07/31] 我们支持了数据流式加载。请使用
--streaming
和--max_steps 10000
参数来流式加载数据集。[23/07/29] 我们在 Hugging Face 发布了两个 13B 指令微调模型。详细内容请查阅我们的 Hugging Face 项目(LLaMA-2 / Baichuan)。
[23/07/18] 我们开发了支持训练和测试的浏览器一体化界面。请使用
train_web.py
在您的浏览器中微调模型。感谢 @KanadeSiina 和 @codemayq 在该功能开发中付出的努力。[23/07/09] 我们开源了 FastEdit ⚡🩹,一个简单易用的、能迅速编辑大模型事实记忆的工具包。如果您感兴趣请关注我们的 FastEdit 项目。
[23/06/29] 我们提供了一个可复现的指令模型微调示例,详细内容请查阅 Baichuan-7B-sft。
[23/06/22] 我们对齐了示例 API 与 OpenAI API 的格式,您可以将微调模型接入任意基于 ChatGPT 的应用中。
[23/06/03] 我们实现了 4 比特的 LoRA 训练(也称 **QLoRA**)。请使用
--quantization_bit 4
参数进行 4 比特量化微调。模型
项目所支持模型的完整列表请参阅 constants.py。
您也可以在 template.py 中添加自己的对话模板。
训练方法
数据集
预训练数据集
指令微调数据集
偏好数据集
使用方法请参考 data/README_zh.md 文件。
部分数据集的使用需要确认,我们推荐使用下述命令登录您的 Hugging Face 账户。
软硬件依赖
硬件依赖
* 估算值
如何使用
数据准备(可跳过)
关于数据集文件的格式,请参考 data/README_zh.md 的内容。构建自定义数据集时,既可以使用单个
.json
文件,也可以使用一个数据加载脚本和多个文件。环境搭建(可跳过)
如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的
bitsandbytes
库, 支持 CUDA 11.1 到 12.2。如果要在 Windows 平台上开启 FlashAttention-2,需要安装预编译的
flash-attn
库,支持 CUDA 12.1 到 12.2,请根据需求到 flash-attention 下载对应版本安装。使用魔搭社区(可跳过)
如果您在 Hugging Face 模型和数据集的下载中遇到了问题,可以通过下述方法使用魔搭社区。
接着即可通过指定模型名称来训练对应的模型。(在魔搭社区查看所有可用的模型)
LLaMA Board 同样支持魔搭社区的模型和数据集下载。
单 GPU 训练
LLaMA Board GUI
预训练
指令监督微调
奖励模型训练
PPO 训练
DPO 训练
多 GPU 分布式训练
使用 Huggingface Accelerate
使用 Accelerate 进行 LoRA 训练的 config.yaml 示例
使用 DeepSpeed
使用 DeepSpeed ZeRO-2 进行全参数训练的 ds_config.json 示例
合并 LoRA 权重并导出模型
使用 OpenAI 风格 API 推理
使用命令行推理
使用浏览器推理
模型评估
模型预测
使用了 LLaMA Factory 的项目
协议
本仓库的代码依照 Apache-2.0 协议开源。
使用模型权重时,请遵循对应的模型协议:Baichuan2 / BLOOM / ChatGLM3 / DeepSeek / Falcon / Gemma / InternLM2 / LLaMA / LLaMA-2 / Mistral / Phi-1.5/2 / Qwen / StarCoder2 / XVERSE / Yi / Yuan
引用
如果您觉得此项目有帮助,请考虑以下列格式引用
致谢
本项目受益于 PEFT、QLoRA 和 FastChat,感谢以上诸位作者的付出。
Star History