高效微调大型预训练模型的方法 - LoRA 微调 ChatGLM3-6B 配置参数

高效微调大型预训练模型的方法 - LoRA 微调 ChatGLM3-6B 配置参数

flyfish

LoRA (Low-Rank Adaptation) 微调是一种用于高效微调大型预训练模型的方法。LoRA 微调的核心思想是通过引入低秩矩阵来减少模型参数的数量,从而降低微调的计算成本和存储需求。

LoRA 微调的基本概念

  1. 低秩分解 :在神经网络中,权重矩阵通常是高维的。LoRA 通过将这些高维矩阵分解为两个低秩矩阵的乘积,从而减少参数的数量。例如,假设原始权重矩阵 W W W 的维度是 d × d d \times d d×d,LoRA 将其分解为两个低秩矩阵 A A A B B B,其中 A A A 的维度为 d × r d \times r d×r B B B 的维度为 r × d r \times d r×d(其中 r r r 通常远小于 d d d),因此 W W W 近似为 W + Δ W W + \Delta W W+ΔW,其中 Δ W = A × B \Delta W = A \times B ΔW=A×B

  2. 冻结原始权重 :在 LoRA 微调中,预训练模型的原始权重保持冻结,即不再更新。只有新引入的低秩矩阵 A A A B B B 参与训练。因此,LoRA 不仅减少了参数量,还避免了在微调过程中改变原始模型的性能。

  3. 高效性 :由于 LoRA 微调只涉及低秩矩阵的更新,所需的计算资源和显存占用显著减少,这使得在资源受限的情况下微调大型模型成为可能。

  4. 应用场景 :LoRA 微调主要应用于自然语言处理(NLP)任务中,尤其是在需要对大型语言模型(如 GPT、BERT)进行微调时。通过引入 LoRA,研究人员和开发者可以更高效地适应不同的任务,而不必微调整个模型。

LoRA 微调的配置项

data_config:
  train_file: train.json
  val_file: dev.json
  test_file: dev.json
  num_proc: 16
max_input_length: 256
max_output_length: 512
training_args:
  # see `transformers.Seq2SeqTrainingArguments`
  output_dir: ./output
  max_steps: 3000
  # needed to be fit for the dataset
  learning_rate: 5e-5
  # settings for data loading
  per_device_train_batch_size: 4
  dataloader_num_workers: 16
  remove_unused_columns: false
  # settings for saving checkpoints
  save_strategy: steps
  save_steps: 500
  # settings for logging
  log_level: info
  logging_strategy: steps
  logging_steps: 10
  # settings for evaluation
  per_device_eval_batch_size: 16
  evaluation_strategy: steps
  eval_steps: 500
  # settings for optimizer
  # adam_epsilon: 1e-6
  # uncomment the following line to detect nan or inf values
  # debug: underflow_overflow
  predict_with_generate: true
  # see `transformers.GenerationConfig`
  generation_config:
    max_new_tokens: 512
  # set your absolute deepspeed path here
  #deepspeed: ds_zero_2.json
  # set to true if train with cpu.
  use_cpu: false
peft_config:
  peft_type: LORA
  task_type: CAUSAL_LM
  r: 8
  lora_alpha: 32
  lora_dropout: 0.1

LoRA 微调的配置项的解释

data_config
train_file: train.json :训练数据集文件路径,格式为 JSON。

val_file: dev.json :验证数据集文件路径,格式为 JSON。

test_file: dev.json :测试数据集文件路径,格式为 JSON。

num_proc: 16 :数据处理时使用的进程数,通常用来加快数据加载速度。
max_input_lengthmax_output_length
max_input_length: 256 :输入序列的最大长度,超过这个长度的部分将被截断。

max_output_length: 512 :输出序列的最大长度,超过这个长度的部分将被截断。
training_args
这是模型训练的配置参数,下面是各个参数的解释:

output_dir: ./output :模型和其他输出文件的保存路径。

max_steps: 3000 :训练的最大步数,达到这个步数后停止训练。

learning_rate: 5e-5 :学习率,这是控制模型更新速度的超参数。

per_device_train_batch_size: 4 :每个设备(GPU/CPU)上的训练批次大小。

dataloader_num_workers: 16 :数据加载时使用的工作线程数。

remove_unused_columns: false :是否移除未使用的数据列。

save_strategy: steps :保存检查点的策略,此处设置为按步数保存。

save_steps: 500 :每隔多少步保存一次模型检查点。

log_level: info :日志记录的级别,info 表示记录一般信息。

logging_strategy: steps :日志记录的策略,此处设置为按步数记录。

logging_steps: 10 :每隔多少步记录一次日志。

per_device_eval_batch_size: 16 :每个设备(GPU/CPU)上的验证批次大小。

evaluation_strategy: steps :验证策略,此处设置为按步数进行验证。

eval_steps: 500 :每隔多少步进行一次验证。

predict_with_generate: true :在预测时是否使用生成模式,一般用于序列到序列任务。

generation_config
max_new_tokens: 512 :生成时最多生成的 token 数。

use_cpu: false :是否使用 CPU 进行训练,false 表示使用 GPU。
peft_config
这是针对 LoRA 微调的配置参数:

peft_type: LORA :指定使用 LoRA 作为参数高效微调(PEFT)的方法。

task_type: CAUSAL_LM :指定任务类型为因果语言模型(Causal Language Modeling)。

r: 8 :低秩矩阵的秩 r r r,决定了参数矩阵的大小。

lora_alpha: 32 :LoRA 的缩放因子,影响低秩矩阵的学习率。

lora_dropout: 0.1 :在 LoRA 微调中使用的 dropout 比例,用于防止过拟合。

这个配置文件定义了一个 LoRA 微调的完整流程,包括数据、训练参数、生成设置,以及 LoRA 特定的微调参数配置。

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值