我现在把我的教练设置为:
training_args = TrainingArguments(
output_dir=f"./results_{model_checkpoint}",
evaluation_strategy="epoch",
learning_rate=5e-5,
per_device_train_batch_size=4,
per_device_eval_batch_size=4,
num_train_epochs=2,
weight_decay=0.01,
push_to_hub=True,
save_total_limit = 1,
resume_from_checkpoint=True,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_qa["train"],
eval_dataset=tokenized_qa["validation"],
tokenizer=tokenizer,
data_collator=DataCollatorForMultipleChoice(tokenizer=tokenizer),
compute_metrics=compute_metrics
)
培训结束后,在我的output_dir
中,我有几个培训师保存的文件:
['README.md',
'tokenizer.json',
'training_args.bin',
'.git',
'.gitignore',
'vocab.txt',
'config.json',
'checkpoint-5000',
'pytorch_model.bin',
'tokenizer_config.json',
'special_tokens_map.json',
'.gitattributes']
从文档中可以看出,resume_from_checkpoint
将继续从上一个检查点训练该模型:
resume_from_checkpoint (str or bool, optional) — If a str, local path to a saved checkpoint as saved by a previous instance of Trainer. If a bool and equals True, load the last checkpoint in args.output_dir as saved by a previous instance of Trainer. If present, training will resume from the model/optimizer/scheduler states loaded here.
但是当我调用trainer.train()
时,它似乎删除了最后一个检查点,并启动了一个新的检查点:
Saving model checkpoint to ./results_distilbert-base-uncased/checkpoint-500
...
Deleting older checkpoint [results_distilbert-base-uncased/checkpoint-5000] due to args.save_total_limit
它真的从上一个检查点(即5000)开始训练,只是在0开始新检查点的计数(保存500步后的第一个-“检查点-500”),还是干脆不继续培训?我还没有找到测试它的方法,而且文档也不清楚。
发布于 2022-06-27 21:07:01
看看代码,首先是加载检查点状态。、更新已经运行了多少个时代和继续培训,从这里到运行作业的总时间(不重置为0)。
若要继续进行培训,请在您的检查点上调用num_train_epochs
之前增加您的trainer.train()
。
发布于 2022-07-18 11:23:06
您还应该将resume_from_checkpoint参数添加到trainer.train中,并链接到检查点。
trainer.train(resume_from_checkpoint="{/checkpoint-0000")
0000-支票号码的例子。
别忘了在整个过程中安装你的驱动器。
https://stackoverflow.com/questions/72672281
复制相似问题