T5-large模型CUDA out of memory的一种解决方法

先说结论:优化器改成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还是需要强悍的硬件支撑。
在这里插入图片描述

T5-large模型CUDA out of memory的一种解决方法_第1张图片

你可能感兴趣的:(深度学习,人工智能,自然语言处理)