Wandb sweeps integraition: custom objective

用户在修改 run_summarization.py 脚本时,使用 Trainer.hyperparameter_search 方法配合 backend="wandb" 进行超参搜索。用户定义了 compute_objective=hparam_objective 返回 metrics["eval_

Wandb sweeps integraition: custom objective

Wandb sweeps integraition: custom objective

快速结论:当使用 Hugging Face Transformers Trainer 配合 Wandb Sweeps 进行超参搜索,且自定义 compute_objective 返回多个指标的组合时,Wandb Sweeps 不会自动使用该自定义目标函数进行优化。Sweeps 实际优化的是 hyperparameter_search 中传入的 metric 参数对应的指标。需要手动将自定义目标值记录到 Wandb 中,并在 Sweep Configuration 中指定该指标名称。

问题场景

用户在修改 run_summarization.py 脚本时,使用 Trainer.hyperparameter_search 方法配合 backend="wandb" 进行超参搜索。用户定义了 compute_objective=hparam_objective 返回 metrics["eval_rougeLsum"] + metrics["eval_sari"],意图最大化两个指标的和。但在 Wandb 界面中看到的 Sweep Configuration 中 metric.nameeval/sari,用户不确定 Wandb 实际优化的是哪个目标。

报错原文

# 用户提供的 Wandb Sweep Configuration 显示
method: bayes
metric:
  goal: maximize
  name: eval/sari      # ← 用户传入的 metric 参数,而非自定义的目标
parameters:
  num_train_epochs:
    distribution: int_uniform
    max: 30
    min: 2
run_cap: 16

# 用户困惑点
My worry here is the disconnect between the generated sweep config and the custom objective function.
What is wandb optimizing now? My custom objective function (sari+rougeLsum) or metric that is passed to hyperparameter_search for direction?

原因分析

Wandb Wandb Sweeps 不支持多目标优化。用户在 hyperparameter_search 中传入的 metric 参数决定了 Sweep Configuration 中的优化目标。虽然用户定义了 compute_objective 在 Hugging Face Trainer 内部用于选择最佳 Trial,但 Wandb Sweeps 本身会根据 metric 参数在 Sweep 控制台中优化相应目标。用户传入的 metric="eval/sari" 意味着 Wandb Sweeps 独立于 compute_objective 优化 eval/sari

环境排查

  • transformers 版本: 4.29.2
  • Python 版本: ≥3.10
  • PyTorch 版本: 2.0.1+cu117 (CUDA 11.7)
  • Huggingface Hub 版本: 0.14.1
  • Wandb 版本: 需确认(Issue 中未明确)
  • 注意:Safetensors not installed 不影响此问题

解决步骤

  1. 手动记录自定义目标指标到 Wandb:在训练脚本中(例如在 compute_metrics 回调中)使用 wandb.log({"custom_metric": metrics["eval_rougeLsum"] + metrics["eval_sari"]})
  2. 调整 Wandb Sweep Configuration:在 wandb_hp_space 中将 metric.name 设置为上一步中记录的自定义指标名称,例如 "name": "custom_metric"
  3. 确保方向一致:在 wandb_hp_spacemetric.goal 中设置 "maximize""minimize",与 hyperparameter_searchdirection 参数匹配。
  4. 可选方案:如果 Wandb Sweeps 版本支持并行坐标图(parallel coordinate plot),可以手动分析两个指标(如 eval/rougeLsumeval/sari)在 Sweep 中的变化趋势来选择折中方案(Scenario 2)。
  5. 注意:hyperparameter_searchmetric 参数主要用于 Wandb Sweep 可视化图表中的列名,但 Sweeps 优化器会直接使用该指标的值。因此自定义目标函数的逻辑需要在 Wandb 端手动同步。

验证方法

运行 Sweep 后,在 Wandb UI 中查看 Sweep Dashboard。确认 metric 图表显示的是自定义的 custom_metric(或其他自定义名称)而非单个 eval/sarieval/loss。同时检查 Sweep Configuration 页面中 metric.name 是否已正确更新。

参考来源

huggingface/transformers Issue #23647: Wandb sweeps integraition: custom objective

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14356

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注