经过我的验证错误原因似乎是训练循环逻辑错误(双重梯度累积)
train_ds.py 中手动实现了梯度累积循环 ( for i in range(args.grad_accumulation_steps) ),
但 DeepSpeed 引擎同时也配置了 gradient_accumulation_steps 。
这导致优化器每 10 * 10 = 100 个微批次(micro-batches)才更新一次权重,而不是预期的 10 个。这极大地减少了模型参数的更新次数(整个训练过程仅更新了约 40 次),导致模型几乎没有学习。
将
for global_step in range(args.steps_per_epoch):
model.zero_grad()
for i in range(args.grad_accumulation_steps):
改为
for global_step in range(args.steps_per_epoch * args.grad_accumulation_steps):
模型可以正常训练,giou可以随着训练升高。
如果有同样问题的朋友可以试试我这个方法,我也是被苦恼了非常久。
经过我的验证错误原因似乎是训练循环逻辑错误(双重梯度累积)
train_ds.py 中手动实现了梯度累积循环 ( for i in range(args.grad_accumulation_steps) ),
但 DeepSpeed 引擎同时也配置了 gradient_accumulation_steps 。
这导致优化器每 10 * 10 = 100 个微批次(micro-batches)才更新一次权重,而不是预期的 10 个。这极大地减少了模型参数的更新次数(整个训练过程仅更新了约 40 次),导致模型几乎没有学习。
将
for global_step in range(args.steps_per_epoch):
model.zero_grad()
for i in range(args.grad_accumulation_steps):
改为
for global_step in range(args.steps_per_epoch * args.grad_accumulation_steps):
模型可以正常训练,giou可以随着训练升高。
如果有同样问题的朋友可以试试我这个方法,我也是被苦恼了非常久。