Huggingface Trainer 的 Wandb 网站仅显示第一个模型的图和日志

Wandb website for Huggingface Trainer shows plots and logs only for the first model

我正在使用 for 循环微调多个模型,如下所示。

for file in os.listdir(args.data_dir):
    finetune(args, file)

但是 wandb 网站仅显示第一个文件的绘图和日志,即 data_dir 中的 file1,尽管它正在为其他文件训练和保存模型。感觉很奇怪的行为。

wandb: Synced bertweet-base-finetuned-file1: https://wandb.ai/***/huggingface/runs/***

这是一小段微调代码,带有 Huggingface:

def finetune(args, file):
    training_args = TrainingArguments(
        output_dir=f'{model_name}-finetuned-{file}',
        overwrite_output_dir=True,
        evaluation_strategy='no',
        num_train_epochs=args.epochs,
        learning_rate=args.lr,
        weight_decay=args.decay,
        per_device_train_batch_size=args.batch_size,
        per_device_eval_batch_size=args.batch_size,
        fp16=True, # mixed-precision training to boost speed
        save_strategy='no',
        seed=args.seed,
        dataloader_num_workers=4,
    )

    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=tokenized_dataset['train'],
        eval_dataset=None,
        data_collator=data_collator,
    )
    trainer.train()
    trainer.save_model()

嘿,我在 Weights & Biases 工作。我的第一个猜测是您必须在 finetune 函数的末尾调用 wandb.finish()。这将关闭 wandb 进程。然后,当您开始新的迭代时,应该启动一个新的 wandb 进程。

如果您想在训练器中记录 W&B 集成未记录的其他配置数据,您可以在开始训练之前随时调用 wandb.init,请参阅 wandb.init docs here 并登录到那。 Trainer 应该知道已经有一个 wandb 进程 运行,因此将只记录到该进程,而不是启动一个新进程。

def finetune():
  config = {'my-config-thing1':44, 'my-config-thing12':'cats'}

  wandb.init(project='my-project-name', config=config, ...)


  .... # Your Hugging Face code here


  wandb.finish()


wandb.init(reinit=True)run.finish() 帮助我在 wandb 网站上 分别 记录模型。

工作代码如下所示:


for file in os.listdir(args.data_dir):
    finetune(args, file)

import wandb
def finetune(args, file):
    run = wandb.init(reinit=True)
    ...
    run.finish()

参考:https://docs.wandb.ai/guides/track/launch#how-do-i-launch-multiple-runs-from-one-script