TensorBoard 用于调试和分析 Amazon 中的训练作业 SageMaker - Amazon SageMaker

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

TensorBoard 用于调试和分析 Amazon 中的训练作业 SageMaker

Amazon SageMaker TensorBoard with SageMaker 是 Amazon 的一项功能,它可以将的可视化工具与 SageMaker T SageMaker raining 和 domain 集成。TensorBoard它提供了通过SageMaker 域管理您的 AWS 账户和属于该账户的用户的选项,为域用户提供对 Amazon S3 的适当权限访问 TensorBoard 数据的权限,并帮助域用户使用 TensorBoard 可视化插件执行模型调试任务。 SageMaker w TensorBoard ith 通过 D SageMaker ata Manager 插件进行了扩展,通过该插件,域用户可以在 TensorBoard应用程序中的一个位置访问多个训练作业。

注意

此功能用于使用 PyTorch 或 TensorFlow 框架训练和调试深度学习模型。

对于数据科学家

训练大型模型可能存在科学问题,需要数据科学家进行调试并予以解决,以改善模型收敛性并使梯度下降过程稳定。

当您遇到损失不收敛、权重和梯度消失或迸发等模型训练问题时,需要访问张量数据来深入探究和分析模型参数、标量和任何自定义指标。 SageMaker 与一起使用 TensorBoard,您可以可视化从训练作业中提取的模型输出张量。当你对不同的模型、多个训练运行和模型超参数进行实验时,你可以在一个地方选择多个训练作业 TensorBoard 并对它们进行比较。

对于管理员

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

支持的框架和 AWS 区域

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

框架
  • PyTorch

  • TensorFlow

  • Hugging Face Transformers

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

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

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

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

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

注意

SageMaker Amazon w TensorBoard ith 在ml.r5.large实例上 TensorBoard 运行应用程序,并在该功能的 SageMaker 免费套餐或免费试用期结束后产生费用。有关更多信息,请参阅 Amazon SageMaker 定价

先决条件

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

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

    有关设置域名的说明,请参阅使用快速设置登录到 Amazon SageMaker 域名。您还需要添加域用户配置文件以供个人用户访问 SageMaker。 TensorBoard 有关更多信息,请参阅添加和删除 SageMaker 域用户配置文件

  • 以下列表是在 TensorBoard 上使用的最低权限集 SageMaker。

    • sagemaker:CreateApp

    • sagemaker:DeleteApp

    • sagemaker:DescribeTrainingJob

    • sagemaker:Search

    • s3:GetObject

    • s3:ListBucket

使用 TensorBoard 输出数据配置准备训练作业

中的典型深度学习训练作业 SageMaker 包括两个主要步骤:准备训练脚本和配置 SageMaker 训练作业启动器。在本节中,您可以查看所需的更改,以便从 TensorBoard T SageMaker raining 中收集与之兼容的数据。

步骤 1:修改自己的训练脚本

确保确定要收集哪些输出张量和标量,并使用以下任何工具修改训练脚本中的代码行: TensorBoardX、Summary Writer、 TensorFlow Summary Writer 或 SageMaker Debugger。 PyTorch

另外,请确保将 TensorBoard 数据输出路径指定为训练容器中回调的日志目录 (log_dir)。

有关每个框架的回调的更多信息,请参阅以下资源。

第 2 步:使用 TensorBoard 数据配置构建 SageMaker训练启动器

在配置 SageMaker 框架估算器sagemaker.debugger.TensorBoardOutputConfig时使用。此配置 API 将您指定用于保存 TensorBoard 数据的 S3 存储桶与训练容器中的本地路径(/opt/ml/output/tensorboard)进行映射。将模块的对象传递给估算器类的 tensorboard_output_config 参数。以下代码片段显示了使用 TensorBoard 输出配置参数准备 TensorFlow 估算器的示例。

注意

此示例假设您使用的是 SageMaker Python 开发工具包。如果您使用低级 SageMaker API,则应在 CreateTrainingJobAPI 的请求语法中包含以下内容。

