LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM-2/LLaMA-2/Baichuan等】的高效工具【预训练+指令监督微

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
LLaMA7B/13B/33B/65Bq_proj,v_proj
LLaMA-27B/13B/70Bq_proj,v_projllama2
BLOOM560M/1.1B/1.7B/3B/7.1B/176Bquery_key_value
BLOOMZ560M/1.1B/1.7B/3B/7.1B/176Bquery_key_value
Falcon7B/40Bquery_key_value
Baichuan7B/13BW_packbaichuan
InternLM7Bq_proj,v_projintern
Qwen7Bc_attnchatml
XVERSE13Bq_proj,v_projxverse
ChatGLM26Bquery_key_valuechatglm2
  • 默认模块是 --lora_target 参数的部分可选项。请使用 python src/train_bash.py -h 查看全部可选项。
  • 对于所有“基座”(Base)模型,--template 参数可以是 defaultalpacavicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。

2、支持的训练方法

方法全参数训练部分参数训练LoRAQLoRA
预训练
指令监督微调
奖励模型训练
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/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的使用方法

更新中……

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年12月5日
下一篇 2023年12月5日

相关推荐