跳至主要内容

微调配置

概述

我们目前支持三种不同的微调配置:

  • SFTConfig
    • 监督式微调(之前称为指令调优)
    • For finetuning an adapter on a dataset with prompt and completion columns
      • 教导模型遵循prompt列中的指令并生成completion
  • ContinuedPretrainingConfig
    • 之前称为Completion
    • For finetuning an adapter on a dataset with a text column
      • 教导模型根据之前的标记生成下一个标记
  • GRPOConfig
    • 强化微调 (RFT)
    • For finetuning an adapter on a dataset with a prompt column
      • 需要一个奖励函数列表
      • 训练模型生成能最大化奖励的completion
    • 目前仅支持 lora 适配器类型

以下是三种配置共有的参数:

base_model: str
adapter: str | None = Field(default=None)
epochs: PositiveInt | None = Field(default=None)
learning_rate: PositiveFloat | None = Field(default=None)
rank: PositiveInt | None = Field(default=None)
target_modules: List[str] | None = Field(default=None)
enable_early_stopping: bool = Field(default=True)
lr_scheduler: dict | None = Field(default=None)
optimizer: dict | None = Field(default=None)
lora_alpha: PositiveInt | None = Field(default=None)
lora_dropout: PositiveFloat | None = Field(default=None)
warmup_ratio: PositiveFloat | None = Field(default=None)
effective_batch_size: PositiveInt | None = Field(default=None)

GRPO配置

GRPOConfig 类添加了以下参数:

beta: float | None = Field(default=None) # value between 0 and 1, default is 0.001
num_generations: PositiveInt | None = Field(default=None) # can be any positive integer, default is 16
sampling_params: SamplingParamsConfig | dict | None = Field(default=None)
reward_fns: RewardFunctionsConfig | None = Field(default=None)

有关SamplingParamsConfig的更多信息,请查看此页面

默认值

默认情况下,Predibase设置以下默认值(可能会更改):

  • epochs: 3
  • adapter: "lora"
  • learning_rate: 0.0002
  • rank: 16
  • target_modules: 请参阅下方"目标模块"部分
  • enable_early_stopping: 如果验证损失在连续10次评估检查点上趋于平稳,则启用训练提前停止
  • lr_scheduler: {"type": "cosine_with_restarts", "params": {}}
  • 优化器: {"type": "adamw", "params": {}}
  • lora_alpha: 无
  • lora_dropout: 0
  • warmup_ratio: 0.03
  • effective_batch_size: 16
Note regarding base_model

使用可用模型列表中提供的简称。

适配器

adapter 参数决定将微调哪种类型的适配器。Predibase 支持两种适配器类型:

  • lora: LoRA is an efficient method for training LLMs that introduces a small subset of task-specific model parameters alongside the original model parameters. These weights learn from the task-specific data during fine-tuning, optimizing performance for your dataset.
    • 目前,这是GRPO唯一支持的适配器类型
  • turbo_lora (新功能): 这是一种基于LoRA的专有微调方法,同时还能将推理吞吐量(以每秒生成的token数衡量)提升高达3.5倍(单请求)和2倍(高QPS批量工作负载),具体取决于下游任务的类型。训练任务需要更长时间来完成,定价为标准微调价格的2倍。
  • turbo: 在基础模型或现有LoRA适配器之上微调一个推测器,以实现推测性解码,将推理吞吐量提高2-3倍,同时参数效率提高100倍。非常适合加速令牌生成任务,并且可以通过使用adapter="turbo"恢复作业,将现有的LoRA微调转换为Turbo LoRA。

了解更多关于每个适配器的信息请点击这里

目标模块

target_modules参数是一个字符串列表,其中每个字符串是模型中您想要微调的模块名称。默认值为None,这意味着将微调默认模块。对于每个基础模型,我们有以下目标模块:

  • codellama-13b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • codellama-70b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • gemma-2b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • gemma-2b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • gemma-7b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • gemma-7b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-2-13b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-2-13b-chat
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-2-70b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-2-70b-chat
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-2-7b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-2-7b-chat
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-3-8b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-3-8b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-3-70b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • llama-3-70b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • mistral-7b
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • mistral-7b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • mistral-7b-instruct-v0-2
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • mistral-7b-instruct-v0-3
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • mixtral-8x7b-instruct-v0-1
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
  • phi-2
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • 密集
    • fc1 (默认)
    • fc2 (默认)
  • zephyr-7b-beta
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • phi-3-mini-4k-instruct
    • qkv_proj (默认)
    • o_proj (默认)
    • gate_up_proj
    • down_proj
  • phi-3-5-mini-instruct
    • qkv_proj (默认)
    • o_proj (默认)
    • gate_up_proj
    • down_proj
  • codellama-7b-instruct
    • q_proj (默认)
    • k_proj
    • v_proj (默认)
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  • codellama-7b
    - q_proj (默认)
    - k_proj
    - v_proj (默认)
    - o_proj
    - gate_proj
    - up_proj
    - down_proj
    -solar-pro-preview-instruct
    - q_proj (默认)
    - k_proj
    - v_proj (默认)
    - o_proj
    - gate_proj
    - up_proj
    - down_proj

优化器

optimizer 参数是一个字典,用于指定要使用的优化器。默认值为 {"type": "adamw_torch", "params": {}}

具体来说,params字段是一个字典,用于指定优化器使用的参数,默认值因优化器类型而异。更多信息请参阅Hugging Face文档

我们目前支持以下优化器:

  • adamw_torch
  • adamw_torch_fused
  • sgd
  • adagrad
  • paged_adamw_8bit
  • paged_ademamix_8bit
  • paged_lion_8bit

学习率调度器

lr_scheduler参数是一个字典,用于指定要使用的学习率调度器。默认值为{"type": "cosine_with_restarts", "params": {}}

特别是,params字段是一个字典,用于指定学习率调度器的参数,且默认值会因学习率调度器类型而异。更多信息请参阅Hugging Face文档

我们目前支持以下学习率调度器:

  • constant_with_warmup
  • linear
  • 余弦相似度
  • cosine_with_restarts
  • inverse_sqrt
  • warmup_stable_decay

Lora Alpha

lora_alpha参数是一个正整数,用于指定LoRA权重的缩放因子。该参数仅在适配器类型为loraturbo_lora时使用。默认值为None

Lora 随机丢弃

lora_dropout参数是一个正浮点数,用于指定LoRA适配器的丢弃率,范围在[0, 1]之间。丢弃是一种正则化技术,在训练过程中随机丢弃网络中的部分神经元以防止过拟合。该参数仅在适配器类型为loraturbo_lora时使用。默认值为0

预热比例

warmup_ratio 参数是一个正浮点数,用于指定学习率调度器的预热比例。默认值为 0.03

有效批次大小

通常,我们会尝试选择能放入内存的最大批次大小,然后调整gradient_accumulation_steps来模拟更大的批次大小,从而得到有效批次大小(batch_size * gradient_accumulation_steps)。将effective_batch_size设为参数会直接设置有效批次大小,从而覆盖该过程。effective_batch_size必须是2的有效幂次。默认值为16