当前位置:   article > 正文

LLMs之ChatGLM:ChatGLM Efficient Tuning(一款高效微调ChatGLM-6B/ChatGLM2-6B的工具【LoRA/P-Tunin】)的简介、安装、使用方法之详细攻略_llama-efficient-tuning怎么训练

llama-efficient-tuning怎么训练

LLMs之ChatGLM:ChatGLM Efficient Tuning(一款高效微调ChatGLM-6B/ChatGLM2-6B的工具【LoRA/P-Tuning V2/Freeze Tuning/全量微调】)的简介、安装、使用方法之详细攻略

目录

相关文章

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 训练】)的简介、安装、使用方法之详细攻略

ChatGLM Efficient Tuning的简介

1、可供使用的数据集:SFT训练、奖励模型训练

2、可支持的微调方法:LoRA、P-Tuning V2、Freeze Tuning、全量微调

ChatGLM Efficient Tuning的安装

1、配置环境依赖

(1)、Python依赖

(2)、硬件需求

2、环境搭建

3、数据准备:构建自定义数据集

4、微调/测试

(0)、train_bash.py的命令行参数解释说明—模型部分/数据部分/微调部分/训练部分:hparams.ModelArguments、hparams.DataArguments、hparams.FinetuningArguments、Seq2SeqTrainingArguments

(1)、浏览器一键微调/测试

(2)、单 GPU 微调训练、多 GPU 分布式微调

(3)、奖励模型训练、RLHF训练

(4)、指标评估、模型预测

5、多种推理方式:API、CLI、GUI

6、导出微调模型

ChatGLM 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

ChatGLM Efficient Tuning的简介

        2023年4月发布的ChatGLM Efficient Tuning项目,是基于PEFT库对ChatGLM-6B高效微调,当然,也可改进为实现对ChatGLM2-6B进行高效微调。同时,该项目已声明在2023年7月15日后不再维护,但是其中一些方法和策略是值得学习和借鉴的。

官方地址https://github.com/hiyouga/ChatGLM-Efficient-Tuning

1、可供使用的数据集:SFT训练、奖励模型训练

使用方法请参考 data/README.md 文件。

因为部分数据集的使用需要确认,我们推荐使用下述命令登录您的 Hugging Face 账户。

  1. pip install --upgrade huggingface_hub
  2. huggingface-cli login

2、可支持的微调方法:LoRA、P-Tuning V2、Freeze Tuning、全量微调

LoRA:仅微调低秩适应器。

P-Tuning V2:仅微调前缀编码器。

Freeze Tuning:仅微调后几层的全连接层。

全量微调:微调模型所有参数。

ChatGLM 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)、硬件需求

微调方法批处理大小模式GPU显存速度
LoRA (r=8)16FP1628GB8ex/s
LoRA (r=8)8FP1624GB8ex/s
LoRA (r=8)4FP1620GB8ex/s
LoRA (r=8)4INT810GB8ex/s
LoRA (r=8)4INT48GB8ex/s
P-Tuning (p=16)4FP1620GB8ex/s
P-Tuning (p=16)4INT816GB8ex/s
P-Tuning (p=16)4INT412GB8ex/s
Freeze (l=3)4FP1624GB8ex/s
奖励模型训练方法批处理大小模式GPU显存速度
LoRA (r=8) + rm4FP1622GB-
LoRA (r=8) + rm1INT811GB-
RLHF 训练方法批处理大小模式GPU显存速度
LoRA (r=8) + ppo4FP1623GB-
LoRA (r=8) + ppo1INT812GB-

注:r 为LoRA 维数大小,p 为前缀词表大小,l 为微调层数,ex/s 为每秒训练的样本数。gradient_accumulation_steps 参数设置为 1。上述结果均来自于单个 Tesla V100 GPU,仅供参考。

2、环境搭建

通用

git lfs install

git clone https://github.com/hiyouga/ChatGLM-Efficient-Tuning.git

conda create -n chatglm_etuning python=3.10

conda activate chatglm_etuning

