LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM-2/LLaMA-2/Baichuan等】的高效工具【预训练+指令监督微调+奖励模型训练+PPO 训练+DPO 训练】)的简介、安装、使用方法之详细攻略
目录
相关文章
LLMs之ChatGLM:ChatGLM Efficient Tuning(一款高效微调ChatGLM-6B/ChatGLM2-6B的工具【LoRA/P-Tuning V2/Freeze Tuning/全量微调】)的简介、安装、使用方法之详细攻略
https://yunyaniu.blog.csdn.net/article/details/131427931
LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM2/LLaMA2/Baichuan等】的高效工具【预训练+指令监督微调+奖励模型训练+PPO 训练+DPO 训练】)的简介、安装、使用方法之详细攻略
https://yunyaniu.blog.csdn.net/article/details/132012771
LLaMA Efficient Tuning的简介
2023年6月发布的LLaMA Efficient Tuning,它是一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM2/LLaMA2/Baichuan等】的高效工具,包括预训练、指令监督微调、奖励模型训练、PPO 训练、DPO 训练等功能。目前该项目仍在持续更新。
官方地址:
GitHub – hiyouga/LLaMA-Efficient-Tuning: Easy-to-use LLM fine-tuning framework (LLaMA-2, BLOOM, Falcon, Baichuan, Qwen, ChatGLM2)
1、支持的模型
模型名 | 模型大小 | 默认模块 | Template |
---|---|---|---|
LLaMA | 7B/13B/33B/65B | q_proj,v_proj | – |
LLaMA-2 | 7B/13B/70B | q_proj,v_proj | llama2 |
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 | – |
Falcon | 7B/40B | query_key_value | – |
Baichuan | 7B/13B | W_pack | baichuan |
InternLM | 7B | q_proj,v_proj | intern |
Qwen | 7B | c_attn | chatml |
XVERSE | 13B | q_proj,v_proj | xverse |
ChatGLM2 | 6B | query_key_value | chatglm2 |
- 默认模块是
--lora_target
参数的部分可选项。请使用python src/train_bash.py -h
查看全部可选项。 - 对于所有“基座”(Base)模型,
--template
参数可以是default
,alpaca
,vicuna
等任意值。但“对话”(Chat)模型请务必使用对应的模板。
2、支持的训练方法
方法 | 全参数训练 | 部分参数训练 | LoRA | QLoRA |
---|---|---|---|---|
预训练 | ✅ | ✅ | ✅ | ✅ |
指令监督微调 | ✅ | ✅ | ✅ | ✅ |
奖励模型训练 | ✅ | ✅ | ||
PPO 训练 | ✅ | ✅ | ||
DPO 训练 | ✅ | ✅ | ✅ |
- 使用
--quantization_bit 4/8
参数来启用 QLoRA 训练。
3、可使用的数据集:用于预训练、用于指令监督微调、用于奖励模型或 DPO训练
- 用于预训练:
- Wiki Demo (en)
- RefinedWeb (en)
- StarCoder (en)
- Wikipedia (en)
- Wikipedia (zh)
- 用于指令监督微调:
- Stanford Alpaca (en)
- Stanford Alpaca (zh)
- GPT-4 Generated Data (en&zh)
- Open Assistant (multilingual)
- Self-cognition (zh)
- ShareGPT (zh)
- 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)
- Firefly 1.1M (zh)
- LIMA (en)
- CodeAlpaca 20k (en)
- Alpaca CoT (multilingual)
- Web QA (zh)
- UltraChat (en)
- WebNovel (zh)
- 用于奖励模型或 DPO 训练:
- HH-RLHF (en)
- Open Assistant (multilingual)
- GPT-4 Generated Data (en&zh)
使用方法请参考 data/README.md 文件。
部分数据集的使用需要确认,我们推荐使用下述命令登录您的 Hugging Face 账户。
pip install --upgrade huggingface_hub
huggingface-cli login
LLaMA Efficient Tuning的的安装
1、配置环境依赖
(1)、Python依赖
Python依赖 | Python 3.8+, PyTorch 1.13.1 Transformers, Datasets, Accelerate, PEFT, TRL protobuf, cpm-kernels, sentencepiece jieba, rouge-chinese, nltk(用于评估) gradio, matplotlib(用于网页端交互) uvicorn, fastapi, sse-starlette(用于 API) |
2、环境搭建
通用 | git clone https://github.com/hiyouga/LLaMA-Efficient-Tuning.git conda create -n llama_etuning python=3.10 conda activate llama_etuning cd LLaMA-Efficient-Tuning pip install -r requirements.txt |
Windows平台+QLoRA | 如果要在 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 |
3、数据准备:构建自定义数据集
关于数据集文件的格式,请参考 data/example_dataset 文件夹的内容。构建自定义数据集时,既可以使用单个 .json 文件,也可以使用一个数据加载脚本和多个文件。
注意:使用自定义数据集时,请更新 data/dataset_info.json 文件,该文件的格式请参考 data/README.md。
源代码地址:
https://github.com/hiyouga/LLaMA-Efficient-Tuning/blob/main/data/dataset_info.json
# 定位到数据集文件目录(data/dataset_info.json )修改对应的配置信息
{
"dataset_DIY": {
"file_name": "dataset_DIY.json",
# "file_sha1": "607f94a7f581341e59685aef32f531095232cf23"
},
4、微调/测试
(1)、浏览器一键微调/测试
浏览器一键微调/测试 | CUDA_VISIBLE_DEVICES=0 python src/train_web.py 我们极力推荐新手使用浏览器一体化界面,因为它还可以自动生成运行所需的命令行脚本。 目前网页 UI 仅支持单卡训练。 |
(2)、单 GPU 训练:预训练、指令监督微调、奖励模型训练、PPO 训练、DPO 训练
预训练 | 预训练 CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ –stage pt \ –model_name_or_path path_to_llama_model \ –do_train \ –dataset wiki_demo \ –template default \ –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 \ –model_name_or_path path_to_llama_model \ –do_train \ –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 \ –model_name_or_path path_to_llama_model \ –do_train \ –dataset comparison_gpt4_zh \ –template default \ –finetuning_type lora \ –lora_target q_proj,v_proj \ –resume_lora_training False \ –checkpoint_dir path_to_sft_checkpoint \ –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 训练 | PPO 训练 CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ –stage ppo \ –model_name_or_path path_to_llama_model \ –do_train \ –dataset alpaca_gpt4_zh \ –template default \ –finetuning_type lora \ –lora_target q_proj,v_proj \ –resume_lora_training False \ –checkpoint_dir path_to_sft_checkpoint \ –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 \ –logging_steps 10 \ –save_steps 1000 \ –learning_rate 1e-5 \ –num_train_epochs 1.0 \ –plot_loss |
DPO 训练 | DPO 训练 CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ –stage dpo \ –model_name_or_path path_to_llama_model \ –do_train \ –dataset comparison_gpt4_zh \ –template default \ –finetuning_type lora \ –lora_target q_proj,v_proj \ –resume_lora_training False \ –checkpoint_dir path_to_sft_checkpoint \ –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 |
(3)、多 GPU 分布式训练:T1、使用 Huggingface Accelerate、T2、使用 DeepSpeed
T1、使用 Huggingface Accelerate | accelerate config # 首先配置分布式环境 accelerate launch src/train_bash.py # 参数同上 使用 DeepSpeed ZeRO-2 进行全参数微调的 Accelerate 配置示例 compute_environment: LOCAL_MACHINE deepspeed_config: gradient_accumulation_steps: 4 gradient_clipping: 0.5 offload_optimizer_device: none offload_param_device: none zero3_init_flag: false zero_stage: 2 distributed_type: DEEPSPEED downcast_bf16: ‘no’ 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 |
T2、使用 DeepSpeed | deepspeed –num_gpus 8 –master_port=9901 src/train_bash.py \ –deepspeed ds_config.json \ … # 参数同上 使用 DeepSpeed ZeRO-2 进行全参数微调的 DeepSpeed 配置示例 { “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, “initial_scale_power”: 16, “loss_scale_window”: 1000, “hysteresis”: 2, “min_loss_scale”: 1 }, “zero_optimization”: { “stage”: 2, “allgather_partitions”: true, “allgather_bucket_size”: 5e8, “reduce_scatter”: true, “reduce_bucket_size”: 5e8, “overlap_comm”: false, “contiguous_gradients”: true } } |
5、多种推理方式:API、CLI、GUI
API 服务 | API 服务 |
命令行测试 | 命令行测试 python src/cli_demo.py \ –model_name_or_path path_to_llama_model \ –template default \ –finetuning_type lora \ –checkpoint_dir path_to_checkpoint |
浏览器测试 | 浏览器测试 python src/web_demo.py \ –model_name_or_path path_to_llama_model \ –template default \ –finetuning_type lora \ –checkpoint_dir path_to_checkpoint |
6、指标评估、模型预测
指标评估 | 指标评估(BLEU 分数和汉语 ROUGE 分数) |
模型预测 | 模型预测 CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ –stage sft \ –model_name_or_path path_to_llama_model \ –do_predict \ –dataset alpaca_gpt4_zh \ –template default \ –finetuning_type lora \ –checkpoint_dir path_to_checkpoint \ –output_dir path_to_predict_result \ –per_device_eval_batch_size 8 \ –max_samples 100 \ –predict_with_generate |
7、导出微调模型
导出微调模型 | 导出微调后的模型 |
LLaMA Efficient Tuning的使用方法
更新中……
文章出处登录后可见!