unsloth 笔记: training的时候进行evaluation
- 在训练过程中设置评估,需要先把数据集拆分成 训练集 和 测试集。4
- 一定要对数据集进行打乱(shuffle),否则评估结果是不正确的!
new_dataset = dataset.train_test_split(test_size = 0.01, # 测试集大小,这里是 1%,也可以用整数表示具体行数shuffle = True, # 一定要设置为 True!seed = 3407, # 随机种子,保证可复现
)train_dataset = new_dataset["train"] # 训练集
eval_dataset = new_dataset["test"] # 测试集
split 数据集是在unsloth笔记:运行&微调 gemma-CSDN博客 5.5.3 dataset.map()之后
设置训练参数以启用评估
- 评估可能会 非常非常慢,尤其是当你设置
eval_steps = 1
时 —— 这意味着每训练一步就评估一次- 如果你真的要这么做,建议把
eval_dataset
的大小缩减,比如只保留 100 行
- 如果你真的要这么做,建议把
from trl import SFTTrainer, SFTConfigtrainer = SFTTrainer(args = SFTConfig(fp16_full_eval = True, # 开启后减少显存占用per_device_eval_batch_size = 2, # 增大批大小会占用更多显存eval_accumulation_steps = 4, # 累积多少步再反向传播,可替代增大 batch_sizeeval_strategy = "steps", # 每隔若干步或若干 epoch 进行一次评估# 如果按照epoch那么这边就是"epoch"eval_steps = 1, # 每训练多少步进行一次评估),train_dataset = new_dataset["train"],eval_dataset = new_dataset["test"],...
)trainer.train()