使用 Amazon SageMaker Profiler 来分析 Amazon 计算资源上的活动 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon SageMaker Profiler 来分析 Amazon 计算资源上的活动

Amazon SageMaker Profiler 目前处于预览版,在支持 Amazon Web Services 区域中免费提供。Amazon SageMaker Profiler 的正式版本(如果有)可能包含与预览版中提供的功能和定价不同的功能和价格。

Amazon SageMaker Profiler SageMaker 是 Amazon 的一项功能,它提供了在训练深度学习模型期间配置的 Amazon 计算资源的详细视图。 SageMaker它侧重于分析 CPU 和 GPU 使用率、内核在 GPU 上运行、在 CPU 上启动内核、同步操作、CPU 和 GPU 之间的内存操作、内核启动和相应运行之间的延迟,以及 CPU 和 GPU 之间的数据传输。 SageMaker Profiler 还提供可视化配置文件的用户界面 (UI)、已分析事件的统计摘要以及用于跟踪和理解 GPU 和 CPU 之间事件的时间关系的训练作业时间表。

注意

SageMaker Profiler 支持 PyTorch TensorFlow 并已在 Dee Amazon p Learning Containers 中提供。 SageMaker要了解更多信息,请参阅支持的框架映像和实例类型 Amazon Web Services 区域

对于数据科学家

在大型计算集群上训练深度学习模型通常会遇到计算优化问题,例如瓶颈、内核启动延迟、内存限制和资源利用率低。

要确定此类计算性能问题,您需要更深入地分析计算资源,了解哪些内核会带来延迟,哪些操作会导致瓶颈。数据科学家可以从使用 SageMaker Profiler 用户界面可视化训练作业的详细配置文件中受益。UI 提供了一个带摘要图表的控制面板和一个时间线界面,以便跟踪计算资源上的每个事件。数据科学家还可以使用 P SageMaker rofiler Python 模块添加自定义注释,以跟踪训练作业的某些部分。

对于管理员

如果您是 Amazon 账户或域的管理员,则可以通过 SageMaker 控制台或SageMaker 网域中的 Profiler 登录页面管理 Profiler 应用程序用户。 SageMaker只要获得授予的权限,每个域用户都可以访问他们自己的 Profiler 应用程序。作为 SageMaker 域管理员和域用户,您可以根据自己的权限级别创建和删除 Profiler 应用程序。

支持的框架映像和实例类型 Amazon Web Services 区域

此功能支持以下机器学习框架和 Amazon Web Services 区域。

注意

要使用此功能,请确保至少安装了 Pyth SageMaker on SDK 的 2.180.0 版本

SageMaker 预装了 Profiler 的 SageMaker 框架镜像

SageMaker Profiler 已预装在以下 Dee Amazon p Learning Containers 中。 SageMaker

PyTorch图片

PyTorch 版本 Amazon DLC 图片 URI
2.2.0

763104351884 .dkr.ecr.amazonaws.com/pytorch-training:2.2.0-gpu-py310-<region>cu121-ubuntu20.04-sagemaker

2.1.0

763104351884 .dkr.ecr.amazonaws.com/pytorch-training:2.1.0-gpu-py310-<region>cu121-ubuntu20.04-sagemaker

2.0.1

763104351884 .dkr.ecr.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-<region>ubuntu20.04-sagemaker

763104351884 .dkr.ecr.amazonaws.com/pytorch-training:2.0.1-gpu-py310-<region>cu121-ubuntu20.04-sagemaker

1.13.1

763104351884 .dkr.ecr.amazonaws.com/pytorch-training:1.13.1-gpu-py39-cu117-<region>ubuntu20.04-sagemaker

TensorFlow 图片

TensorFlow 版本 Amazon DLC 图片 URI
2.13.0

763104351884 .dkr.ecr.amazonaws.com/tensorflow-training:2.13.0-gpu-py310-cu118-<region>ubuntu20.04-sagemaker

2.12.0

763104351884 .dkr.ecr.amazonaws.com/tensorflow-training:2.12.0-gpu-py310-cu118-<region>ubuntu20.04-sagemaker

2.11.0

