今天,我们很高兴地宣布推出 Amazon SageMaker Experiments,它是 Amazon SageMaker 的一项新功能,可让您组织、跟踪、比较和评估机器学习 (ML) 实验和模型版本。
ML 是一个高度迭代的过程。在单个项目的过程中,数据科学家和 ML 工程师通常会训练数千个不同的模型,以寻求最大的准确度。算法、数据集和训练参数(又称为超参数)的组合数量是无限的…,就是众所周知的大海捞针的挑战。
自动模型调整和 Amazon SageMaker Autopilot 之类的工具可帮助 ML 从业者自动探索大量组合,并快速放大高性能模型。然而,它们会进一步加大训练作业的爆炸式增长。随着时间的推移,这给 ML 团队带来了新的困难,因为要高效处理成千上万个作业几乎是不可能的:跟踪指标、按实验对作业分组、在同一个实验中或各实验间比较作业、查询过去的作业等。
当然,也可以通过构建、管理和扩展定制工具来解决此问题:然而,这样做会浪费实际 ML 工作所需的宝贵时间和资源。本着帮助客户专注于 ML 的精神,我们不能让这个问题得不到解决。
**隆重推出 Amazon SageMaker Experiments
**首先,我们来定义几个核心概念:
SageMaker Experiments 的目标是尽可能简单地创建实验、用试验填充实验,并在试验与实验间运行分析。为此,我们推出了包含日志记录和分析 API 的新 Python 开发工具包。
在 SageMaker 或 SageMaker Autopilot 上运行您的训练作业,您只需要将额外参数传递到 Estimator
中,以此定义此试验应附加到的实验的名称。所有的输入和输出都将自动记录。
当您运行您的训练作业后,SageMaker Experiments 开发工具包可让您以常见的 pandas DataFrame 格式加载实验和试验数据。Pandas 无疑是 ML 从业者的瑞士军刀,您将能够执行您所需的任何分析。通过使用 matplotlib 构建很酷的可视化向前进一步,您将能够顺利地驯服大量训练作业!
正如您期望的那样,SageMaker Experiments 完美集成在 Amazon SageMaker Studio 中。您可以运行复杂的查询,以快速找到您要找的过去的试验。您还可以对实时模型排行榜和指标图表进行可视化。
来个简短的演示如何?
**使用 Amazon SageMaker Experiments 记录训练信息
**我们从 PyTorch 脚本开始,使用一个简单的双层卷积神经网络 (CNN) 从 MNIST 数据集中分类图像。如果我想要在 SageMaker 上运行单个作业,我可以像下面这样使用 PyTorch estimator:
Python
estimator = PyTorch(
entry_point='mnist.py',
role=role,
sagemaker_session=sess
framework_version='1.1.0',
train_instance_count=1,
train_instance_type='ml.p3.2xlarge')
estimator.fit(inputs={'training': inputs})
复制代码
反过来,假设我想要运行同一个脚本的多个版本,只更改超参数(两个卷积层使用的卷积筛选器数量,又名隐藏通道数)中的一个来测量它对模型准确度的影响。当然,我们可以运行这些作业、获取训练日志、使用精心设计的文本筛选提取指标等。或者,我们可以使用 SageMaker Experiments!
而我只需要:
首先,我们来进行实验吧。
Python
from smexperiments.experiment import Experiment
mnist_experiment = Experiment.create(
experiment_name="mnist-hand-written-digits-classification",
description="Classification of mnist hand-written digits",
sagemaker_boto_client=sm)
复制代码
然后,我们来添加几个想要跟踪的项目,如数据集位置和我们对其应用的规范化值。
Python
from smexperiments.tracker import Tracker
with Tracker.create(display_name="Preprocessing", sagemaker_boto_client=sm) as tracker:
tracker.log_input(name="mnist-dataset", media_type="s3/uri", value=inputs)
tracker.log_parameters({
"normalization_mean": 0.1307,
"normalization_std": 0.3081,
})
复制代码
现在,我们来运行几个作业。我只是循环处理我想要尝试的几个不同值,为每个训练作业创建一个新试验并在其中添加跟踪器信息。
Python
for i, num_hidden_channel in enumerate([2, 5, 10, 20, 32]):
trial_name = f"cnn-training-job-{num_hidden_channel}-hidden-channels-{int(time.time())}"
cnn_trial = Trial.create(
trial_name=trial_name,
experiment_name=mnist_experiment.experiment_name,
sagemaker_boto_client=sm,
)
cnn_trial.add_trial_component(tracker.trial_component)
复制代码
然后,我配置估算器,从而传递我感兴趣的超参数的值,并让其他值保持原样。我还会传递正则表达式,以从训练日志中提取指标。所有这些都会推送存储在试验中:事实上,所有参数(传递或默认参数)都会是。
Python
estimator = PyTorch(
entry_point='mnist.py',
role=role,
sagemaker_session=sess,
framework_version='1.1.0',
train_instance_count=1,
train_instance_type='ml.p3.2xlarge',
hyperparameters={
'hidden_channels': num_hidden_channels
},
metric_definitions=[
{'Name':'train:loss', 'Regex':'Train Loss: (.*?);'},
{'Name':'test:loss', 'Regex':'Test Average loss: (.*?),'},
{'Name':'test:accuracy', 'Regex':'Test Accuracy: (.*?)%;'}
]
)
复制代码
最后,我运行训练作业,将该作业与实验和试验关联。
Python
cnn_training_job_name = "cnn-training-job-{}".format(int(time.time()))
estimator.fit(
inputs={'training': inputs},
job_name=cnn_training_job_name,
experiment_config={
"ExperimentName": mnist_experiment.experiment_name,
"TrialName": cnn_trial.trial_name,
"TrialComponentDisplayName": "Training",
}
)
# end of loop
复制代码
当所有作业完成时,我可以运行分析。接下来看看我们是怎么做的。
使用 Amazon SageMaker Experiments 进行分析
有关实验的所有信息可以轻松导出至 Pandas DataFrame
中。
Python
from sagemaker.analytics import ExperimentAnalytics
trial_component_analytics = ExperimentAnalytics(
sagemaker_session=sess,
experiment_name=mnist_experiment.experiment_name
)
analytic_table = trial_component_analytics.dataframe()
复制代码
如果我想要深入了解,我可以指定其他参数,例如:
Python
trial_component_analytics = ExperimentAnalytics(
sagemaker_session=sess,
experiment_name=mnist_experiment.experiment_name,
sort_by="metrics.test:accuracy.max",
sort_order="Descending",
metric_names=['test:accuracy'],
parameter_names=['hidden_channels', 'epochs', 'dropout', 'optimizer']
)
analytic_table = trial_component_analytics.dataframe()
复制代码
这将构建一个 DataFrame
,试验会在其中按测试准确度降序进行排序,并且只会显示每个试验的一些超参数。
Python
for col in analytic_table.columns:
print(col)
TrialComponentName
DisplayName
SourceArn
dropout
epochs
hidden_channels
optimizer
test:accuracy - Min
test:accuracy - Max
test:accuracy - Avg
test:accuracy - StdDev
test:accuracy - Last
test:accuracy - Count
复制代码
从现在开始,有些事情超乎你的想象。Pandas 是数据分析的瑞士军刀,您将能够以各种可能的方式比较试验和实验。
最后,得益于与 Amazon SageMaker Studio 的集成,您将能够使用预定义的小部件实时可视化所有这些信息。要了解有关 Amazon SageMaker Studio 的更多信息,请访问此博文。
现已推出!
我只是介绍了 Amazon SageMaker Experiments 能执行操作的皮毛,我相信它能帮助您处理您每天必须要处理的大量作业。
此服务现已在提供 Amazon SageMaker 的所有 AWS 商业区域中推出。
请试一试,并通过 Amazon SageMaker 的 AWS 论坛或您常用的 AWS 联系方式向我们发送反馈。
本文转载自 AWS 技术博客。
原文链接:https://amazonaws-china.com/cn/blogs/china/amazon-sagemaker-experiments-organize-track-and-compare-your-machine-learning-trainings/
评论