Amazon SageMaker Debugger 最佳实践 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SageMaker Debugger 最佳实践

使用 Debugger 运行训练作业时,请遵循以下指南。

选择机器学习框架

您可以选择机器学习框架并使用 SageMaker 预构建的训练容器或自己的容器。使用 Debugger 检测训练和性能问题,并在 SageMaker 中分析训练作业的训练进度。SageMaker 为您提供了多种选项,以便使用为多种机器学习框架环境准备的预构建容器,从而在 Amazon EC2 上训练模型。任何训练作业都可以调整以运行在 Amazon Deep Learning Containers、SageMaker 训练容器和自定义容器中。

使用 Studio Debugger Insights 控制面板

使用 Studio Debugger Insights 控制面板,您可以控制自己的训练作业。使用 Studio Debugger 控制面板可以控制和优化 Amazon EC2 实例上的模型性能。对于在 Amazon EC2 实例上运行的任何 SageMaker 训练作业,Debugger 会监控资源利用率和基本模型输出数据(损失和准确性值)。通过 Studio Debugger 控制面板,深入了解您的训练作业并提高模型训练性能。要了解更多信息,请参阅Amazon SageMaker Studio 实验中的 Amazon SageMaker Debugger UI

下载 Debugger 报告并获取更多见解

您可以在 Debugger 报告中查看汇总结果并获得见解。Debugger 将从内置规则分析中收集的训练和分析结果,汇总到每个训练作业的报告中。您可以通过 Debugger 报告查找有关训练结果的更多详细信息。要了解更多信息,请参阅SageMaker Debugger 交互式报告

从训练作业中捕获数据并将数据保存到 Amazon S3

您可以使用 Debugger 钩子来保存输出张量。在选择适合您训练脚本的容器和框架后,使用 Debugger 钩子配置要保存的张量以及保存张量的目录,例如 Amazon S3 存储桶。Debugger 钩子可以帮助您构建配置并将其保留在您的账户中,以便在后续的分析中使用,在这些分析中,它可以安全地用于最注重隐私的应用程序。要了解更多信息,请参阅配置 SageMaker Debugger 以保存张量

使用 Debugger 内置规则集合分析数据

您可以使用 Debugger 内置规则,并行检查训练作业的张量。为了分析训练性能数据,Debugger 提供了内置规则来监视异常的训练过程行为。例如,在训练过程受到系统瓶颈问题或训练问题(例如,梯度消失、张量爆炸、过度拟合或过度训练)的影响时,Debugger 规则将检测到这些问题。如有必要,您还可以使用自己的标准来定义训练问题,通过创建规则来构建自定义规则。要了解有关 Debugger 规则的更多信息,请参阅配置 Debugger 内置规则以了解有关使用 Amazon SageMaker Python SDK 的详细说明。有关 Debugger 内置规则的完整列表,请参阅 Debugger 内置规则列表。如果您要创建自定义规则,请参阅创建 Debugger 自定义规则用于训练作业分析

根据内置规则状态采取操作

您可以将 Debugger 与 Amazon CloudWatch Events 和 Amazon Lambda 结合使用。您可以根据规则状态自动执行操作,例如提前停止训练作业以及设置通过电子邮件或短信发送通知。当 Debugger 规则检测到问题并触发 "IssuesFound" 评估状态时,CloudWatch Event 会检测规则状态更改并调用 Lambda 函数来执行操作。要针对训练问题配置自动化操作,请参阅使用 Amazon CloudWatch 和 Amazon Lambda 创建对规则的操作

使用 SMDebug 客户端库深入了解数据

您可以使用 SMDebug 工具访问和分析 Debugger 收集的训练数据。TrainingJobcreate_trial 类加载 Debugger 保存的指标和张量。这些类提供了扩展的类方法,用于实时分析数据或在训练结束后分析数据。SMDebug 库还提供可视化工具:合并框架指标的时间轴以汇总不同的分析、折线图和热图,以便跟踪系统利用率,以及汇总直方图来查找步骤持续时间异常值。要了解有关 SMDebug 库工具的更多信息,请参阅使用 Debugger Python 客户端库分析数据

监控和分析训练作业指标