763104351884 .dkr.ecr.amazonaws.com/tensorflow-training:2.11.0-gpu-py39-cu112-<region>ubuntu20.04-sagemaker

重要

上表中框架容器的分发和维护受到 Dee Amazon p Learning Containers 服务管理的框架支持政策的约束。如果您使用的是不再支持的先前框架版本,我们强烈建议您升级到当前支持的框架版本。

注意

如果你想将 P SageMaker rofiler 用于其他框架镜像或你自己的 Docker 镜像,你可以使用下一节中提供的 P SageMaker rofiler SageMaker Python 包二进制文件来安装 Profiler。

SageMaker Profiler Python 包二进制文件

如果要配置自己的 Docker 容器,请在 PyTorch 和的其他预构建容器中使用 P SageMaker rofiler TensorFlow,或者在本地安装 Profiler SageMaker Python 包,请使用以下二进制文件之一。根据环境中的 Python 和 CUDA 版本,选择以下选项之一。

PyTorch

TensorFlow

有关如何使用二进制文件安装 SageMaker Profiler 的更多信息,请参阅(可选)安装 P SageMaker rofiler Python 软件包

支持 Amazon Web Services 区域

SageMaker Profiler 在以下 Amazon Web Services 区域版本中可用。

  • 美国东部(弗吉尼亚州北部)(us-east-1)

  • 美国东部(俄亥俄州)(us-east-2)

  • 美国西部(俄勒冈州)(us-west-2)

  • 欧洲地区(法兰克福)(eu-central-1)

  • 欧洲地区(爱尔兰)(eu-west-1)

支持的实例类型

SageMaker Profiler 支持对以下实例类型的训练作业进行性能分析。

CPU 和 GPU 性能分析

  • ml.g4dn.12xlarge

  • ml.g5.24xlarge

  • ml.g5.48xlarge

  • ml.p3dn.24xlarge

  • ml.p4de.24xlarge

  • ml.p4d.24xlarge

  • ml.p5.48xlarge

仅限 GPU 性能分析

  • ml.g5.2xlarge

  • ml.g5.4xlarge

  • ml.g5.8xlarge

  • ml.g5.16.xlarge

先决条件

以下列表显示了开始使用 SageMaker Profiler 的先决条件。

  • 在您的 Amazon 账户中使用亚马逊 VPC 设置的 SageMaker 域。

    有关设置域名的说明,请参阅使用快速设置登录到 Amazon SageMaker 域名。您还需要为单个用户添加域用户配置文件才能访问 Profiler UI 应用程序。有关更多信息,请参阅添加和删除 SageMaker 域用户配置文件

  • 以下列表显示了一组使用探查器 UI 应用程序的最低权限。

    • sagemaker:CreateApp

    • sagemaker:DeleteApp

    • sagemaker:DescribeTrainingJob

    • sagemaker:Search

    • s3:GetObject

    • s3:ListBucket

使用 P SageMaker rofiler 准备和运行训练作业

使用 SageMaker Profiler 设置运行训练作业包括两个步骤:调整训练脚本和配置 SageMaker 训练作业启动器。

第 1 步:使用 P SageMaker rofiler Python 模块调整训练脚本

要开始捕获训练作业运行时在 GPU 上运行的内核,请使用 SageMaker Profiler Python 模块修改您的训练脚本。导入库并添加 start_profiling()stop_profiling() 方法来定义分析的开始和结束。您还可以使用可选的自定义注释在训练脚本中添加标记,以便可视化每个步骤中的特定操作期间的硬件活动。

请注意,注释器会从 GPU 中提取操作。对于 CPU 中的分析操作,您无需添加任何其他注释。在指定分析配置(您将在第 2 步:创建 SageMaker 框架估算器并激活 Profiler SageMaker 中使用此配置)时也将激活 CPU 分析。

注意

对整个训练作业进行分析并不能最有效地利用资源。我们建议对训练作业的最多 300 个步骤进行分析。

重要

发布的版本2023 年 12 月 14 日涉及一项重大更改。P SageMaker rofiler Python 包名称已从更改为smppysmprof这在 TensorFlow v2.12 及更高版本的SageMaker 框架容器中有效。

