如何解决通过将数据集分成块并再次加载模型,直到训练完数据集的所有块,在整个数据集上训练模型
这是我关于 StackOverflow 的第一个问题。我正在研究 CUAD(合同理解 Atticus 数据集),这是一个基于问答的数据集。但是由于资源限制,一次训练 80% 的数据集是不可能的。我将 HuggingFace Transformer 文档提供的样板代码用于问答任务 here。我的双手被 Google Colab Pro 束缚住了。因此,我不可能在训练数据集时使用多个 GPU。尽管使用了下面的超参数,但由于“CUDA 内存不足”等内存限制,我无法避免错误。
args = TrainingArguments(
'cuad-roberta',evaluation_strategy = "epoch",learning_rate=3e-5,per_device_train_batch_size=2,per_device_eval_batch_size=2,num_train_epochs=2,weight_decay=0.01,save_steps=5000,logging_steps=5000,save_total_limit=100,gradient_accumulation_steps = 12,eval_accumulation_steps = 4,)
在这种情况下,我将我的训练集(80%)分成了 4 部分,每部分包含 25% 的数据。因此,使用 Transformers 中任何支持问答的预训练模型,我已经训练了前 25% 的训练数据,然后将模型保存在我的驱动器目录中。然后,我从保存的目录中加载了该分词器和模型,并在相同的模型上训练了接下来的 25% 的训练数据,如下所示。
tokenizer = AutoTokenizer.from_pretrained('/content/drive/MyDrive/models/cuad-25%-roberta-base')
model = AutoModelForQuestionAnswering.from_pretrained('/content/drive/MyDrive/models/cuad-25%-roberta-base')
我又重复了两次该步骤以完成对整个训练数据的模型训练。
现在,我的问题是,当我有资源限制时,这种方法在训练模型方面是否正确?如果正确,这种方法会损害我模型的性能吗?我对 ML 和 NLP 比较陌生,所以请考虑任何愚蠢的错误。
此外,任何通过 HuggingFace Transformers 理解、可视化或实施问答任务的来源都会非常有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。