"TensorBoardOutputConfig": { "LocalPath": "/opt/ml/output/tensorboard", "S3OutputPath": "s3_output_bucket" }
from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import TensorBoardOutputConfig # Set variables for training job information, # such as s3_out_bucket and other unique tags. ... LOG_DIR="/opt/ml/output/tensorboard" output_path = os.path.join( "s3_output_bucket", "sagemaker-output", "date_str", "your-training_job_name" ) tensorboard_output_config = TensorBoardOutputConfig( s3_output_path=os.path.join(output_path, 'tensorboard'), container_local_output_path=LOG_DIR ) estimator = TensorFlow( entry_point="train.py", source_dir="src", role=role, image_uri=image_uri, instance_count=1, instance_type="ml.c5.xlarge", base_job_name="your-training_job_name", tensorboard_output_config=tensorboard_output_config, hyperparameters=hyperparameters )

如何访问 TensorBoard SageMaker

您可以 TensorBoard 通过两种方法进行访问:以编程方式使用生成未签名或预签名 URL 的sagemaker.interactive_apps.tensorboard模块,或者使用控制台中的 TensorBoard 登录页面。 SageMaker 打开后 TensorBoard, SageMaker 运行 TensorBoard 插件并自动查找所有采用 TensorBoard兼容文件格式的训练作业输出数据。

TensorBoard 使用sagemaker.interactive_apps.tensorboard模块打开

sagemaker.interactive_apps.tensorboard模块提供了一个名为的函数get_app_url,该函数生成未签名或预签名的 URL,以便在 SageMaker 或 Amazon EC2 中的任何环境中打开 TensorBoard 应用程序。这是为了为 Studio Classic 和非 Studio Classic 用户提供统一的体验。对于 Studio 环境,您可以 TensorBoard 按原样运行get_app_url()函数来打开,也可以指定作业名称以便在 TensorBoard 应用程序打开时开始跟踪。对于非 Studio Classic 环境,您可以 TensorBoard通过向实用程序功能提供您的域名和用户配置文件信息来打开。有了此功能,无论您在何处或以何种方式运行训练代码和启动训练作业,都可以 TensorBoard 通过在 Jupyter 笔记本或终端中运行该get_app_url功能来直接访问。

注意

此功能在 SageMaker Python SDK v2.184.0 及更高版本中可用。要使用此功能,请确保通过运行 pip install sagemaker --upgrade 来升级 SDK。

选项 1:适用于经典 SageMaker工作室

如果您使用的是 SageMaker Studio Classic,则可以直接打开 TensorBoard应用程序或通过运行get_app_url函数来检索未签名的 URL,如下所示。由于您已经在 Studio Classic 环境中并以域用户身份登录,因此无需再次进行身份验证,因此get_app_url()会生成未签名的 URL。

打开 TensorBoard 应用程序

以下代码会自动从该get_app_url()函数在您的环境的默认 Web 浏览器中返回的未签名 URL 打开 TensorBoard 应用程序。

