安装Neptune.ai用于偶尔的ML实验日志记录后,它默认包含在所有transformers.trainer运行的回调列表中。因此,它需要使用令牌进行正确的初始化,否则会抛出
NeptuneMissingConfiguration
错误,要求令牌和项目名称。
这真的很烦人,我更喜欢海王星回调将其自身限制为警告,或者如果没有提供令牌则将其禁用。
不幸的是,除了完全卸载 Neptune.ai 之外,没有明显的方法可以禁用此回调。 https://huggingface.co/docs/transformers/main_classes/callback的文档页面指出此回调默认启用,并且无法禁用它(与可以通过环境变量禁用的其他一些回调不同)。
问题:如何在每次运行的基础上禁用 Neptune 回调?
显然
trainer
初始化后的这段代码有帮助:
for cb in trainer.callback_handler.callbacks:
if isinstance(cb, transformers.integrations.NeptuneCallback):
trainer.callback_handler.remove_callback(cb)
如果 Transformers 或 Neptune 团队通过此回调提供更多灵活性,那就太好了。
包含 Neptune 的原因是因为
report_to
中 TrainingArguments
的默认值为 all
,它隐式包含官方支持的记录器列表中所有已安装的记录器。您应该从项目使用的环境中卸载 Neptune,或者将 report_to="none"
传递给用于初始化 TrainingArguments
的 Trainer
实例(注意:这是字符串文字 "none"
,而不是 Python None
) )
这里的其他答案,包括已接受的答案,要么是这个问题的糟糕解决方法,要么根本不起作用。处理这个问题的正确方法如上所述。
要在 Transformers 训练器运行中禁用 Neptune 回调,您可以将 --no-neptune 标志传递给 trainer.train() 函数。
trainer = Trainer(
model=model,
args=args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
no_neptune=True
)
trainer.train()