本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
定义训练指标
SageMaker 自动解析训练作业日志并将训练指标发送到。 CloudWatch默认情况下, SageMaker 发送SageMaker 任务和端点指标中列出的系统资源利用率指标。如果 SageMaker 要解析日志并将自定义指标从您自己的算法的训练作业发送到 CloudWatch,则需要在配置 SageMaker 训练作业请求时通过传递指标名称和正则表达式来指定指标定义。
您可以使用 SageMaker 控制台、SageMaker Python SDK
如果您使用的是自己的算法,请执行以下操作:
-
确保算法将要捕获的指标写入日志。
-
定义一个正则表达式,该表达式可以准确搜索日志以捕获要发送到的指标的值 CloudWatch。
例如,假定您的算法发出有关训练错误和验证错误的以下指标:
Train_error=0.138318; Valid_error=0.324557;
如果您想在中监控这两个指标 CloudWatch,则指标定义的字典应类似于以下示例:
[ { "Name": "train:error", "Regex": "Train_error=(.*?);" }, { "Name": "validation:error", "Regex": "Valid_error=(.*?);" } ]
在上一示例中定义的 train:error
指标的正则表达式中,第一部分查找确切的文本“Train_error=”,表达式 (.*?);
捕获任意字符,直至第一个分号字符出现。在此表达式中,括号告诉正则表达式捕获括号内的内容,.
表示任何字符,*
表示零或更多个字符,?
表示仅捕获到遇到 ;
字符的第一个实例为止。
使用 SageMaker Python 定义指标 SDK
CloudWatch 通过在初始化Estimator
对象时指定指标名称和正则表达式列表作为metric_definitions
参数,定义要发送到的指标。例如,如果您想同时监控中的train:error
和validation:error
指标 CloudWatch,则Estimator
初始化将类似于以下示例:
import sagemaker from sagemaker.estimator import Estimator estimator = Estimator( image_uri="
your-own-image-uri
", role=sagemaker.get_execution_role(), sagemaker_session=sagemaker.Session(), instance_count=1
, instance_type='ml.c4.xlarge
', metric_definitions=[ {'Name': 'train:error', 'Regex': 'Train_error=(.*?);'}, {'Name': 'validation:error', 'Regex': 'Valid_error=(.*?);'} ] )
有关使用亚马逊 SageMaker Python SDK
使用 SageMaker控制台定义指标
如果您在创建训练作业时在 SageMaker 控制台中ECR选择 “您自己的算法容器” 选项作为算法来源,请在 “指标” 部分中添加指标定义。以下屏幕截图显示了其在添加示例指标名称和相应的正则表达式后的外观。
使用低级定义指标 SageMaker API
CloudWatch 通过在传递给CreateTrainingJob
操作的AlgorithmSpecification
输入参数的MetricDefinitions
字段中指定指标名称和正则表达式列表来定义要发送到的指标。例如,如果您想同时监控中的train:error
和validation:error
指标 CloudWatch,则AlgorithmSpecification
应类似于以下示例:
"AlgorithmSpecification": { "TrainingImage":
your-own-image-uri
, "TrainingInputMode": "File", "MetricDefinitions" : [ { "Name": "train:error", "Regex": "Train_error=(.*?);" }, { "Name": "validation:error", "Regex": "Valid_error=(.*?);" } ] }
有关使用低级别定义和运行训练作业的更多信息 SageMaker API,请参阅CreateTrainingJob
。