如果你使用SageMaker 框架容器的早期版本之一,比如 TensorFlow v2.11.0,Profiler SageMaker Python 包仍然可用作。smppy如果您不确定应使用哪个版本或软件包名称,请将 P SageMaker rofiler 软件包的 import 语句替换为以下代码片段。

try: import smprof except ImportError: # backward-compatability for TF 2.11 and PT 1.13.1 images import smppy as smprof

方法 1. 使用上下文管理器 smprof.annotate 为所有函数添加注释

你可以用smprof.annotate()上下文管理器封装全部函数。如果您想按函数而不是代码行进行分析,建议使用此包装器。以下示例脚本说明如何实施上下文管理器,以便在每次迭代中包装训练循环和完整函数。

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): with smprof.annotate("step_"+str(i)): inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() with smprof.annotate("Forward"): outputs = net(inputs) with smprof.annotate("Loss"): loss = criterion(outputs, labels) with smprof.annotate("Backward"): loss.backward() with smprof.annotate("Optimizer"): optimizer.step() SMProf.stop_profiling()

方法 2. 使用 smprof.annotation_begin()smprof.annotation_end() 为函数中的特定代码行添加注释

您还可以定义注释来分析特定的代码行。可以在单个代码行级别而不是按函数来设置分析的确切起始点和结束点。例如,在以下脚本中,step_annotator 会在每次迭代开始时被定义,并在迭代结束时终止。同时,还为每个操作定义了其他详细注释器,并在每次迭代中包装目标操作。

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): step_annotator = smprof.annotation_begin("step_" + str(i)) inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() forward_annotator = smprof.annotation_begin("Forward") outputs = net(inputs) smprof.annotation_end(forward_annotator) loss_annotator = smprof.annotation_begin("Loss") loss = criterion(outputs, labels) smprof.annotation_end(loss_annotator) backward_annotator = smprof.annotation_begin("Backward") loss.backward() smprof.annotation_end(backward_annotator) optimizer_annotator = smprof.annotation_begin("Optimizer") optimizer.step() smprof.annotation_end(optimizer_annotator) smprof.annotation_end(step_annotator) SMProf.stop_profiling()

注释并设置探查器初始模块后,在接下来的步骤 2 中使用 SageMaker 训练作业启动器保存脚本以提交。示例启动器假定训练脚本已命名为 train_with_profiler_demo.py

第 2 步:创建 SageMaker 框架估算器并激活 Profiler SageMaker