from sagemaker.interactive_apps import tensorboard region = "us-west-2" app = tensorboard.TensorBoardApp(region) app.get_app_url( training_job_name="your-training_job_name" # Optional. Specify the job name to track a specific training job )

检索未签名 URL 并手动打开 TensorBoard应用程序

以下代码会打印一个未签名的 URL,您可以将其复制到 Web 浏览器并打开 TensorBoard 应用程序。

from sagemaker.interactive_apps import tensorboard region = "us-west-2" app = tensorboard.TensorBoardApp(region) print("Navigate to the following URL:") print( app.get_app_url( training_job_name="your-training_job_name", # Optional. Specify the name of the job to track. open_in_default_web_browser=False # Set to False to print the URL to terminal. ) )

请注意,如果您在 SageMaker Studio Classic 环境之外运行前两个代码示例,则该函数将在 SageMaker 控制台中返回一个指向 TensorBoard登录页面的 URL,因为这些页面没有指向您的域名和用户个人资料的登录信息。要创建预签名的 URL,请参阅以下部分中的选项 2。

选项 2:适用于非 Studio 经典版环境

如果您使用非 Studio Classic 环境(例如 SageMaker 笔记本实例或 Amazon EC2),并且想要 TensorBoard 直接从您所在的环境中打开,则需要生成一个预先签名的 URL,其中包含您的域名和用户个人资料信息。预签名 URL 是在使用您的域名和用户个人资料创建 URL 时登录到 Amazon SageMaker Studio Classic 的 URL,因此被授予访问与您的域名关联的所有域应用程序和文件的权限。要 TensorBoard 通过预签名 URL 打开,请使用带有您的域名和用户个人资料名称的get_app_url函数,如下所示。

请注意,此选项要求域用户拥有sagemaker:CreatePresignedDomainUrl权限。如果没有权限,域用户将收到异常错误。

重要

请勿共享任何预签名的 URL。该get_app_url函数创建预签名 URL,这些网址会自动使用您的域名和用户配置文件进行身份验证,并允许访问与您的域名关联的任何应用程序和文件。

print( app.get_app_url( training_job_name="your-training_job_name", # Optional. Specify the name of the job to track. create_presigned_domain_url=True, # Reguired to be set to True for creating a presigned URL. domain_id="your-domain-id", # Required if creating a presigned URL (create_presigned_domain_url=True). user_profile_name="your-user-profile-name", # Required if creating a presigned URL (create_presigned_domain_url=True). open_in_default_web_browser=False, # Optional. Set to False to print the URL to terminal. optional_create_presigned_url_kwargs={} # Optional. Add any additional args for Boto3 create_presigned_domain_url ) )
提示

get_app_url函数在后端运行 SageMaker.Client.create_presigned_domain_urlAPI。 AWS SDK for Python (Boto3) 由于 Boto3 create_presigned_domain_url API 会创建默认在 300 秒后过期的预签名域网址,因此预签名的 TensorBoard 应用程序 URL 也将在 300 秒后过期。如果要延长过期时间,请将 ExpiresInSeconds 参数传递给 get_app_url 函数的 optional_create_presigned_url_kwargs 参数,如下所示。

optional_create_presigned_url_kwargs={"ExpiresInSeconds": 1500}
注意

如果您传递给参数的任何输入无效,get_app_url则该函数将输出一个指向 TensorBoard 登录页面的 URL,而不是打开 TensorBoard 应用程序。输出消息将与以下内容类似。

Navigate to the following URL: https://us-west-2.console.aws.amazon.com/sagemaker/home?region=us-west-2#/tensor-board-landing

TensorBoard 使用get_app_url函数作为estimator类方法打开

如果您正在使用 SageMaker Python SDK 的estimator类运行训练作业,并且有该estimator类的活动对象,则也可以将该get_app_url函数作为该类的类方法进行estimator访问。打开 TensorBoard 应用程序或通过运行get_app_url方法来检索未签名的 URL,如下所示。get_app_url类方法从估算器中提取训练作业名称,然后使用指定作业打开 TensorBoard 应用程序。

注意

此功能在 SageMaker Python SDK v2.184.0 及更高版本中可用。要使用此功能,请确保通过运行 pip install sagemaker --upgrade 来升级 SDK。

选项 1:适用于经典 SageMaker 工作室

打开 TensorBoard 应用程序

以下代码会自动从该get_app_url()方法在您的环境的默认 Web 浏览器中返回的未签名 URL 打开 TensorBoard 应用程序。

estimator.get_app_url( app_type=SupportedInteractiveAppTypes.TENSORBOARD # Required. )

检索未签名 URL 并手动打开 TensorBoard应用程序

以下代码会打印一个未签名的 URL,您可以将其复制到 Web 浏览器并打开 TensorBoard 应用程序。

print( estimator.get_app_url( app_type=SupportedInteractiveAppTypes.TENSORBOARD, # Required. open_in_default_web_browser=False, # Optional. Set to False to print the URL to terminal. ) )

请注意,如果您在 SageMaker Studio Classic 环境之外运行前两个代码示例,则该函数将在 SageMaker 控制台中返回一个指向 TensorBoard登录页面的 URL,因为这些页面没有指向您的域名和用户个人资料的登录信息。要创建预签名的 URL,请参阅以下部分中的选项 2。

选项 2:适用于非 Studio 经典版环境

如果您使用非 Studio Classic 环境(例如 SageMaker 笔记本实例和 Amazon EC2),并且想要生成用于打开 TensorBoard 应用程序的预签名 URL,请按如下方式使用包含您的域和用户个人资料信息的get_app_url方法。

请注意,此选项要求域用户拥有sagemaker:CreatePresignedDomainUrl权限。如果没有权限,域用户将收到异常错误。

重要

请勿共享任何预签名的 URL。该get_app_url函数创建预签名 URL,这些网址会自动使用您的域名和用户配置文件进行身份验证,并允许访问与您的域名关联的任何应用程序和文件。

print( estimator.get_app_url( app_type=SupportedInteractiveAppTypes.TENSORBOARD, # Required create_presigned_domain_url=True, # Reguired to be set to True for creating a presigned URL. domain_id="your-domain-id", # Required if creating a presigned URL (create_presigned_domain_url=True). user_profile_name="your-user-profile-name", # Required if creating a presigned URL (create_presigned_domain_url=True). open_in_default_web_browser=False, # Optional. Set to False to print the URL to terminal. optional_create_presigned_url_kwargs={} # Optional. Add any additional args for Boto3 create_presigned_domain_url ) )

TensorBoard 通过 SageMaker控制台打开

您也可以使用 SageMaker 控制台 UI 打开 TensorBoard 应用程序。通过 SageMaker 控制台打开 TensorBoard 应用程序有两个选项。

选项 1: TensorBoard 从域名详情页面启动

导航到域名详情页面

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

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

  2. 在左侧导航窗格中,选择管理员配置

  3. 管理员配置下,选择

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

启动用户配置文件应用程序

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

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

  2. 确定要为其启动 Studio Classic 应用程序的用户个人资料。

  3. 为所选用户个人资料选择 La unch,然后选择TensorBoard

选项 2: TensorBoard 从 TensorBoard 登录页面启动

以下过程描述了如何从 TensorBoard 登录页面启动 TensorBoard 应用程序。

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

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

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

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

  5. 选择 “打开” TensorBoard。

以下屏幕截图显示了 SageMaker 控制台左侧导航窗格 TensorBoard 中的位置 SageMaker ,以及主窗格中的 TensorBoard 登录页面。

TensorBoard 登陆页面

访问和可视化训练输出数据 TensorBoard

通过将从 S3 存储桶收集的输出张量与训练期间或之后的训练作业成对加载,可以进行在线或离线分析。

打开 TensorBoard 应用程序时, TensorBoard 打开时会显示SageMaker数据管理器选项卡。以下屏幕截图显示了 TensorBoard 应用程序中 “ SageMaker 数据管理器” 选项卡的完整视图。

TensorBoard 应用程序中 “ SageMaker 数据管理器” 选项卡的屏幕截图

SageMaker 数据管理器选项卡中,您可以从 Amazon S3 中选择任何训练任务和加载 TensorBoard兼容的训练输出数据。

  1. 搜索训练作业部分,使用筛选条件缩小要查找、加载和可视化的训练作业列表的范围。

  2. 训练作业列表部分中,使用复选框选择要从中提取数据并可视化以进行调试的训练作业。

  3. 选择添加选定作业。选定作业将显示在跟踪的训练作业部分中,如以下屏幕截图所示。

    TensorBoard 应用程序中 “ SageMaker 数据管理器” 选项卡下的 “跟踪训练作业” 部分的屏幕截图
注意

SageMaker 数据管理器选项卡仅显示使用该TensorBoardOutputConfig参数配置的训练作业。确保已使用此参数配置 SageMaker 估算器。有关更多信息,请参阅 第 2 步:使用 TensorBoard 数据配置构建 SageMaker训练启动器

注意

如果您是首次 SageMaker 与一起使用,或者之前 TensorBoard 的使用中没有加载任何数据,则可能不会显示可视化选项卡。在添加训练作业并等待几秒钟后,选择右上角的顺时针圆形箭头来刷新查看器。成功加载作业数据后,可视化选项卡将出现。您也可以使用右上角的刷新按钮旁边的设置按钮来设置为自动刷新。

浏览中可视化的训练输出数据 TensorBoard

在图形选项卡中,您可以在左侧窗格中看到已加载训练作业的列表。您也可以使用训练作业的复选框来显示或隐藏可视化项。 TensorBoard 动态插件是动态激活的,具体取决于您如何将训练脚本设置为包括摘要编写器以及张量和标量集合的传递回调,因此图形选项卡也会动态显示。以下屏幕截图显示了每个选项卡的示例视图,其中包含两个训练作业的可视化,这两个训练作业收集了时间序列、标量、图形、分布和直方图插件的指标。

“时间序列” 选项卡视图

TIME SERIES 选项卡的屏幕截图,其中显示了要跟踪的选定训练作业 TensorBoard 的数据,并在主窗格中显示了序列化直方图 .

“标量”选项卡视图

SC ALARS 选项卡的屏幕截图,其中显示了要跟踪的选定训练作业 TensorBoard 的数据,以及主窗格中相对于步长(或时代)的标量值图,例如精度和损失。

“图表”选项卡视图

图表选项卡的屏幕截图,显示了选定训练作业的模型图。

“分配”选项卡视图

“分布” 选项卡的屏幕截图,其中显示了要跟踪的选定训练作业 TensorBoard 的数据,以及模型参数(例如偏差和内核)相对于主窗格中步长(或时代)的分布变化。

“直方图”选项卡视图

HISTOGR AM S 选项卡的屏幕截图,其中显示了要跟踪的选定训练作业 TensorBoard 的数据,并在主窗格中显示了模型参数(例如偏差和内核)的序列化直方图。

删除未使用的 TensorBoard 应用程序

完成监控和尝试中的作业后 TensorBoard,请关闭 TensorBoard 应用程序。

  1. 打开控制 SageMaker 台。

  2. 在左侧导航窗格中,选择管理员配置

  3. 管理员配置下,选择

  4. 选择您的域。

  5. 选择您的用户配置文件。

  6. 在 “应用程序” 下,为该 TensorBoard 行选择 “删除应用程序”。

  7. 选择是,删除应用程序

  8. 在文本框中键入 delete,然后选择删除

  9. 屏幕顶部将显示一条蓝色文本消息:正在删除默认值

注意事项

SageMaker 与一起使用时,请考虑以下几点 TensorBoard。

  • 您不能出于协作目的共享 TensorBoard 应用程序,因为 SageMaker 域不允许在用户之间共享应用程序。如果用户有权访问 S3 存储桶,则可以共享 S3 存储桶中保存的输出张量。

  • 首次启动 TensorBoard 应用程序时,可视化插件可能不会出现。在 SageMaker Data Manager 插件中选择训练作业后, TensorBoard 应用程序会加载 TensorBoard 数据并填充可视化插件。

  • 该 TensorBoard 应用程序会在闲置 1 小时后自动关闭。如果您想在使用完应用程序后将其关闭,请务必手动将其关闭, TensorBoard 以免为托管该应用程序的实例付费。有关如何删除应用程序的说明,请参阅删除未使用的 TensorBoard 应用程序

  • 上的 TensorBoard 应用程序旨在 SageMaker 为 SageMaker 培训工作提供 out-of-the-box支持。这种内置集成可实现训练容器内的本地目录与 Amazon S3 存储桶之间的无缝映射,这在 CreateTrainingJobAPI 层提供了便利。通过这种集成,您可以毫不费力地映射目录路径,如使用 TensorBoard 输出数据配置准备训练作业部分所述。

    但是,请注意,该 TensorBoard 应用程序不 out-of-the-box支持 SageMaker 超参数调整作业,因为 CreateHyperParameterTuningJobAPI 未与映射的 TensorBoard 输出配置集成。要将该 TensorBoard 应用程序用于超参数调整任务,您需要在训练脚本中编写用于将指标上传到 Amazon S3 的代码。将指标上传到 Amazon S3 存储桶后,您就可以将该存储桶加载到 TensorBoard应用程序中 SageMaker。