Featured image of post 大模型微调出现loss尖峰/尖刺

大模型微调出现loss尖峰/尖刺

大模型下游任务微调时loss出现尖刺处理办法

之前在对大模型进行微调时,loss出现了尖刺,现在想起来就记录一下。
先说一下下游任务,模型的输入是较长的文本(单个样本约4000 tokens7000左右的文本长度),输出是特定格式的文本摘要。

训练主要硬件配置如下:

1
2
3
CPU:Intel(R) Xeon(R) Gold 5318Y CPU @ 2.10GHz
GPU: 2 * 4090 24G
内存:128 GB

基座模型及训练的主要参数如下:

1
2
3
4
5
6
7
8
base model:Qwen2.5-7B-Instruct-GPTQ-Int8
total batch size: 32
lr: 1e-6
num_train_epochs: 5
lora_rank: 8
lora_alpha:16
lr_scheduler_type:cosine_with_restarts
lr_scheduler_num_cycles:4

训练方式:用accelerate的分布式后端FSDP做数据并行DDP,训练代码是二次封装的transformersTrainer,数据处理部分是自己写的,对输入的systemuser部分的token做了屏蔽,只计算模型回复部分assistant部分的loss。然后出现了让广大LLMer头疼的问题:loss尖刺。如下图所示。

loss

除了第0个epoch,每个epoch的第一个batch都出现loss尖刺,尝试跳过每个epoch的第一个batch、重新打乱数据,问题依然存在。也试过打印第一个batch的数据进行检查,但并没有发现异常。

后面在网上搜到了这篇博客:Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed 。省流: FSDPDeepSpeed 在混合精度处理方面有差异,FSDP使用较低的学习率可能会导致不收敛。另外考虑到动态学习率的循环次数num_cyclesnum_train_epochs较接近,可能会对loss有影响。故对调整以下参数为新的值:

1
2
lr: 1e-4
lr_scheduler_num_cycles:8

问题解决:
loss_2

使用 Hugo 构建
主题 StackJimmy 设计