Amazon SageMaker Experiments – 组织、跟踪和比较机器学习训练

2019 年 12 月 11 日

Amazon SageMaker Experiments – 组织、跟踪和比较机器学习训练

今天,我们很高兴地宣布推出 Amazon SageMaker Experiments,它是 Amazon SageMaker 的一项新功能,可让您组织、跟踪、比较和评估机器学习 (ML) 实验和模型版本。


ML 是一个高度迭代的过程。在单个项目的过程中,数据科学家和 ML 工程师通常会训练数千个不同的模型,以寻求最大的准确度。算法、数据集和训练参数(又称为超参数)的组合数量是无限的…,就是众所周知的大海捞针的挑战。


自动模型调整Amazon SageMaker Autopilot 之类的工具可帮助 ML 从业者自动探索大量组合,并快速放大高性能模型。然而,它们会进一步加大训练作业的爆炸式增长。随着时间的推移,这给 ML 团队带来了新的困难,因为要高效处理成千上万个作业几乎是不可能的:跟踪指标、按实验对作业分组、在同一个实验中或各实验间比较作业、查询过去的作业等。


当然,也可以通过构建、管理和扩展定制工具来解决此问题:然而,这样做会浪费实际 ML 工作所需的宝贵时间和资源。本着帮助客户专注于 ML 的精神,我们不能让这个问题得不到解决。


**隆重推出 Amazon SageMaker Experiments


**首先,我们来定义几个核心概念:


  • 试验是单个训练作业中所涉及的训练步骤集合。训练步骤通常包括预处理、训练、模型评估等。试验还包含丰富的输入(例如,算法、参数、数据集)和输出(例如,模型、检查点、指标)元数据。

  • 实验就是一系列的试验,即一组相关训练作业。


SageMaker Experiments 的目标是尽可能简单地创建实验、用试验填充实验,并在试验与实验间运行分析。为此,我们推出了包含日志记录和分析 API 的新 Python 开发工具包。


SageMakerSageMaker 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 Experimentmnist_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 Trackerwith 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 ExperimentAnalyticstrial_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) 
TrialComponentNameDisplayNameSourceArndropoutepochshidden_channelsoptimizertest:accuracy - Mintest:accuracy - Maxtest:accuracy - Avgtest:accuracy - StdDevtest:accuracy - Lasttest: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/


2019 年 12 月 11 日 15:3480

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

测试驱动开发英制单位转换

escray

学习 CSD 认证实战营

写文章的目的是什么?

小天同学

思考 写作 感悟 表达

系统的安全性设计

Janenesome

读书笔记 程序员 架构 安全

创新真的可遇不可求么?

Yanel 说敏捷产品

产品经理 产品设计 产品开发 产品推荐

人生需要做减法:少即是多

我心依然

程序员 人生 减法 少即是多 less is more

权限系统设计的一种解法

双城笔录

产品 总结 产品设计

《通往财富自由之路》——day1

轩呀

得到

企业经营 "造物" "造人" "造钱"三阶段

Yanel 说敏捷产品

敏捷 敏捷开发

JAVA小抄-001-Retrofit初级使用

NoNoGirl

retrofit okhttp

如何度量敏捷开发团队

Yanel 说敏捷产品

敏捷 敏捷开发

从"远程工作"到"分布式团队"

Yanel 说敏捷产品

项目管理 敏捷 敏捷开发

变化在加速,你的机会和挑战在哪里?

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

粗糙的草稿编辑成文章的五个步骤

七镜花园-董一凡

写作

[MySQL-InnoDB] Buffer pool 并发控制

ba0tiao

MySQL 数据库 innodb

DIY 可用性测试

Yanel 说敏捷产品

产品 产品经理 产品设计 测试 产品推荐

流量的战场,如何做裂变?

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

谨防常见的一些数据误区

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

做一个"靠谱"的敏捷教练

Yanel 说敏捷产品

敏捷 敏捷开发

道德和正确的认知

沈传宁

信息安全 计算机道德

不安全的“安全密码”

沈传宁

信息安全 口令安全

吾谈教育

ItsFitz

Mac效率配置指南

Winann

macos 效率 效率工具 Mac

一个英语渣的自救手册

寇云

学习 效率工具 程序员人生 工作效率

一杯茶的时间,上手 Docker

图雀社区

node.js react.js Docker

你懂什么是"结对测试"么?

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

"深刻创新"八步法

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

学会用"云—雨—伞"引导敏捷实践

Yanel 说敏捷产品

敏捷 敏捷开发

Netty 源码解析(七): NioEventLoop 工作流程

猿灯塔

Panzoid:一款超好用的片头制作工具

千锤百炼锅

学习 产品 效率工具 工具 产品推荐

去中心化网络,不止区块链(一)

石君

区块链 去中心 去中心化网络 DHT

你必须了解的产品经济学

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

Amazon SageMaker Experiments – 组织、跟踪和比较机器学习训练-InfoQ