Amazon CloudWatch 支持高分辨率的自定义指标,其最佳分辨率为 1 秒钟。但是,分辨率越高,CloudWatch 指标的生命周期就越短。对于频率为 1 秒的分辨率,CloudWatch 指标可用期为 3 小时。有关 CloudWatch 指标的分辨率和生命周期的更多信息,请参阅 Amazon CloudWatch API 参考中的 GetMetricStatistics

如果您想以更精细的分辨率来描述您的训练作业,精度低至 100 毫秒(0.1 秒),并将训练指标无限期存储在 Amazon S3 中以便随时进行自定义分析,请考虑使用 Amazon SageMaker Debugger。SageMaker Debugger 内置了一些规则,可自动检测常见的训练问题;它可以检测硬件资源利用率问题(例如 CPU、GPU 和 I/O 瓶颈)以及非收敛模型问题(例如过度拟合、梯度消失和张量爆炸等)。

SageMaker Debugger 还通过 Studio 及其分析报告提供可视化效果。与 CloudWatch 指标不同(该指标累积 CPU 和 GPU 核心的资源利用率,并在多个实例中取平均值),调试器跟踪每个核心的利用率。这使您能够在纵向扩展到更大的计算群集时,识别硬件资源使用不平衡的情况。要探索 Debugger 可视化效果,请参阅 SageMaker Debugger 见解控制面板演练Debugger 分析报告演练以及使用 SMDebug 客户端库分析数据

监控系统利用率和检测瓶颈

借助 Amazon SageMaker Debugger 监控,您可以衡量 Amazon EC2 实例的硬件系统资源利用率。在使用 SageMaker 框架估算器(TensorFlow、PyTorch 和 MXNet)和通用 SageMaker 估算器(SageMaker 内置算法和您的自定义容器)构造的任意 SageMaker 训练作业上,均可以使用监控功能。Debugger 内置的监控规则用于检测系统瓶颈问题,并在检测到瓶颈问题时通知您。

要了解如何启用调试器系统监控,请依次参阅使用 Amazon SageMaker Debugger Python 模块为估算器配置参数用于基本分析配置设置以对系统资源利用率进行基本分析

有关可用的内置监控规则的完整列表,请参阅Debugger 内置规则,用于分析硬件系统资源利用率(系统指标)

分析框架操作

借助 Amazon SageMaker Debugger 分析,您可以对深度学习框架操作进行分析。您可以对使用 SageMaker TensorFlow 训练容器、SageMaker PyTorch 框架容器和自己的训练容器训练的模型进行分析。使用 Debugger 的分析功能,您可以深入了解为执行训练作业而执行的 Python 运算符和函数。Debugger 支持详细的分析、Python 分析、数据加载器分析和 Horovod 分布式训练分析。您可以合并分析的时间轴,以便与系统瓶颈关联起来。Debugger 内置分析规则用于监视与框架操作相关的问题,包括训练开始前下载数据导致的训练初始化时间过长,以及训练循环中的步骤持续时间异常值。

要了解如何配置 Debugger 用于框架分析,请依次参阅使用 Amazon SageMaker Debugger Python 模块为估算器配置参数用于基本分析配置框架分析

有关可用内置分析规则的完整列表,请参阅 用于分析框架指标的 Debugger 内置规则

调试模型输出张量

对于使用 Amazon Deep Learning Containers 和 SageMaker 训练容器的深度学习框架,可以使用调试功能。对于完全支持的框架版本(请参阅支持的框架和算法中的版本),Debugger 会自动注册钩子以收集输出张量,并且您可以直接运行训练脚本。对于带有星号的版本,您需要手动注册钩子来收集张量。Debugger 提供了采用通用名称的预配置张量集合,您可以在不同的框架中使用这些张量。如果您想自定义输出张量配置,还可以使用 CollectionConfig 和 DebuggerHookConfig API 操作以及 Amazon SageMaker Python SDK 来配置自己的张量集合。Debugger 内置调试规则可分析输出张量,并识别阻碍模型最小化损失函数的模型优化问题。例如,规则可以确定过度拟合、过度训练、损失不减少、张量爆炸和渐变消失等问题。

要了解如何配置 Debugger 来调试输出张量,请依次参阅步骤 2:使用 SageMaker Python SDK 启动和调试训练作业配置 SageMaker Debugger 以保存张量

有关可用内置调试规则的完整列表,请参阅用于调试模型训练数据(输出张量)的 Debugger 内置规则