调试程序 架构和最佳实践 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

调试程序 架构和最佳实践

本主题将指导您大致了解Amazon SageMaker 调试程序工作流程和最佳实践。

Amazon SageMaker 调试程序 架构

调试程序 支持性能优化的分析功能,确定模型性能问题,并提供建议以大规模优化硬件资源利用率。 调试程序的模型优化调试功能涉及分析训练进度,监控问题,同时使用优化算法(例如梯度下降及其变化)最大程度地减少损失函数。下图显示了 的架构SageMaker调试程序。带有粗体边界线的数据块是 调试程序 用来分析训练作业的。


                    Amazon SageMaker 调试程序 工作原理概述。

调试程序 将来自训练作业的以下数据存储在受保护 Amazon S3 存储桶中:

  • 系统指标 – 硬件资源利用率数据,如 CPU、GPU、CPU 和 GPU 内存、网络和数据输入/输出 (I/O) 指标。

  • 框架指标 – 模型训练信息 跟踪每次调用或采样的每个操作,例如,前向传递中的卷积操作、向后传递中的批量标准化操作、步骤之间的数据加载器过程以及计算和更新损失函数的梯度下降算法操作。

  • 输出张量 在训练机器学习和深度学习模型的反向传播和优化过程中持续更新的模型参数的–集合。它包括标量值(准确度和损失)和矩阵(权重、梯度、输入层和输出层)。

    注意

    默认情况下, 调试程序 监控和调试SageMaker训练作业,而不在调试程序评估程序中配置任何 SageMaker特定的参数。 每 500 毫秒调试程序收集系统指标,每 500 个步骤收集基本输出张量(标量输出,如损失和准确率)。它还运行 ProfilerReport 规则来分析系统指标并聚合 Studio 调试程序 见解控制面板和分析报告。 将输出数据调试程序保存在受保护S3 存储桶中。

调试程序 内置规则在处理容器上运行,这些容器设计为通过处理在 S3 存储桶中收集的训练数据来评估机器学习模型(请参阅处理数据和评估模型)。内置规则完全由 管理调试程序。您还可以创建自己的针对模型的自定义规则,以监控您希望监控的任何问题。

请参阅以下主题以了解使用 提高模型性能的最佳实践SageMaker调试程序。

选择Machine Learning框架

您可以选择机器学习框架并使用SageMaker预构建的训练容器或您自己的容器。使用 调试程序 检测训练和性能问题,并分析 中训练作业的训练进度SageMaker。 SageMaker 为您提供了使用针对多种机器学习框架环境准备的预构建容器的选项,以便在 Amazon EC2 上训练您的模型。任何训练作业都可以调整为在 AWS Deep Learning ContainersSageMaker训练容器和自定义容器中运行。要了解更多信息,请参阅使用 调试程序 Python 开发工具包配置Amazon SageMaker将 调试程序 与自定义训练容器结合使用

使用 Studio 调试程序 Insights 控制面板

借助 Studio 调试程序 见解控制面板,您可以控制您的训练作业。使用 Studio 调试程序 控制面板可保持 Amazon EC2 实例上的模型性能处于控制和优化状态。对于在 Amazon EC2 实例上运行的任何SageMaker训练作业, 调试程序 监控资源利用率和基本模型输出数据(损失和准确性值)。通过 Studio 调试程序 控制面板,您可以深入了解您的训练作业并提高模型训练性能。要了解更多信息,请参阅“SageMaker 调试程序 Studio 上的”。

下载调试程序报告并获得更多见解

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

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

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

使用调试程序一组内置规则分析数据

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

根据内置规则状态执行操作

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

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

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

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

利用 Amazon SageMaker 调试程序 监控,您可以衡量Amazon EC2实例的硬件系统资源利用率。监控可用于使用SageMaker框架评估程序TensorFlow、PyTorch 和 MXNet和通用SageMaker评估程序(SageMaker 内置算法和您自己的自定义容器)构建的任何SageMaker训练作业调试程序。内置规则用于监控检测系统瓶颈问题,并在检测到瓶颈问题时通知您。

要了解如何启用调试程序系统监控,请参阅使用 调试程序 Python 开发工具包配置Amazon SageMaker,然后。 配置 调试程序 监控硬件系统资源利用率

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

分析框架操作

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

要了解如何配置 调试程序 进行框架分析,请参阅使用 调试程序 Python 开发工具包配置Amazon SageMaker,然后 配置 调试程序 框架分析

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

调试模型参数

调试可用于使用 AWS Deep Learning Containers 和SageMaker训练容器的深度学习框架。有关完全支持的框架版本(请参阅中的版本支持的框架和算法), 调试程序 自动注册挂钩以收集输出张量,并且您可以直接运行训练脚本。对于具有一个星号符号的版本,您需要手动注册挂钩以收集张量。 为预配置的张量集合调试程序提供通用名称,您可以在不同的框架中使用这些名称。如果要自定义输出张量配置,还可以使用 CollectionConfig 和 DebuggerHookConfig API 操作和 Amazon SageMaker Python SDK 配置您自己的张量集合。 用于调试调试程序的内置规则可分析输出张量并识别阻止模型最大程度地减少损失函数的模型优化问题。例如,规则标识过度拟合、过度训练、损失不减小、爆炸张量和梯度消失。

要了解如何配置 调试程序 以调试输出张量,请参阅 使用 调试程序 Python 开发工具包配置Amazon SageMaker ,然后 配置 调试程序 挂钩以保存张量

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