定义指标和环境变量 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

定义指标和环境变量

调优作业使用指标来评估性能,从而优化其启动的训练作业的超参数。本指南介绍如何定义指标,以便您可以使用自定义算法进行训练,或者使用 Amazon 的内置算法 SageMaker。本指南还介绍如何在自动模型调整 (AMT) 作业期间指定环境变量。

定义指标

Amazon SageMaker 超参数调整会解析您的机器学习算法stdoutstderr流,以查找指标,例如损失或验证精度。这些指标表明了模型在数据集上的表现。

以下部分将介绍如何使用两种类型的算法进行训练:内置算法和自定义算法。

使用内置算法进行训练

如果您使用其中一种SageMaker 内置算法,则已经为您定义了指标。此外,内置算法会自动将指标发送至超参数调优以进行优化。这些指标也会写入 Amazon CloudWatch 日志。有关更多信息,请参阅使用亚马逊记录亚马逊 SageMaker事件 CloudWatch

对于调优作业的目标指标,可选择内置算法发出的指标之一。有关可用指标的列表,请参阅 “使用 Amazon SageMaker 内置算法” 或 “预训练模型” 中的 “模型调整” 部分,了解相应的算法

您可以在调优作业中选择最多 40 个指标进行监控。请选择其中一个指标作为目标指标。超参数调优作业将根据目标指标,返回性能最佳的训练作业

注意

超参数调优会自动发送一个额外的超参数 _tuning_objective_metric,将目标指标传递给调优作业,以便在训练期间使用。

使用自定义算法进行训练

本部分将介绍如何定义自己的指标,以便使用自定义算法进行训练。使用自定义算法时,请确保算法至少将一个指标写入 stderrstdout。超参数调优会解析这些流,以找到可表明模型在数据集上的表现的算法指标。

您可以通过为调优作业所监控的每个指标指定名称和正则表达式,以定义自定义指标。然后,将这些指标定义传递给MetricDefinitions字段中TrainingJobDefinition参数中的AlgorithmSpecificationCreateHyperParameterTuningJobAPI

以下显示了由训练算法写入 stderrstdout 的日志的示例输出。

GAN_loss=0.138318; Scaled_reg=2.654134; disc:[-0.017371,0.102429] real 93.3% gen 0.0% disc-combined=0.000000; disc_train_loss=1.374587; Loss = 16.020744; Iteration 0 took 0.704s; Elapsed=0s

以下代码示例演示了如何在 Python 中使用正则表达式。此代码用于搜索示例日志输出,并捕获四个不同指标的数字值。

[ { "Name": "ganloss", "Regex": "GAN_loss=(.*?);", }, { "Name": "disc-combined", "Regex": "disc-combined=(.*?);", }, { "Name": "discloss", "Regex": "disc_train_loss=(.*?);", }, { "Name": "loss", "Regex": "Loss = (.*?);", }, ]

在正则表达式中,圆括号 () 用于将正则表达式的各个部分组合在一起。

  • 对于代码示例中定义的 loss 指标,表达式 (.*?); 将捕获确切文本 "Loss=" 与第一个分号 (;) 字符之间的任何字符。

  • 字符 . 指示正则表达式匹配任何字符。

  • 字符 * 表示匹配零个或多个字符。

  • 字符 ? 表示仅在 ; 字符首次出现之前进行捕获。

代码示例中定义的损失指标将从示例输出中捕获 Loss = 16.020744

选择您定义的指标之一作为调优作业的目标指标。如果您使用的是 SageMaker API,请在发送给CreateHyperParameterTuningJob操作的HyperParameterTuningJobConfig参数的HyperParameterTuningJobObjective字段中指定name键的值。

指定环境变量

SageMaker AMT优化调优作业中的超参数,以找到模型性能的最佳参数。您可以使用环境变量配置调优作业,以更改其行为。您还可以在调优作业中使用训练期间使用的环境变量。

如果要使用调优作业中的环境变量或指定新的环境变量,请在Environment中输入字符串值 SageMaker HyperParameterTrainingJobDefinitionAPI。将此训练作业定义传递给CreateHyperParameterTuningJobAPI。

例如,可将环境变量 SM_LOG_LEVEL 设置为以下值,以定制 Python 容器的输出。

NOTSET=0 DEBUG=10 INFO=20 WARN=30 ERROR=40 CRITICAL=50

例如,要将日志级别设置为10以调试容器日志,请在内部设置环境变量 HyperParameterTrainingJobDefinition,如下所示。

{ "HyperParameterTuningJobConfig": { ..., } "TrainingJobDefinition": { ..., "Environment" : [ { "SM_LOG_LEVEL": 10 } ], ..., }, ..., }