作用: 学习率。
修改影响: 调整此值可以显著影响模型的训练速度和最终性能。
在train.py代码的设置训练配置中:
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=max_seq_length,
dataset_num_proc=2,
args=TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=8,
warmup_steps=20,
max_steps=2000,
learning_rate=5e-5,
fp16=not is_bfloat16_supported(),
bf16=is_bfloat16_supported(),
logging_steps=1,
optim="adamw_8bit",
weight_decay=0.01,
lr_scheduler_type="linear",
seed=3407,
output_dir="outputs",
#save_strategy="no"
),
)
尝试过将learning_rate=5e-5,这一配置项修改为3e-4以及比5e-5更大的学习率如:6e-5,7e-5等
r: LoRA 的秩(rank),控制低秩适配的维度。选择大于0的数(如8, 16, 32等)会影响模型的表现和训练效率。更大的值可能会捕捉更多的特征,但会增加训练时间和内存消耗。
作用:增加 r 可以使模型更好地适应复杂数据,但可能导致训练时间增加;降低 r 则可能加快训练,但风险是捕捉到的信息可能不足。
model = FastLanguageModel.get_peft_model(
model,
r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 16,
lora_dropout = 0, # Supports any, but = 0 is optimized
bias = "none", # Supports any, but = "none" is optimized
# [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context
random_state = 3407,
use_rslora = False, # We support rank stabilized LoRA
loftq_config = None, # And LoftQ
)
在这里,我尝试过将r改为8和32
lora_alpha: LoRA 的缩放因子。它控制在训练过程中 LoRA 参数的影响程度。较大的值可能会使得适配更加灵活,但也可能导致过拟合。
lora_dropout: LoRA 的 dropout 概率,设为0表示不使用 dropout。使用 dropout 可以提高模型的泛化能力,但过高的 dropout 可能会影响学习效果。
在上述代码中尝试过将 lora_alpha = 16,lora_dropout = 0, 改为 lora_alpha = 32,lora_dropout = 0.05