微调配置
概述
我们目前支持三种不同的微调配置:
SFTConfig- 监督式微调(之前称为指令调优)
- For finetuning an adapter on a dataset with
promptandcompletioncolumns- 教导模型遵循
prompt列中的指令并生成completion列
- 教导模型遵循
ContinuedPretrainingConfig- 之前称为Completion
- For finetuning an adapter on a dataset with a
textcolumn- 教导模型根据之前的标记生成下一个标记
GRPOConfig- 强化微调 (RFT)
- For finetuning an adapter on a dataset with a
promptcolumn- 需要一个奖励函数列表
- 训练模型生成能最大化奖励的
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
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-solar-pro-preview-instruct
- q_proj (默认)
- k_proj
- v_proj (默认)
- o_proj
- gate_proj
- up_proj
- down_proj- 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权重的缩放因子。该参数仅在适配器类型为lora或turbo_lora时使用。默认值为None。
Lora 随机丢弃
lora_dropout参数是一个正浮点数,用于指定LoRA适配器的丢弃率,范围在[0, 1]之间。丢弃是一种正则化技术,在训练过程中随机丢弃网络中的部分神经元以防止过拟合。该参数仅在适配器类型为lora或turbo_lora时使用。默认值为0。
预热比例
warmup_ratio 参数是一个正浮点数,用于指定学习率调度器的预热比例。默认值为 0.03。
有效批次大小
通常,我们会尝试选择能放入内存的最大批次大小,然后调整gradient_accumulation_steps来模拟更大的批次大小,从而得到有效批次大小(batch_size * gradient_accumulation_steps)。将effective_batch_size设为参数会直接设置有效批次大小,从而覆盖该过程。effective_batch_size必须是2的有效幂次。默认值为16。