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

如何通过Amazon SageMaker SDK获取训练指标历史数据?

在Amazon SageMaker中获取内置训练任务的指标历史数值

SageMaker内置训练任务的指标历史数据默认存储在CloudWatch中,你可以通过boto3调用CloudWatch API提取这些数据,实现类似Keras绘制指标曲线的功能,具体步骤如下:

1. 获取训练任务名称

从已创建的estimator中提取最新训练任务的名称:

training_job_name = estimator.latest_training_job.name

2. 初始化CloudWatch客户端

确保客户端区域与训练任务所在区域一致:

import boto3
cloudwatch = boto3.client('cloudwatch', region_name='us-east-1')  # 替换为你的训练任务区域

3. 查看可用指标(可选)

若不确定具体指标名称,可先列出该训练任务的所有指标:

metrics = cloudwatch.list_metrics(
    Namespace='aws/sagemaker/TrainingJobs',
    Dimensions=[{'Name': 'TrainingJobName', 'Value': training_job_name}]
)

# 打印所有可用指标
for metric in metrics['Metrics']:
    print(metric['MetricName'])

4. 提取指标历史数据

调用get_metric_statistics方法获取指定指标的历史数据,参数需根据指标类型调整:

import pandas as pd

response = cloudwatch.get_metric_statistics(
    Namespace='aws/sagemaker/TrainingJobs',
    MetricName='validation:accuracy',  # 替换为你需要的指标名
    Dimensions=[{'Name': 'TrainingJobName', 'Value': training_job_name}],
    StartTime=estimator.latest_training_job.start_time,
    EndTime=estimator.latest_training_job.end_time,
    Period=60,  # 根据训练日志输出频率调整,比如10、30、60等
    Statistics=['Average'],  # 可选Sum/Maximum/Minimum,根据指标类型选择
    Unit='Percent'  # 非百分比指标可省略该参数
)

# 转换为DataFrame并按时间排序
metrics_df = pd.DataFrame(response['Datapoints'])
metrics_df = metrics_df.sort_values('Timestamp')

5. 绘制指标曲线

用matplotlib绘制历史指标曲线:

import matplotlib.pyplot as plt

plt.plot(metrics_df['Timestamp'], metrics_df['Average'])
plt.xlabel('训练时间')
plt.ylabel('验证准确率')
plt.title(f'训练任务 {training_job_name} - 验证准确率变化')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

注意事项

  • 指标名称需与训练任务输出的日志一致,SageMaker内置算法(如XGBoost、TensorFlow)会自动输出标准指标,例如XGBoost的validation:error、TensorFlow的train:loss等。
  • Period参数需匹配训练日志的指标输出频率,若设置过大可能导致数据聚合,丢失细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:09:57