使用SFTTrainer进行微调
使用SFTTrainer进行微调
无论是大型模型还是其他模型,微调过程所遵循的训练步骤与从头开始训练模型完全相同。我们可以用纯PyTorch编写自己的训练循环,也可以使用Hugging Face的Trainer来微调模型。
不过,使用SFTTrainer会简单得多(顺便说一下,它的底层使用的是Trainer),因为只要我们向它提供以下四个参数,它就会为我们处理大部分繁琐的细节:
- 模型
- 分词器
- 数据集
- 配置对象
前三个要素我们已经准备好了,接下来让我们处理配置对象。
SFT配置
在配置对象中,我们可以设置许多参数。我们将这些参数分为四类:
- 与梯度累积和检查点相关的内存使用优化参数
- 数据集相关参数,例如数据所需的最大序列长度(max_seq_length),以及是否对序列进行打包
- 典型的训练参数,如学习率(learning_rate)和训练轮次(num_train_epochs)
- 环境和日志参数,如输出目录(output_dir,若你选择在训练完成后将模型推送到Hugging Face Hub,这将成为模型的名称)、日志目录(logging_dir)和日志步数(logging_steps)
虽然学习率是一个非常重要的参数(作为起点,你可以尝试使用最初训练基础模型时的学习率),但实际上,最大序列长度更有可能导致内存不足问题。
务必始终选择对于你的使用场景而言合理的最短最大序列长度。在我们的案例中,无论是英文句子还是尤达