写点什么

Amazon SageMaker Debugger 推出模型分析功能啦 | 新服务上线

发布于: 2021 年 04 月 05 日
Amazon SageMaker Debugger 推出模型分析功能啦 | 新服务上线

今天,我们非常高兴地宣布

Amazon SageMaker Debugger

现在可以分析机器学习模型啦!

此后可以更轻松地识别

和修复硬件资源使用量导致的训练问题


尽管机器学习 (ML) 在各种业务问题上的表现都很出色,但它仍然是一个有点神秘的话题。成功不仅需要懂科学、懂技法(也有人说是魔法),有时候还要些运气。特别是模型训练,这是一个非常复杂的过程,其结果取决于数据集、算法、算法参数以及模型训练所用基础设施的质量。


随着机器学习模型变得越来越大、越来越复杂(Hey!说你呢,深度学习),训练这些模型所需的基础设施量也成为一个日益严重的问题。例如,在单个 p3dn.24xlarge 实例上利用公开的 COCO 数据集来训练 BERT 模型,需要六个多小时,尽管它配备了八个 NVIDIA V100 GPU。自动驾驶汽车公司之类的客户要处理更大的数据集,并且要进行长达数日的对象检测模型训练。


如果一项复杂的训练作业需要这样长的时间,将会有高的几率会出现问题并以失败收场,不仅浪费时间和资金,同时也会令人深感挫折和沮丧。在开展调查、分析根本原因、尝试修复问题,然后再次运行训练作业时,重要的工作需要先搁置一旁。很多时候,您必须迭代很多次才能解决问题。


由于所使用的机器学习框架(有时是版本)的不同,您也许能够或者无法使用现有的框架特定工具。很多时候,您必须自行构建和维护定制的工具。即使是对于经验丰富的老手,这也是非常繁重的工作。而对于像我这样的普通开发者,这简直就是一座大山。

Amazon SageMaker Debugger 推出模型分析功能

Amazon SageMaker Debugger 在去年的亚马逊 re:Invent 上推出,是 Amazon SageMaker 的一项功能,可以自动识别机器学习训练作业中正在出现的复杂问题,例如损失不减少、分解梯度等。


现在,Amazon SageMaker Debugger 还可以监控硬件资源使用量并支持对训练作业进行分析,以帮助您将资源使用量与训练脚本中的 ML 运算相关联,从而可以更快地解决性能问题和迭代完成训练作业。


Chaim Rand 是英特尔旗下自动驾驶和驾驶人辅助系统开发公司 Mobileye 的一名机器学习算法开发人员,他有幸使用了这些新的分析功能,下面是他的反馈:


我们在 Mobileye 开发的很多辅助驾驶和自动驾驶汽车技术,都依赖通过训练深度神经网络模型来探测各种各样的道路构件,例如车辆、行人、减速带、路标等等。通常,这些模型需要利用极大的数据集在许多计算机上进行训练,训练时间长达数天。Mobileye 迫切需要一套具有高级性能分析功能的工具,用于分析网络、CPU 和 GPU 资源中的数据流,以及找出性能问题。Amazon SageMaker Debugger 的分析功能恰好满足了这一要求,让性能分析不再是少数专家的专属领地,并让我们的算法开发人员能够最大限度地提高训练资源利用率、加速模型融合并降低成本。


新推出的 Amazon SageMaker Debugger 的新分析功能支持 TensorFlow 2.x 和 PyTorch 1.x。您只需在 Amazon SageMaker 中使用相应的内置框架进行训练即可。此新功能原生支持分布式训练。


了解 Amazon SageMaker Debugger


您只需在 Amazon SageMaker 估算器中设置一个参数,也无需对训练代码进行任何更改,即可开始采集各种基础设施和模型指标,例如:

● CPU 和 GPU

● RAM 和 GPU RAM

● 网络 I/O

● 存储 I/O(本地存储和管道模式)

● 数据加载时间

● ML 运算符在 CPU 和 GPU 上运行所花的时间

● Horovod 的分布式训练指标


此外,您还可以直观地显示不同阶段(例如预处理、训练循环和后处理)所花费的时间。如果需要,您可以深入了解每个训练纪元,甚至可以深入了解训练脚本中的每个函数。


默认情况下,系统会每 500 毫秒收集一次指标,您还可以将此值设置为 100 毫秒、200 毫秒、1 秒、5 秒和 1 分钟。需要进行更精细的分析,您还可以在训练代码中显式启用和禁用分析,从而仅捕获特定部件的指标。


在训练作业运行期间,您可以在我们基于 Web 的机器学习集成开发环境 Amazon SageMaker Studio 中轻松可视化显示这些指标。正如大家期望的那样,所有数据也可以通过 Amazon SageMaker Debugger API 提供,且您可以检索它来构建自己的图表。

分析图像分类模型训练

Amazon SageMaker 处理会与训练作业并行运行,分析捕获的数据、构建图表并生成报告以提供有关潜在问题的见解。您不需要执行任何操作,因为此分析在完全托管的基础设施中的内置容器内运行。


下面我们使用 PyTorch 运行一个演示,对利用 CIFAR-10 数据集进行的 ResNet-50 图像分类模型训练进行分析。


