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/全量微调】)的简介、安装、使用方法之详细攻略
LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM2/LLaMA2/Baichuan等】的高效工具【预训练+指令监督微调+奖励模型训练+PPO 训练+DPO 训练】)的简介、安装、使用方法之详细攻略
LLaMA Efficient Tuning的简介
1、支持的模型
2、支持的训练方法
3、可使用的数据集:用于预训练、用于指令监督微调、用于奖励模型或 DPO训练
LLaMA Efficient Tuning的的安装
1、配置环境依赖
(1)、Python依赖
2、环境搭建
3、数据准备:构建自定义数据集
4、微调/测试
(1)、浏览器一键微调/测试
(2)、单 GPU 训练:预训练、指令监督微调、奖励模型训练、PPO 训练、DPO 训练
(3)、多 GPU 分布式训练:T1、使用 Huggingface Accelerate、T2、使用 DeepSpeed
5、多种推理方式:API、CLI、GUI
6、指标评估、模型预测
7、导出微调模型
LLaMA Efficient Tuning的使用方法
相关文章
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.gitconda 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、使用 DeepSpeeddeepspeed --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/api_demo.py \
--model_name_or_path path_to_llama_model \
--template default \
--finetuning_type lora \
--checkpoint_dir path_to_checkpoint
关于 API 文档请见 http://localhost:8000/docs。
命令行测试
命令行测试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_eval \
--dataset alpaca_gpt4_zh \
--template default \
--finetuning_type lora \
--checkpoint_dir path_to_checkpoint \
--output_dir path_to_eval_result \
--per_device_eval_batch_size 8 \
--max_samples 100 \
--predict_with_generate
我们建议在量化模型的评估中使用 --per_device_eval_batch_size=1 和 --max_target_length 128。
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、导出微调模型
导出微调模型
导出微调后的模型
python src/export_model.py \
--model_name_or_path path_to_llama_model \
--template default \
--finetuning_type lora \
--checkpoint_dir path_to_checkpoint \
--output_dir path_to_export
LLaMA Efficient Tuning的使用方法
更新中……