先说结论:优化器改成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还是需要强悍的硬件支撑。
参考链接
发表评论