使用 Amazon SageMaker Debugger 分析训练作业只需一个额外的 SageMaker 估算器参数,即可在训练作业中启用分析,无需更改任何训练代码行。默认情况下,Amazon SageMaker Debugger 会使用一组内置的分析规则来寻找训练期间可能会出现的不理想情况,例如 GPU 利用率低。除报告这些情况外,Amazon SageMaker Debugger 还会触发 CloudWatch Events 中的事件。


例如,我可以使用它们来运行一个会自动停止低效训练作业的 Amazon Lambda 函数。

首先,我会创建一个可每 500 毫秒捕获一次数据的分析配置。如果我只想分析作业的某个特定部分,我可以选择训练步骤间隔。(滑动即可查阅完整代码)


import sagemakerfrom sagemaker.profiler import ProfilerConfig profiler_config = ProfilerConfig(profiling_interval_millis=500)
复制代码


然后,我将此配置传递到我的 PyTorch 估算器中,以在配备有 4 个 NVIDIA V100 GPU 的 ml.p3.8xlarge 实例上进行训练。


from sagemaker.pytorch import PyTorchestimator = PyTorch(    role=sagemaker.get_execution_role(),    instance_count=1,    instance_type='ml.p3.8xlarge',    entry_point='train_pt.py',    framework_version='1.5.0',    hyperparameters={"batch_size":512, "epochs":10},    profiler_config=profiler_config)
复制代码


然后,我像往常一样启动训练作业。作业运行后,即会捕获分析数据并将数据存储在 Amazon S3 中。


path = estimator.latest_job_profiler_artifacts_path()print(path)s3://sagemaker-us-east-2-123456789012/pt-train-pt-2020-11-17-17-38-43-231/profiler-output
复制代码


我可以使用 Amazon SageMaker 开发工具包来检索并对分析事件进行计数。


from smdebug.profiler.system_metrics_reader import S3SystemMetricsReadersystem_metrics_reader = S3SystemMetricsReader(path)system_metrics_reader.refresh_event_file_list()last_timestamp = system_metrics_reader.get_timestamp_of_latest_available_file()events = system_metrics_reader.get_events(0, last_timestamp)print("Found", len(events), "recorded system metric events.Latest recorded event:", last_timestamp)Found 411853 recorded system metric events. Latest recorded event: 1605620280000000
复制代码


当然,我可以解析和分析这些分析事件,构建自己的图表等。相反,让我们在 Amazon SageMaker Studio 中近乎实时地可视化显示它们。


当我的训练作业仍在运行时,我在 Amazon SageMaker Studio 中找到该作业并右键点击“Open Debugger for insights”(打开 Debugger 以获取见解)。


这将打开一个新选项卡,我选择“Nodes”(节点)面板,在该面板中,我可以看到训练作业中每个实例的详细统计信息。那么,我的训练作业表现如何?请点击下面的图片查看大图。


显然,此作业运行的不太顺利。GPU 利用率和 GPU 内存利用率停留在 10% 左右的水平,令人绝望。我的多 GPU 实例肯定远远没有达到应有的利用水平。也许是因为 CPU 跟不上,导致 GPU 接收数据的速度不够快?让我们来看看系统利用率热图。


CPU 一直在打瞌睡,利用率几乎没有超过 20%,这个实例肯定不够忙。我可以做些什么来解决这个问题呢?


切换到“Overview”(概览)面板,我看到一些内置的分析规则已被触发。


LowGPUUtilization 证实了我在上图中看到的情况。BatchSize 非常有趣,因为它建议增加在 CPU 上运行的训练脚本发送到 GPU 中的最小批次大小。这肯定有利于充实 GPU 内存、利用更多的 GPU 内核、加快我的训练作业并提高基础设施使用率。


现在,我应该决定停止效率低下的训练作业,并以更大的批次大小重新启动作业。在这里,我将让它完成运行,以向您展示与您的训练作业并行运行的 SageMaker 处理作业所生成的报告。


训练作业完成后,我可以在“Overview”(概览)面板中查看摘要。


单击“Download report”(下载报告)按钮,我会得到一份非常详细的报告,其中包括训练作业不同阶段之间的比率或正推与逆推之比等其他指标。


我还可以看到最耗时的 CPU 和 GPU 运算相关信息,这对于代码的优化十分重要。例如,下图告诉我,训练作业中最耗时的 GPU 运算是逆推卷积运算。


报告还包含更多丰富的内容(规则摘要、训练循环分析等)。此外,您还可以使用配套笔记本来了解图表是如何构建的,以及如何根据自己的需求定制图表。


这些只是 Amazon SageMaker Debugger 众多功能的一些皮毛,您可以利用它的更多功能来轻松采集、分析和可视化显示模型分析信息。您可以立即在提供 Amazon SageMaker 服务的所有区域开始使用此功能。任何用于运行内置分析规则的计算都不会产生费用。


Github 上提供了示例笔记本,欢迎试用并向我们反馈意见。我们期待您的反馈,您可以通过惯常使用的亚马逊云科技支持联系人向我们提供反馈,也可通过有关 Amazon SageMaker 的亚马逊云科技论坛反馈。


原文链接:Amazon SageMaker Debugger 推出模型分析功能啦 | 新服务上线

用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
Amazon SageMaker Debugger 推出模型分析功能啦 | 新服务上线