机器学习 | 数据大爆炸有大数据,ML 模型大爆炸怎么办?
2020/6/18 14:27:01
本文主要是介绍机器学习 | 数据大爆炸有大数据,ML 模型大爆炸怎么办?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
遥想当年,当企业需要从不同来源的多种系统中对海量数据进行分析时,大数据技术应运而生了,帮助企业更快速、灵活地从数据中获得宝贵的见解。而机器学习技术发展到今天,也产生了类似的需求。
实践过就会知道,机器学习(ML)是一种高度迭代的过程。在单个项目的过程中,数据科学家和 ML 工程师通常会训练数千个不同模型,以寻求最大准确度。而在这过程中,所涉及到的算法、数据集和训练参数(又称为超参数)的组合数量是无限的……大家就如同大海捞针那样需要从中找出最优解。
虽然业界已经提出了不少解决方法,例如自动模型调整和 Amazon SageMaker Autopilot 之类的工具可帮助 ML 从业者自动探索大量组合,并快速放大高性能模型。然而它们会进一步加大训练作业的爆炸式增长。随着时间推移,这给 ML 团队带来了新困难,因为要高效处理成千上万个作业几乎是不可能的:跟踪指标、按实验对作业分组、在同一个实验中或各实验间比较作业、查询过去的作业等。
当然,也可以通过构建、管理和扩展定制工具来解决此问题。然而这样做会浪费实际 ML 工作所需的宝贵时间和资源。本着帮助客户专注于 ML 的精神,我们需要另辟蹊径来解决这个问题。
隆重推荐:Amazon SageMaker Experiments
近日,Amazon SageMaker Experiments 已经正式发布!它是 Amazon SageMaker 的一项新功能,可帮助用户组织、跟踪、比较和评估机器学习实验和模型版本。
首先我们来定义几个核心概念:
- 试验是单个训练作业中所涉及的训练步骤集合。训练步骤通常包括预处理、训练、模型评估等。试验还包含丰富的输入(例如,算法、参数、数据集)和输出(例如,模型、检查点、指标)元数据。
- 实验就是一系列的试验,即一组相关训练作业。
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:
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!
此时只需要:
- 设置实验;
- 使用跟踪器记录实验元数据;
- 为想运行的每个训练作业创建试验;
- 运行每个训练作业,以传递实验名称和试验名称的参数。
首先,我们来进行实验吧:
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)
然后添加几个想要跟踪的项目,如数据集位置和我们对其应用的规范化值:
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, })
现在来运行几个作业。此处只是循环处理想要尝试的几个不同值,为每个训练作业创建一个新试验并在其中添加跟踪器信息:
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)
然后配置估算器,从而传递感兴趣的超参数值,并让其他值保持原样。这里还会传递正则表达式,以从训练日志中提取指标。所有这些都会推送存储在试验中:事实上,所有参数(传递或默认参数)都是如此。
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: (.*?)%;'} ] )
最后运行训练作业,将该作业与实验和试验关联:
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 中。
from sagemaker.analytics import ExperimentAnalytics trial_component_analytics = ExperimentAnalytics( sagemaker_session=sess, experiment_name=mnist_experiment.experiment_name ) analytic_table = trial_component_analytics.dataframe()
如果想要深入了解,可以指定其他参数,例如:
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,试验会在其中按测试准确度降序进行排序,并且只会显示每个试验的一些超参数。
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 商业区域中推出,欢迎体验!
这篇关于机器学习 | 数据大爆炸有大数据,ML 模型大爆炸怎么办?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28揭秘 Fluss 架构组件
- 2024-12-27阿里云部署方案学习入门:新手必读指南
- 2024-12-27阿里云RDS学习入门:新手必读指南
- 2024-12-27初学者指南:轻松掌握阿里云部署
- 2024-12-27阿里云RDS入门指南:轻松搭建和管理数据库
- 2024-12-27Sentinel监控流量:新手入门教程
- 2024-12-27阿里云部署方案学习:新手入门教程
- 2024-12-27阿里云RDS学习:新手入门指南
- 2024-12-24Hbase项目实战:新手入门与初级技巧
- 2024-12-24Hbase入门教程:轻松掌握大数据存储技术