cd ChatGLM-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/ChatGLM-Efficient-Tuning/blob/main/data/dataset_info.json

  1. # 定位到数据集文件目录(data/dataset_info.json )修改对应的配置信息
  2. {
  3. "dataset_DIY": {
  4. "file_name": "dataset_DIY.json",
  5. # "file_sha1": "607f94a7f581341e59685aef32f531095232cf23"
  6. },

4、微调/测试

(0)、train_bash.py的命令行参数解释说明—模型部分/数据部分/微调部分/训练部分:hparams.ModelArgumentshparams.DataArgumentshparams.FinetuningArgumentsSeq2SeqTrainingArguments

内容来源

https://github.com/hiyouga/ChatGLM-Efficient-Tuning/wiki/%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95

hparams.

Model

Arguments

class glmtuner.hparams.ModelArguments <source>

model_name_or_path (str, optional): 预训练模型的路径或 huggingface.co/models 的项目标识符。缺省值:THUDM/chatglm-6b

config_name (str, optional): 预训练配置文件名称或路径,不指定则与 model_name 相同。缺省值:None

tokenizer_name (str, optional): 预训练分词器名称或路径,不指定则与 model_name 相同。缺省值:None

cache_dir (str, optional): 保存从 huggingface.co 下载内容的文件夹路径。缺省值:None

use_fast_tokenizer (bool, optional): 是否使用快速分词器。缺省值:True

model_revision (str, optional): 将要使用的预训练模型版本。缺省值:main

use_auth_token (str, optional): 是否使用根据 huggingface-cli login 获取的认证密钥。缺省值:False

quantization_bit (int, optional): 模型量化等级。缺省值:None

quantization_type (str, optional): INT4 量化中使用的数据类型。缺省值:nf4

double_quantization (bool, optional): 是否在 INT4 量化中使用双重量化。缺省值:True

checkpoint_dir (str, optional): 存放模型断点和配置文件的文件夹路径。缺省值:None

reward_model (str, optional): 存放奖励模型断点的文件夹路径。缺省值:None

resume_lora_training (bool, optional): 若是,则使用上次的 LoRA 权重继续训练;若否,则合并之前的 LoRA 权重并创建新的 LoRA 权重。缺省值:True

plot_loss (bool, optional): 微调后是否绘制损失函数曲线。缺省值:False

hparams.

Data

Arguments

class glmtuner.hparams.DataArguments <source>

dataset (str, optional): 将要使用的数据集名称,使用英文逗号来分割多个数据集。缺省值:alpaca_zh

dataset_dir (str, optional): 存放数据集文件的文件夹路径。缺省值:data

split (str, optional): 在训练和评估时使用的数据集分支。缺省值:train

overwrite_cache (bool, optional): 是否覆盖数据集缓存。缺省值:False

preprocessing_num_workers (int, optional): 数据预处理时使用的进程数。缺省值:None

max_source_length (int, optional): 分词后输入序列的最大长度。缺省值:512

max_target_length (int, optional): 分词后输出序列的最大长度。缺省值:512

max_samples (int, optional): 每个数据集保留的样本数,默认保留全部样本。缺省值:None

eval_num_beams (int, optional): 评估时使用的 beam 数,该参数将会用于 model.generate。缺省值:None

ignore_pad_token_for_loss (bool, optional): 在计算损失时是否忽略填充值。缺省值:True

source_prefix (str, optional): 在训练和评估时向每个输入序列添加的前缀。缺省值:None

dev_ratio (float, optional): 划分验证集时使用的数据量比例,应当处于 0 和 1 之间。缺省值:0

hparams.

Finetuning

Arguments

class glmtuner.hparams.FinetuningArguments <source>

finetuning_type (str, optional): 训练时使用的微调方法。缺省值:lora

num_layer_trainable (int, optional): Freeze 微调中可训练的层数。缺省值:3

name_module_trainable (str, optional): Freeze 微调中可训练的模块类型。缺省值:mlp

pre_seq_len (int, optional): P-tuning v2 微调中的前缀序列长度。缺省值:64

prefix_projection (bool, optional): P-tuning v2 微调中是否添加前缀映射层。缺省值:False

lora_rank (int, optional): LoRA 微调中的秩大小。缺省值:8

lora_alpha (float, optional): LoRA 微调中的缩放系数。缺省值:32.0

lora_dropout (float, optional): LoRA 微调中的 Dropout 系数。缺省值:0.1

lora_target (str, optional): 将要应用 LoRA 层的模块名称,使用英文逗号来分割多个模块。缺省值:query_key_value

Seq2Seq

Training

Arguments

class transformers.Seq2SeqTrainingArguments <source>

我们仅列出部分关键参数,详细内容请查阅 HuggingFace Docs。

output_dir (str): 输出模型权重和日志的文件夹路径。

overwrite_output_dir (bool, optional): 是否覆盖输出文件夹。缺省值:False

do_train (bool, optional): 是否执行训练。缺省值:False

do_eval (bool, optional): 是否执行评估。缺省值:False

do_predict (bool, optional):是否执行预测。缺省值:False

per_device_train_batch_size (int, optional): 用于训练的批处理大小。缺省值:8

per_device_eval_batch_size (int, optional): 用于评估或预测的批处理大小。缺省值:8

gradient_accumulation_steps (int, optional): 梯度累加次数。缺省值:1

learning_rate (float, optional): AdamW 优化器的初始学习率。缺省值:5e-5

weight_decay (float, optional): AdamW 优化器除偏置和归一化层权重以外使用的权重衰减系数。缺省值:0.0

max_grad_norm (float, optional): 梯度裁剪中允许的最大梯度范数。缺省值:1.0

num_train_epochs (float, optional): 训练轮数(若非整数,则最后一轮只训练部分数据)。缺省值:3.0

logging_steps (int, optional): 日志输出间隔。缺省值:500

save_steps (int, optional): 断点保存间隔。缺省值:500

no_cuda (bool, optional): 是否关闭 CUDA。缺省值:False

fp16 (bool, optional): 是否使用 fp16 半精度(混合精度)训练。缺省值:False

predict_with_generate (bool, optional): 是否生成序列用于计算 ROUGE 或 BLEU 分数。缺省值:False

(1)、浏览器一键微调/测试

浏览器一键微调/测试

CUDA_VISIBLE_DEVICES=0 python src/train_web.py

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

(2)、单 GPU 微调训练、多 GPU 分布式微调

单 GPU 微调训练

单 GPU 微调训练

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \

    --stage sft \

    --model_name_or_path path_to_your_chatglm_model \

    --do_train \

    --dataset alpaca_gpt4_zh \

    --finetuning_type lora \

    --output_dir path_to_sft_checkpoint \

    --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

参数解释:https://github.com/hiyouga/ChatGLM-Efficient-Tuning/wiki

多 GPU 分布式微调多 GPU 分布式微调
accelerate config # 首先配置分布式环境
accelerate launch src/train_bash.py # 参数同上

(3)、奖励模型训练、RLHF训练

奖励模型训练

奖励模型训练

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \

    --stage rm \

    --model_name_or_path path_to_your_chatglm_model \

    --do_train \

    --dataset comparison_gpt4_zh \

    --finetuning_type lora \

    --resume_lora_training False \

    --checkpoint_dir path_to_sft_checkpoint \

    --output_dir path_to_rm_checkpoint \

    --per_device_train_batch_size 4 \

    --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

RLHF 训练

RLHF 训练

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \

    --stage ppo \

    --model_name_or_path path_to_your_chatglm_model \

    --do_train \

    --dataset alpaca_gpt4_zh \

    --finetuning_type lora \

    --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

(4)、指标评估、模型预测

指标评估

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

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \

    --stage sft \

    --model_name_or_path path_to_your_chatglm_model \

    --do_eval \

    --dataset alpaca_gpt4_zh \

    --finetuning_type lora \

    --checkpoint_dir path_to_checkpoint \

    --output_dir path_to_eval_result \

    --per_device_eval_batch_size 8 \

    --max_samples 50 \

    --predict_with_generate

模型预测

模型预测

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \

    --stage sft \

    --model_name_or_path path_to_your_chatglm_model \

    --do_predict \

    --dataset alpaca_gpt4_zh \

    --finetuning_type lora \

    --checkpoint_dir path_to_checkpoint \

    --output_dir path_to_predict_result \

    --per_device_eval_batch_size 8 \

    --max_samples 50 \

    --predict_with_generate

注:如果需要预测的样本没有标签,请首先在 response 列中填入一些占位符,以免样本在预处理阶段被丢弃。

5、多种推理方式:API、CLI、GUI

API 服务

API 服务

python src/api_demo.py \

    --model_name_or_path path_to_your_chatglm_model \

    --finetuning_type lora \

    --checkpoint_dir path_to_checkpoint

关于 API 文档请见 http://localhost:8000/docs。

命令行测试

命令行测试

python src/cli_demo.py \

    --model_name_or_path path_to_your_chatglm_model \

    --finetuning_type lora \

    --checkpoint_dir path_to_checkpoint

浏览器测试

浏览器测试

python src/web_demo.py \

    --model_name_or_path path_to_your_chatglm_model \

    --finetuning_type lora \

    --checkpoint_dir path_to_checkpoint

6、导出微调模型

导出微调模型

导出微调模型

python src/export_model.py \

    --model_name_or_path path_to_your_chatglm_model \

    --finetuning_type lora \

    --checkpoint_dir path_to_checkpoint \

    --output_dir path_to_export

ChatGLM Efficient Tuning的使用方法

更新中……

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/358069
推荐阅读
相关标签
  

闽ICP备14008679号