以下过程说明如何使用 Pyth SageMaker on SDK 为训练准备 SageMaker 框架估算器。

  1. 使用 ProfilerConfigProfiler 模块设置 profiler_config 对象,如下所示。

    from sagemaker import ProfilerConfig, Profiler profiler_config = ProfilerConfig( profile_params = Profiler(cpu_profiling_duration=3600) )

    以下是 Profiler 模块及其参数的描述。

    • Profiler:用于通过训练作业激活 SageMaker Profiler 的模块。

      • cpu_profiling_duration (int):指定在 CPU 上进行分析的持续时间(以秒为单位)。默认为 3600 秒。

  2. 使用上 SageMaker 一步中创建的profiler_config对象创建框架估算器。以下代码显示了创建 PyTorch 估算器的示例。如果要创建 TensorFlow 估算器,请sagemaker.tensorflow.TensorFlow改为导入,然后指定 Profiler 支持的TensorFlow SageMaker 版本之一。有关支持的框架和实例类型的更多信息,请参阅SageMaker 预装了 Profiler 的 SageMaker 框架镜像

    import sagemaker from sagemaker.pytorch import PyTorch estimator = PyTorch( framework_version="2.0.0", role=sagemaker.get_execution_role(), entry_point="train_with_profiler_demo.py", # your training job entry point source_dir=source_dir, # source directory for your training script output_path=output_path, base_job_name="sagemaker-profiler-demo", hyperparameters=hyperparameters, # if any instance_count=1, # Recommended to test with < 8 instance_type=ml.p4d.24xlarge, profiler_config=profiler_config )
  3. 通过运行 fit 方法开始训练作业。利用 wait=False,您可以将训练作业日志设为静音,并让它在后台运行。

    estimator.fit(wait=False)

在运行训练作业时或作业完成后,您可以转到 打开 SageMaker Profiler 用户界面应用程序 上的下一个主题,并开始探究和可视化已保存的配置文件。

如果您想直接访问保存在 Amazon S3 存储桶中的配置文件数据,请使用以下脚本来检索 S3 URI。

import os # This is an ad-hoc function to get the S3 URI # to where the profile output data is saved def get_detailed_profiler_output_uri(estimator): config_name = None for processing in estimator.profiler_rule_configs: params = processing.get("RuleParameters", dict()) rule = config_name = params.get("rule_to_invoke", "") if rule == "DetailedProfilerProcessing": config_name = processing.get("RuleConfigurationName") break return os.path.join( estimator.output_path, estimator.latest_training_job.name, "rule-output", config_name, ) print( f"Profiler output S3 bucket: ", get_detailed_profiler_output_uri(estimator) )

(可选)安装 P SageMaker rofiler Python 软件包

要在中未列出的 TensorFlow 框架映像上 PyTorch 使用 SageMaker ProfilerSageMaker 预装了 Profiler 的 SageMaker 框架镜像,或者在您自己的自定义 Docker 容器上使用 Profiler 进行训练,您可以使用其中一个来安装 SageMaker Profiler。SageMaker Profiler Python 包二进制文件

选项 1:在启动训练作业时安装 SageMaker Profiler 软件包

如果要使用 SageMaker Profiler 训练作业 PyTorch 或中未列出的 TensorFlow 图像SageMaker 预装了 Profiler 的 SageMaker 框架镜像,请创建一个requirements.txt文件并将其定位在步骤 2 中为 SageMaker 框架估算器source_dir参数指定的路径下。有关一般设置requirements.txt文件的更多信息,请参阅 SageMaker Python SDK 文档中的使用第三方库。在requirements.txt文件中,为添加一个 S3 存储桶路径SageMaker Profiler Python 包二进制文件

# requirements.txt https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

选项 2:在您的自定义 Dock SageMaker er 容器中安装 Profiler 软件包

如果您使用自定义 Docker 容器进行训练,请将其中一个SageMaker Profiler Python 包二进制文件添加到您的 Dockerfile 中。

# Install the smprof package version compatible with your CUDA version RUN pip install https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

有关运行自定义 Docker 容器进行一般训练 SageMaker 的指导,请参阅调整自己的训练容器

打开 SageMaker Profiler 用户界面应用程序

您可以通过以下选项访问 SageMaker Profiler 用户界面应用程序。

选项 1:从域名详情页面启动 SageMaker Profiler 用户界面

如果您有权访问 SageMaker 控制台,则可以选择此选项。

导航到域名详情页面

以下过程说明如何导航到域名详细信息页面。

  1. 打开亚马逊 SageMaker 控制台,网址为 https://console.aws.amazon.com/sagemaker/

  2. 在左侧导航窗格中,选择域名

  3. 从域列表中,选择要在其中启动 SageMaker Profiler 应用程序的域。

启动 SageMaker Profiler 用户界面应用程序

以下过程说明如何启动范围为用户 SageMaker 配置文件的 Profiler 应用程序。

  1. 在域名详细信息页面上,选择用户配置文件选项卡。

  2. 确定要为其启动 P SageMaker rofiler UI 应用程序的用户个人资料。

  3. 为选定的用户配置文件选择启动,然后选择探查器

选项 2:从控制台的 SageMaker Profiler 登录页面启动 SageMaker Profiler 用户界面应用程序 SageMaker

以下过程介绍如何从控制台的 SageMaker Profiler 登录页面启动 SageMaker Profiler 用户界面应用程序。 SageMaker 如果您有权访问 SageMaker控制台,则可以选择此选项。

  1. 打开亚马逊 SageMaker 控制台,网址为 https://console.aws.amazon.com/sagemaker/

  2. 在左侧导航窗格中,选择探查器

  3. 在 “开始” 下,选择要在其中启动 Studio Classic 应用程序的域。如果您的用户配置文件仅属于一个域,则看不到用于选择域的选项。

  4. 选择要为其启动 P SageMaker rofiler UI 应用程序的用户配置文件。如果域中没有用户配置文件,请选择创建用户配置文件。有关创建新的用户配置文件的更多信息,请参阅添加和删除用户配置文件

  5. 选择打开探查器

选项 3:使用 SageMaker Python SDK 中的应用程序启动器功能

如果您是 SageMaker 域用户并且只能访问 SageMaker Studio,则可以通过运行该sagemaker.interactive_apps.detail_profiler_app.DetailProfilerApp功能通过 SageMaker Studio Classic 访问 SageMaker Profiler 用户界面应用程序。

请注意, SageMaker Studio Classic 是 re: Invent 2023 之前的 Studio 用户界面体验,在 re: Invent 2023 上作为应用程序迁移到新设计的 Studio 用户界面中。 SageMaker Profiler UI 应用程序可在 SageMaker 网域级别使用,因此需要您的域 ID 和用户配置文件名称。目前,该DetailedProfilerApp功能仅在 SageMaker Studio Classic 应用程序中运行;该功能可以正确接收 Studio Class SageMaker ic 中的域和用户配置文件信息。

对于 re: Invent 2023 之前创建的域名、域名用户和 Studio,除非您按照从亚马 SageMaker 逊 Studio Classic 迁移中的说明进行更新,否则 Studio Classic 将是默认体验。如果是这种情况,则无需执行进一步的操作,您可以通过运行该DetailProfilerApp函数直接启动 SageMaker Profiler UI 应用程序。

如果你在 re: Invent 2023 之后创建了新的域名和 Studio,请在 Studio 用户界面中启动 Studio Classic 应用程序,然后运行该DetailProfilerApp函数以启动 SageMaker Profiler 用户界面应用程序。

请注意,该DetailedProfilerApp功能不适用于其他 SageMaker机器学习 IDE,例如 SageMaker Studio JupyterLab 应用程序、Stu SageMaker dio 代码编辑器应用程序和 SageMaker 笔记本实例。如果您在那些 IDE 中运行该DetailedProfilerApp函数,它会返回 SageMaker 控制台中 Profiler 登录页面的 URL,而不是用于打开 Profiler UI 应用程序的直接链接。

浏览在 Profiler 用户界面中可视化的 SageMaker 配置文件输出数据

本节 SageMaker 介绍了 Profiler 用户界面,并提供了有关如何使用它并从中获得见解的提示。

加载配置文件

打开 SageMaker Profiler 用户界面时,将打开 “加载配置文件” 页面。要加载和生成控制面板时间线,请执行以下过程。

加载训练作业的配置文件
  1. 训练作业列表部分中,使用复选框选择要为其加载配置文件的训练作业。

  2. 选择 Load(加载)。作业名称应显示在顶部的已加载配置文件部分中。

  3. 选择作业名称左侧的单选按钮以生成控制面板时间线。请注意,当您选择单选按钮时,UI 会自动打开控制面板。另请注意,如果您在作业状态和加载状态似乎仍在进行时生成可视化效果, SageMaker Profiler UI 会生成仪表板图和时间表,直到从正在进行的训练作业或部分加载的配置文件数据中收集的最新配置文件数据。

提示

您一次可以加载和可视化一个配置文件。要加载其他配置文件,必须先卸载之前加载的配置文件。要卸载配置文件,请使用已加载配置文件部分中配置文件右端的垃圾桶图标。

P SageMaker rofiler 用户界面中加载配置文件页面的屏幕截图

控制面板

加载并选择训练作业后,UI 会打开控制面板页面,此页面默认包含以下面板。

  • GPU 活动时间 – 此饼图显示了 GPU 活动时间与 GPU 空闲时间的百分比。在整个训练作业中,您可以查看 GPU 的活动时间是否长于闲置时间。GPU 活动时间基于利用率大于 0% 的配置文件数据点,而 GPU 闲置时间是利用率为 0% 的已分析数据点。

  • 一段时间内的 GPU 利用率 – 此时间线图显示每个节点一段时间内的平均 GPU 利用率,并将所有节点聚合到一个图表中。您可以检查 GPU 在特定时间间隔内是否存在工作负载不平衡、利用率不足问题、瓶颈或闲置问题。要跟踪单个 GPU 级别的利用率和相关的内核运行,请使用时间线界面。请注意,GPU 活动集合从您在训练脚本中添加探查器 starter 函数 SMProf.start_profiling() 的位置开始,并在 SMProf.stop_profiling() 停止。

  • CPU 活动时间 – 此饼图显示了 CPU 活动时间与 CPU 空闲时间的百分比。在整个训练作业中,您可以查看 CPU 的活动时间是否长于闲置时间。CPU 活动时间基于利用率大于 0% 的配置文件数据点,而 CPU 闲置时间是利用率为 0% 的已分析数据点。

  • 一段时间内的 CPU 利用率 – 此时间线图显示每个节点一段时间内的平均 CPU 利用率,并将所有节点聚合到一个图表中。您可以检查 CPU 在某些时间间隔内是否处于瓶颈状态或未得到充分利用。要跟踪与单个 GPU 利用率和内核运行相一致的 CPU 利用率,请使用时间线界面。请注意,利用率指标从作业初始化开始。

  • 所有 GPU 内核花费的时间 – 此饼图显示了在整个训练作业中运行的所有 GPU 内核。默认情况下,它将前 15 个 GPU 内核显示为单个扇区,并在一个扇区内显示所有其他内核。将鼠标悬停在扇区上方可查看更多详细信息。该值显示 GPU 内核的总运行时间(以秒为单位),而百分比基于配置文件的整个时间。

  • 前 15 个 GPU 内核花费的时间 – 此饼图显示了在整个训练作业中运行的所有 GPU 内核。它将前 15 个 GPU 内核显示为单个扇区。将鼠标悬停在扇区上方可查看更多详细信息。该值显示 GPU 内核的总运行时间(以秒为单位),而百分比基于配置文件的整个时间。

  • 所有 GPU 内核的启动次数 – 此饼图显示了整个训练作业中每个 GPU 内核的启动次数。它将前 15 个 GPU 内核显示为单个扇区,并在一个扇区内显示所有其他内核。将鼠标悬停在扇区上方可查看更多详细信息。该值显示已启动的 GPU 内核的总数,而百分比基于所有内核的总数。

  • 前 15 个 GPU 内核的启动次数 – 此饼图显示了整个训练作业中每个 GPU 内核的启动次数。它显示了前 15 个 GPU 内核。将鼠标悬停在扇区上方可查看更多详细信息。该值显示已启动的 GPU 内核的总数,而百分比基于所有内核的总数。

  • 步进时间分布 – 此直方图显示 GPU 上的步进时间的分布。仅在训练脚本中添加步长注释器后才会生成此图。

  • 内核精度分布 – 此饼图显示了在不同数据类型(例如 FP32、FP16、INT32 和 INT8)中运行内核所花费的时间的百分比。

  • GPU 活动分布 – 此饼图显示了在 GPU 活动上花费的时间的百分比,例如运行内核、内存(memcpymemset)和同步 (sync)。

  • GPU 内存操作分布 – 此饼图显示了在 GPU 内存操作上花费的时间的百分比。这将可视化 memcopy 活动,并有助于确定您的训练作业是否在某些内存操作上花费了过多的时间。

  • 创建新的直方图 – 为在 第 1 步:使用 P SageMaker rofiler Python 模块调整训练脚本 期间手动注释的自定义指标创建新的直方图。在向新的直方图添加自定义注释时,请选择或键入您在训练脚本中添加的注释的名称。例如,在步骤 1 的演示训练脚本中,stepForwardBackwardOptimizeLoss 是自定义注释。在创建新的直方图时,这些注释名称应出现在下拉菜单中以供指标选择。如果您选择 Backward,UI 会将整个分析时间内向后传递所花费时间的直方图添加到控制面板中。这种类型的直方图有助于检查是否有异常值占用了异常长的时间,从而导致瓶颈问题。

以下屏幕截图显示了 GPU 和 CPU 的活动时间比率以及相对于每个计算节点的时间的平均 GPU 和 CPU 利用率。

P SageMaker rofiler 用户界面中仪表板页面的屏幕截图

以下屏幕截图显示了一个饼图示例,用于比较 GPU 内核的启动次数并测量运行它们所花费的时间。在所有 GPU 内核花费的时间面板和所有 GPU 内核的启动次数面板中,您还可以在输入字段中为 k 指定一个整数,调整要在图中显示的图例数。例如,如果您指定 10,则图将分别显示运行次数和启动次数排名前 10 的内核。

P SageMaker rofiler 用户界面中仪表板页面的屏幕截图

以下屏幕截图显示了步长持续时间直方图的示例,以及内核精度分布、GPU 活动分布和 GPU 内存操作分布的饼图。

P SageMaker rofiler 用户界面中仪表板页面的屏幕截图

时间线界面

要详细了解在 CPU 上调度并在 GPU 上运行的操作和内核级别的计算资源,请使用时间线界面。

您可以使用鼠标、[w, a, s, d] 键或键盘上的四个箭头键在时间线界面中进行放大和缩小以及向左或向右平移。

提示

有关与时间线界面交互的键盘快捷键的更多提示,请在左侧窗格中选择键盘快捷键

时间线轨迹采用树形结构,为您提供从主机级别到设备级别的信息。例如,如果您运行的每个 N 实例中都具有八个 GPU,则每个实例的时间线结构将如下所示。

  • algo-i node — 这是为预配置实例分配任务的 SageMaker 标签。数字 inode 是随机分配的。例如,如果您使用 4 个实例,则此部分将从 algo-1 扩展为 algo- 4

    • CPU – 在此部分中,您可以查看平均 CPU 利用率和性能计数器。

    • GPU – 在此部分中,您可以查看平均 GPU 利用率、各个 GPU 利用率和内核。

      • 总利用率 – 每个实例的平均 GPU 利用率。

      • HOST-0 PID-123 – 为每个进程轨迹分配的唯一名称。首字母缩略词 PID 是进程 ID,其后面附加的数字是在从进程中捕获数据期间记录的进程 ID 号。此部分显示了进程中的以下信息。

        • GPU-inum_gpu 利用率 – 第 inum_gpu 个 GPU 在一段时间内的利用率。

        • GPU-inum_gpu 设备 – 第 inum_gpu 个 GPU 设备上的内核运行。

          • stream icuda_stream – 显示 GPU 设备上的内核运行的 CUDA 流。要了解有关 CUDA 流的更多信息,请参阅 NVIDIA 提供的 CUDA C/C++ 流和并发上的 PDF 中的幻灯片。

        • GPU-inum_gpu 主机 – 内核在第 inum_gpu 个 GPU 主机上启动。

以下几张屏幕截图显示了 ml.p4d.24xlarge 实例上的训练作业运行的配置文件的时间线,每个实例都配有 8 个 NVIDIA A100 Tensor Core GPU。

以下是配置文件的缩小视图,其中列明了十几个步骤,包括 step_232step_233 之间的间歇性数据加载器,用于获取下一个数据批处理。

P SageMaker rofiler 用户界面中时间轴页面的屏幕截图,用于可视化示例训练作业的配置文件。

对于每个 CPU,您可以跟踪 CPU 利用率和性能计数器,例如 "clk_unhalted_ref.tsc""itlb_misses.miss_causes_a_walk",它们表示 CPU 上的指令运行。

对于每个 GPU,您可以查看主机时间线和设备时间线。内核启动位于主机时间线上,内核运行位于设备时间线上。如果您已在 GPU 主机时间线的训练脚本中添加了注释(例如向前、向后和优化),则也将看到这些注释。

在时间轴视图中,您还可以跟踪内核 launch-and-run 对。这有助于您了解主机 (CPU) 上计划的内核启动如何在相应的 GPU 设备上运行。

提示

f 键可放大选定内核。

以下屏幕截图是上一个屏幕截图中的 step_233step_234 的放大视图。以下屏幕截图中选定的时间线间隔是在 GPU-0 设备上运行的 AllReduce 操作,它是分布式训练中必不可少的通信和同步步骤。在屏幕截图中,请注意,GPU-0 主机中的内核启动会连接到 GPU-0 设备流 1 中的内核运行,用青色箭头表示。

P SageMaker rofiler 用户界面中时间轴页面的屏幕截图

在选择时间线间隔时,UI 的底部窗格中还会显示两个信息选项卡,如上一个屏幕截图中所示。当前选择选项卡显示主机中的选定内核以及已连接的内核启动的详细信息。连接方向始终是从主机 (CPU) 到设备 (GPU),因为总是会从 CPU 调用每个 GPU 内核。连接选项卡显示选定的内核启动和运行对。您可以选择其中任一项来将其移动到时间线视图的中心。

以下屏幕截图进一步放大了 AllReduce 操作启动和运行对。

P SageMaker rofiler 用户界面中时间轴页面的屏幕截图

信息

信息中,您可以访问有关已加载的训练作业的信息,例如实例类型、为作业预置的计算资源的 Amazon 资源名称 (ARN)、节点名称和超参数。

设置

默认情况下, SageMaker Profiler UI 应用程序实例配置为在空闲时间 2 小时后关闭。在设置中,使用以下设置来调整自动关闭计时器。

  • 启用应用程序自动关闭 – 选择并设置为启用,让应用程序在闲置时间超过指定小时数后自动关闭。要禁用自动关闭功能,请选择禁用

  • 自动关闭阈值(以小时为单位)– 如果您为启用应用程序自动关闭选择启用,则可以设置应用程序自动关闭的阈值时间(以小时为单位)。默认情况下,该选项设置为 2。

有关使用 P SageMaker rofiler 的常见问题

使用以下常见问题来查找有关使用 SageMaker Profiler 的答案。

问:我收到一条错误消息,ModuleNotFoundError: No module named 'smppy'

自 2023 年 12 月起,P SageMaker rofiler Python 包的名称已从更改为,smppysmprof以解决包名重复的问题;smppy已被开源包使用。

因此,如果您在 2023 年 12 月之前一直在使用smppy并遇到此ModuleNotFoundError问题,则可能是由于在安装最新软件包或使用最新SageMaker 预装了 Profiler 的 SageMaker 框架镜像软件包时训练脚本中的smprof软件包名称过时所致。在这种情况下,请确保在smprof整个训练脚本中将所有提及的smppy内容替换为。

在训练脚本中更新 P SageMaker rofiler Python 包名称时,为避免混淆应使用哪个版本的包名称,请考虑使用条件导入语句,如以下代码片段所示。

try: import smprof except ImportError: # backward-compatability for TF 2.11 and PT 1.13.1 images import smppy as smprof

另请注意,如果您smppy在升级到最新 PyTorch 或 TensorFlow 版本时一直在使用,请确保按照中的说明安装最新的smprof软件包(可选)安装 P SageMaker rofiler Python 软件包

问:我收到一条错误消息,ModuleNotFoundError: No module named 'smprof'

首先,请确保使用官方支持的 SageMaker 框架容器之一。如果您不使用其中一个,则可以按照中的说明安装smprof软件包(可选)安装 P SageMaker rofiler Python 软件包

问:我无法导入 ProfilerConfig

如果您无法使用 SageMaker Python SDK 导入ProfilerConfig任务启动器脚本,则您的本地环境或 Jupyter 内核的 Pyth SageMaker on SDK 版本可能已经过时了。确保将 SDK 升级到最新版本。

$ pip install --upgrade sagemaker

问:我收到一条错误消息,aborted: core dumped when importing smprof into my training script

在的早期版本中smprof, PyTorch 2.0+ 和 PyTorch Lightning 会出现此问题。要解决此问题,还要按照中的说明安装最新的smprof软件包(可选)安装 P SageMaker rofiler Python 软件包

问:我无法从 SageMaker Studio 中找到 SageMaker Profiler 用户界面。我怎么能找到它?

如果您有权访问 SageMaker 控制台,请选择以下选项之一。

如果您是域用户并且无权访问 SageMaker 控制台,则可以通过 SageMaker Studio Classic 访问该应用程序。如果是这种情况,请选择以下选项。

注意事项

使用 P SageMaker rofiler 时,请考虑以下几点。