我正在通过 Huggingface Transformers(特别是 google/pegasus-cnn_dailymail
,并且我正在通过 Pytorch 使用 Huggingface Transformer)获取一个预先训练好的飞马模型,并且我想根据我自己的数据对其进行微调。然而,这是一个相当大的数据集,我遇到了在训练中途耗尽 VRAM 的问题,这是因为数据集的大小可能在训练开始几天后才开始,这使得反复试验方法非常低效。
我想知道如何提前确保它不会耗尽内存。我认为模型的内存使用量在某种程度上与输入的大小成正比,因此我已将 truncation=True
, padding=True
, max_length=1024
传递给我的标记器,如果我的理解是正确的,应该使每行相同大小的标记器的所有输出。考虑到批量大小也是一个常数,我认为使用的 VRAM 数量应该是稳定的。所以我应该能够将数据集切割成可管理的部分,只需查看第一次运行的 ram/vram 使用情况,并推断它会从头到尾顺利运行。
然而,事实似乎正好相反。我一直在观察 VRAM 的使用量,它的变化很大,从一次约 12GB 到突然需要超过 24GB 并崩溃(因为我没有超过 24GB)。
那么,我如何确保在整个训练过程中使用的 vram 量保持在合理范围内,并避免在我已经进行了几天的训练时由于缺少 vram 而崩溃过程?
答案 0 :(得分:1)
padding=True
实际上不会填充到 max_length
,而是填充到您传递给分词器的列表中最长的样本。要填充到 max_length
,您需要设置 padding='max_length'
。