LLaMA Efficient Tuning

文章目录

    • [LLaMA Efficient Tuning](#LLaMA Efficient Tuning)
    • 数据准备
    • 浏览器一体化界面
    • [单 GPU 训练 train_bash](#单 GPU 训练 train_bash)
      • [1、预训练 pt](#1、预训练 pt)
      • [2、指令监督微调 sft](#2、指令监督微调 sft)
      • [3、奖励模型训练 rm](#3、奖励模型训练 rm)
      • [4、PPO 训练 ppo](#4、PPO 训练 ppo)
      • [5、DPO 训练 dpo](#5、DPO 训练 dpo)
    • [多 GPU 分布式训练](#多 GPU 分布式训练)
      • [1、使用 Huggingface Accelerate](#1、使用 Huggingface Accelerate)
      • [2、使用 DeepSpeed](#2、使用 DeepSpeed)
    • [导出微调后的模型 export_model.py](#导出微调后的模型 export_model.py)
    • [API 服务 api_demo.py](#API 服务 api_demo.py)
    • [命令行测试 cli_demo.py](#命令行测试 cli_demo.py)
    • [浏览器测试 web_demo.py](#浏览器测试 web_demo.py)
    • [指标评估(BLEU 分数和汉语 ROUGE 分数)](#指标评估(BLEU 分数和汉语 ROUGE 分数))
    • 模型预测

LLaMA Efficient Tuning

https://github.com/rancheng/LLaMA-Efficient-Tuning/blob/main/README_zh.md


支持模型:

LLaMA、LLaMA-2、BLOOM、BLOOMZ、Falcon、Baichuan、Baichuan2、InternLM、Qwen、XVERSE、ChatGLM2


  • 默认模块--lora_target 参数的部分可选项。请使用 python src/train_bash.py -h 查看全部可选项。
  • 对于所有"基座"(Base)模型,--template 参数可以是 default, alpaca, vicuna 等任意值。但"对话"(Chat)模型请务必使用对应的模板。

安装

软件依赖

  • Python 3.8+ 和 PyTorch 1.13.1+
  • 🤗Transformers, Datasets, Accelerate, PEFT 和 TRL
  • sentencepiece 和 tiktoken
  • jieba, rouge-chinese 和 nltk (用于评估)
  • gradio 和 matplotlib (用于网页端交互)
  • uvicorn, fastapi 和 sse-starlette (用于 API)
  • 以及 强而有力的 GPU

shell 复制代码
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 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库, 支持 CUDA 11.1 到 12.1.

shell 复制代码
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl

数据准备

关于数据集文件的格式,请参考 data/example_dataset 文件夹的内容。
https://github.com/rancheng/LLaMA-Efficient-Tuning/tree/main/data/example_dataset

构建自定义数据集时,既可以使用单个 .json 文件,也可以使用一个数据加载脚本和多个文件。

注意:使用自定义数据集时,请更新 data/dataset_info.json 文件,该文件的格式请参考 data/README.md
https://github.com/rancheng/LLaMA-Efficient-Tuning/blob/main/data/dataset_info.json
https://github.com/rancheng/LLaMA-Efficient-Tuning/blob/main/data/README.md


浏览器一体化界面

shell 复制代码
CUDA_VISIBLE_DEVICES=0 python src/train_web.py

我们极力推荐新手使用浏览器一体化界面,因为它还可以自动生成运行所需的命令行脚本。

目前网页 UI 仅支持单卡训练。


单 GPU 训练 train_bash


1、预训练 pt

shell 复制代码
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

2、指令监督微调 sft

shell 复制代码
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

3、奖励模型训练 rm

shell 复制代码
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

4、PPO 训练 ppo

shell 复制代码
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

5、DPO 训练 dpo

shell 复制代码
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

多 GPU 分布式训练


1、使用 Huggingface Accelerate

shell 复制代码
accelerate config # 首先配置分布式环境
accelerate launch src/train_bash.py # 参数同上

使用 DeepSpeed ZeRO-2 进行全参数微调的 Accelerate 配置示例

json 复制代码
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

2、使用 DeepSpeed

shell 复制代码
deepspeed --num_gpus 8 --master_port=9901 src/train_bash.py \
    --deepspeed ds_config.json \
    ... # 参数同上

使用 DeepSpeed ZeRO-2 进行全参数微调的 DeepSpeed 配置示例

json 复制代码
{
  "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
  }
}

导出微调后的模型 export_model.py

shell 复制代码
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

API 服务 api_demo.py

shell 复制代码
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


命令行测试 cli_demo.py

shell 复制代码
python src/cli_demo.py \
    --model_name_or_path path_to_llama_model \
    --template default \
    --finetuning_type lora \
    --checkpoint_dir path_to_checkpoint

浏览器测试 web_demo.py

shell 复制代码
python src/web_demo.py \
    --model_name_or_path path_to_llama_model \
    --template default \
    --finetuning_type lora \
    --checkpoint_dir path_to_checkpoint

指标评估(BLEU 分数和汉语 ROUGE 分数)

shell 复制代码
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


模型预测

shell 复制代码
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

相关推荐
nju_spy3 分钟前
周志华《机器学习导论》第8章 集成学习 Ensemble Learning
人工智能·随机森林·机器学习·集成学习·boosting·bagging·南京大学
静心问道26 分钟前
TrOCR: 基于Transformer的光学字符识别方法,使用预训练模型
人工智能·深度学习·transformer·多模态
说私域28 分钟前
基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的用户价值引导与核心用户沉淀策略研究
人工智能·开源
亲持红叶29 分钟前
GLU 变种:ReGLU 、 GEGLU 、 SwiGLU
人工智能·深度学习·神经网络·激活函数
说私域30 分钟前
线上协同办公时代:以开源AI大模型等工具培养网感,拥抱职业变革
人工智能·开源
群联云防护小杜31 分钟前
深度隐匿源IP:高防+群联AI云防护防绕过实战
运维·服务器·前端·网络·人工智能·网络协议·tcp/ip
摘星编程36 分钟前
构建智能客服Agent:从需求分析到生产部署
人工智能·需求分析·智能客服·agent开发·生产部署
不爱学习的YY酱40 分钟前
信息检索革命:Perplexica+cpolar打造你的专属智能搜索中枢
人工智能
whaosoft-1432 小时前
51c自动驾驶~合集7
人工智能
刘晓倩5 小时前
Coze智能体开发实战-多Agent综合实战
人工智能·coze