如何在训练 Huggingface Transformers (Pegasus) 模型时防止 VRAM 中途丢失?

How do I prevent a lack of VRAM halfway through training a Huggingface Transformers (Pegasus) model?

我正在通过 Huggingface 转换器采用预训练的 pegasus 模型(具体来说,google/pegasus-cnn_dailymail,并且我正在通过 Pytorch 使用 Huggingface 转换器),我想根据自己的数据对其进行微调。然而,这是一个相当大的数据集,我已经 运行 解决了 运行 在训练中途退出 VRAM 的问题,由于数据集的大小,训练开始后几天可能会出现这种情况,这使得反复试验的方法效率非常低。

我想知道如何提前确保它不会 运行 内存不足。我认为模型的内存使用在某种程度上与输入的大小成正比,所以我已经将 truncation=Truepadding=Truemax_length=1024 传递给我的分词器,如果我的理解是正确的,应该使分词器的所有输出每行大小相同。考虑到批量大小也是一个常数,我认为使用的 VRAM 量应该是稳定的。因此,我应该能够将数据集分割成可管理的部分,只需查看第一个 运行 的 ram/vram 用法,并推断它将 运行 从头到尾顺利进行。

然而,事实似乎恰恰相反。我一直在观察任何时候使用的 VRAM 数量,它可能变化很大,从一次约 12GB 到突然需要超过 24GB 并崩溃(因为我没有超过 24GB)。

那么,我如何确保在整个训练过程中使用的 vram 数量保持在合理范围内,并避免在我已经训练了几天时由于缺少 vram 而导致崩溃训练过程?

padding=True 实际上不会填充到 max_length,而是填充到您传递给分词器的列表中最长的样本。要填充到 max_length,您需要设置 padding='max_length'