先说结论:优化器改成AdaFactor

最近在使用谷歌T5model模型进行一些语义恢复的实验,在github上参考了一些代码,一开始还是用的T5-base模型在服务器上训练,用的是30系的显卡,显存8192MiB,batch_size也设置成32,训练起来显存占满完全没问题,效果也不差。 然后看到一些论文用了T5-large模型,效果会比T5-base好一些,毕竟参数更多,就想着调用模型的时候把’t5-base’改成’t5-large‘,大不了batch_size小一点,也能跑吧?

model = T5ForConditionalGeneration.from_pretrained('t5-large')

然后发现,batch_size = 1都训练不动,直接OOM,去huggingface查到一些训练T5的tips,里头就有一个建议把优化器AdamW改成AdaFactor跑T5-large。AdaFactor用途:针对具有巨量参数的大型模型,提出一般自适应优化方法的低耗内存替代。以下给出一个参考的参数。

optimizer = Adafactor(

model.parameters(),

lr=1e-3,

eps=(1e-30, 1e-3),

clip_threshold=1.0,

decay_rate=-0.8,

beta1=None,

weight_decay=0.0,

relative_step=False,

scale_parameter=False,

warmup_init=False

)

虽然最后一次只能跑很小的数据量,但至少能跑起来,能对比一下base和large的区别。所以finetune T5-large还是需要强悍的硬件支撑。

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。