在 Huggingface Trainer class 中恢复训练时如何避免迭代 Dataloader?
How to avoid iterating over Dataloader while resuming training in Huggingface Trainer class?
我目前正在使用 Huggingface 的 Trainer class 使用自定义损失函数训练 Distillbert 解决回归问题。由于计算的短暂性/意外错误,我正在使用他们的检查点来恢复训练。
我面临的问题是,每次我根据他们的培训师 class 通过 Trainer.train()
方法中的 model_path
从检查点恢复培训时,我注意到class 遍历数据加载器,直到达到检查点中保存的迭代计数 (see the lines from the Trainer class that match the issue)。
这通常不是问题,但由于我的数据加载器的整理功能的性质和数据集的大小,在没有任何训练的情况下迭代这样的持续时间非常昂贵并且会减慢整体训练速度。
我计划使用带有参数的自定义采样器 class something along the lines of this 来从给定位置恢复索引,但这对于给定问题来说似乎也很麻烦。
我可以尝试用什么替代方法来节省这些浪费的计算周期?
看起来 huggingface 通过在 TrainingArguments.
中使用 ignore_data_skip
参数提供了解决方案
虽然你必须小心使用这个标志。从本质上讲,就像您从第 0 步开始一个新纪元一样。但是您会将优化器/模型状态移动到从恢复点开始的任何状态。
我目前正在使用 Huggingface 的 Trainer class 使用自定义损失函数训练 Distillbert 解决回归问题。由于计算的短暂性/意外错误,我正在使用他们的检查点来恢复训练。
我面临的问题是,每次我根据他们的培训师 class 通过 Trainer.train()
方法中的 model_path
从检查点恢复培训时,我注意到class 遍历数据加载器,直到达到检查点中保存的迭代计数 (see the lines from the Trainer class that match the issue)。
这通常不是问题,但由于我的数据加载器的整理功能的性质和数据集的大小,在没有任何训练的情况下迭代这样的持续时间非常昂贵并且会减慢整体训练速度。
我计划使用带有参数的自定义采样器 class something along the lines of this 来从给定位置恢复索引,但这对于给定问题来说似乎也很麻烦。
我可以尝试用什么替代方法来节省这些浪费的计算周期?
看起来 huggingface 通过在 TrainingArguments.
中使用ignore_data_skip
参数提供了解决方案
虽然你必须小心使用这个标志。从本质上讲,就像您从第 0 步开始一个新纪元一样。但是您会将优化器/模型状态移动到从恢复点开始的任何状态。