You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS SageMaker HyperparameterTuner中配置自定义指标(如ndcg@n)

问题

尝试在SageMaker的HyperparameterTuner超参数调优任务中使用ndcg@n作为优化目标。在独立训练任务中可以将其设为eval_metric并在日志中查看,但用于超参数调优时遇到以下问题:

  1. 直接设置objective_metric_name="ndcg@5"时,收到报错:

超参数调优任务的目标指标[ndcg@5]对[xgboost]算法无效,请选择有效的目标指标。

  1. 尝试在metrics_definition中添加配置metric_definitions = [{'Name': 'validation:ndcg@5','Regex': 'ndcg@5:(\\S+)'}]时,收到报错:

调用CreateHyperParameterTuningJob操作时发生错误(ValidationException):无法覆盖Amazon SageMaker算法的指标定义,请移除指标定义后重试请求。

  1. 创建自定义指标(可在日志中查看)时,仍遇到上述两个矛盾错误:添加指标定义被要求移除,移除后又提示指标无效。

此外,不仅HyperparameterTuner,普通(非HyperparameterTuner)训练任务中也无法添加自定义指标,连精确率、召回率这类通用指标也无法使用。需要解决的问题是:如何在SageMaker的HyperparameterTuner中添加自定义指标?

解决方法

针对SageMaker内置算法(如XGBoost)

内置算法的指标定义是平台预固定的,无法通过metrics_definition修改。如果要使用ndcg@5这类未被内置调优指标覆盖的指标,需按以下操作:

  • 在训练任务的eval_metric参数中指定ndcg@5,确保训练日志中会输出该指标的数值。
  • 核对SageMaker内置算法的预定义指标列表,确认是否有对应的指标名(部分版本的内置XGBoost可能将ndcg@5映射为validation:ndcg,需根据实际日志输出调整)。
  • 若内置指标列表中无对应项,只能切换到自定义训练脚本的方式。

自定义训练脚本(推荐方案)

通过自定义训练脚本可以完全控制指标的输出和定义,步骤如下:

  1. 编写训练脚本,在训练过程中计算ndcg@5、精确率、召回率等自定义指标,并按照SageMaker要求的格式输出到日志,示例代码:
    # 计算得到ndcg_score后输出
    print(f"validation:ndcg@5={ndcg_score}")
    
    输出格式要清晰,确保后续正则表达式能准确匹配指标数值。
  2. 创建Estimator时,指定自定义的metric_definitions,示例:
    metric_definitions = [
        {'Name': 'validation:ndcg@5', 'Regex': 'validation:ndcg@5=(\\S+)'}
    ]
    estimator = Estimator(
        entry_point='train.py',
        # 其他参数如实例类型、框架版本等
        metric_definitions=metric_definitions
    )
    
  3. 创建HyperparameterTuner时,直接将objective_metric_name设置为你定义的指标名(如"validation:ndcg@5"),此时不会触发覆盖内置指标的错误,因为这是自定义训练任务。

普通训练任务添加自定义指标的解决方式

普通训练任务若使用内置算法,同样无法自定义metric_definitions,只能用平台预定义指标。如需自定义指标,必须使用自定义训练脚本,按照上述步骤配置metric_definitions并在日志中输出对应格式的指标数值,SageMaker控制台就能识别并展示这些自定义指标。

内容的提问来源于stack exchange,提问作者Luis Leal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:25:46