如何在 Huggingface Trainer 课程中恢复训练时避免迭代 Dataloader?

Posted

技术标签:

【中文标题】如何在 Huggingface Trainer 课程中恢复训练时避免迭代 Dataloader?【英文标题】:How to avoid iterating over Dataloader while resuming training in Huggingface Trainer class? 【发布时间】:2020-11-12 15:31:16 【问题描述】:

我目前正在使用 Huggingface 的 Trainer 类来训练 Distilllbert 使用自定义损失函数解决回归问题。由于计算/意外错误的短暂性,我正在使用他们的检查点恢复训练。

我面临的问题是,每次我通过Trainer.train() 方法中的model_path 按照他们的Trainer 类从检查点恢复训练时,我注意到该类迭代数据加载器直到它到达迭代计为保存在检查点 (see the lines from the Trainer class that match the issue)。

这通常可能不是问题,但由于我的数据加载器的整理功能的性质和数据集的大小,在没有任何训练的情况下迭代这样的持续时间非常昂贵,并且会减慢整体训练的速度。

我计划使用带有参数的自定义采样器类 something along the lines of this 来从给定位置恢复索引,但这对于给定问题似乎也很棘手。

在浪费的计算周期上,我可以尝试节省什么替代方案?

【问题讨论】:

【参考方案1】:

看起来,huggingface 通过在 TrainingArguments 中使用 ignore_data_skip 参数提供了解决方案。

虽然你必须小心使用这个标志。从本质上讲,就像您从第 0 步开始一个新纪元一样。但是您会将优化器/模型状态移动到从恢复点开始的任何状态。

【讨论】:

以上是关于如何在 Huggingface Trainer 课程中恢复训练时避免迭代 Dataloader?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用拥抱脸变压器批量制作训练器垫输入?

将 HuggingFace 模型加载到 AllenNLP 中会给出不同的预测

中断后如何恢复训练 pl.Trainer?

Transformers 和 PyTorch 的权重和偏差?

中文bert wwm 预训练参考笔记

BERT模型Hugging face的慢速训练