在 Amazon SageMaker 中使用 TensorBoard 调试和分析训练作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon SageMaker 中使用 TensorBoard 调试和分析训练作业

Amazon SageMaker with TensorBoard 是 Amazon SageMaker 的一项功能,它将 TensorBoard 的可视化工具引入 SageMaker,并与 SageMaker 训练和域集成。它提供了相关选项,可用于通过 SageMaker 域管理您的 Amazon 账户以及属于该账户的用户,允许域用户访问 TensorBoard 数据并提供对 Amazon S3 的适当权限,帮助域用户使用 TensorBoard 可视化插件执行模型调试任务。SageMaker with TensorBoard 通过 SageMaker Data Manager 插件进行扩展,域用户可使用此插件在 TensorBoard 应用程序中的一个位置访问大量训练作业。

注意

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

对于数据科学家

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

当您遇到损失不收敛、权重和梯度消失或迸发等模型训练问题时,需要访问张量数据来深入探究和分析模型参数、标量和任何自定义指标。利用 SageMaker with TensorBoard,您可以可视化从训练作业中提取的模型输出张量。当您试用不同的模型、多个训练运行和模型超参数时,可以在 TensorBoard 中选择多个训练作业,然后在一个位置比较这些作业。

对于管理员

如果您是 Amazon 账户或 SageMaker 域的管理员,则可以通过 SageMaker 控制台中的 TensorBoard 登录页面或 SageMaker 域管理 TensorBoard 应用程序用户。每个域用户均能使用授予的权限访问其 TensorBoard 应用程序。作为 SageMaker 域管理员和域用户,您可以使用相应级别的权限创建和删除 TensorBoard 应用程序。

支持的框架和 Amazon Web Services 区域

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

框架
  • PyTorch

  • TensorFlow

  • Hugging Face Transformers

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

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

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

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

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

注意

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

先决条件

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

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

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

  • 以下列表显示了一组用于使用 TensorBoard on SageMaker 的最低权限。

    • sagemaker:CreateApp

    • sagemaker:DeleteApp

    • sagemaker:DescribeTrainingJob

    • sagemaker:Search

    • s3:GetObject

    • s3:ListBucket

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

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

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

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

此外,请务必将 TensorBoard 数据输出路径指定为用于在训练容器中回调的日志目录 (log_dir)。

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

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

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

注意

此示例假定您使用 SageMaker Python SDK。如果您使用低级 SageMaker API,则应在 CreateTrainingJob API 的请求语法中加入以下内容。

"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 on SageMaker

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

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

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

注意

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

选项 1:对于 SageMaker Studio

如果您使用的是 SageMaker Studio,则可以直接打开 TensorBoard 应用程序,也可以通过运行 get_app_url 函数来检索未签名的 URL,如下所示。由于您已在 Studio 环境中并以域用户身份登录,因此,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 环境之外运行前两个代码示例,则该函数将返回指向 SageMaker 控制台中的 TensorBoard 登录页面的 URL,因为没有您的域和用户配置文件的登录信息。要创建预签名的 URL,请参阅以下部分中的选项 2。

选项 2:对于非 Studio 环境

如果您使用非 Studio 环境(例如 SageMaker 笔记本实例或 Amazon EC2),并且要直接从您所在的环境中打开 TensorBoard,则需要使用您的域和用户配置文件信息生成一个预签名的 URL。预签名的 URL 是用于登录到 Amazon SageMaker Studio 的 URL,它是使用您的域和用户配置文件创建的,因此已获得对与您的域关联的所有域应用程序和文件的访问权限。要通过预签名的 URL 打开 TensorBoard,请将 get_app_url 函数与您的域和用户配置文件名称结合使用,如下所示。

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

重要

请勿共享任何预签名的 URL。get_app_url 函数会创建预签名的 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 函数在后端的 Amazon SDK for Python (Boto3) 中运行 SageMaker.Client.create_presigned_domain_url API。由于 Boto3 create_presigned_domain_url API 创建的预签名的 URL 默认在 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

通过将 get_app_url 函数用作 estimator 类方法来打开 TensorBoard

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

注意

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

选项 1:对于 SageMaker Studio

打开 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 环境之外运行前两个代码示例,则该函数将返回指向 SageMaker 控制台中的 TensorBoard 登录页面的 URL,因为没有您的域和用户配置文件的登录信息。要创建预签名的 URL,请参阅以下部分中的选项 2。

选项 2:对于非 Studio 环境

如果您使用非 Studio 环境(例如 SageMaker 笔记本实例或 Amazon EC2),并且要生成预签名的 URL 来打开 TensorBoard 应用程序,请将 get_app_url 方法与您的域和用户配置文件信息结合使用,如下所示。

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

重要

请勿共享任何预签名的 URL。get_app_url 函数会创建预签名的 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 ) )

通过 SageMaker 控制台打开 TensorBoard

您还可以使用 SageMaker 控制台 UI 打开 TensorBoard 应用程序。提供了两个选项以通过 SageMaker 控制台打开 TensorBoard 应用程序。

选项 1:从域详细信息页面启动 TensorBoard

导航到域详细信息页面

以下过程展示如何导航到域详细信息页面。

  1. 通过 https://console.aws.amazon.com/sagemaker/ 打开 Amazon SageMaker 控制台。

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

  3. 管理员配置下,选择

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

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

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

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

  2. 确定要为其启动 Studio 应用程序的用户配置文件。

  3. 为所选用户配置文件选择启动,然后选择 TensorBoard

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

以下过程说明如何从 TensorBoard 登录页面启动 TensorBoard 应用程序。

  1. 通过 https://console.aws.amazon.com/sagemaker/ 打开 Amazon SageMaker 控制台。

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

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

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

  5. 选择打开 TensorBoard

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


                        TensorBoard 登录页面

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

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

在打开 TensorBoard 应用程序时,TensorBoard 将打开并显示 SageMaker Data Manager 选项卡。以下屏幕截图显示了 TensorBoard 应用程序中的“SageMaker Data Manager”选项卡的完整视图。

TensorBoard 应用程序中的“SageMaker Data Manager”选项卡的屏幕截图

SageMaker Data Manager 选项卡中,您可以选择任意训练作业,并从 Amazon S3 加载与 TensorBoard 兼容的训练输出数据。

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

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

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

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

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

注意

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

探究在 TensorBoard 中可视化的训练输出数据

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

“时间序列” 选项卡视图


                时间序列选项卡的屏幕截图,它在主窗格中显示了用于跟踪的选定训练作业的 TensorBoard 数据和序列化直方图
                .

“标量”选项卡视图

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

“图表”选项卡视图

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

“分配”选项卡视图

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

“直方图”选项卡视图

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

删除未使用的 TensorBoard 应用程序

在 TensorBoard 中监控和试用作业后,请关闭 TensorBoard 应用程序。

  1. 打开 SageMaker 控制台。

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

  3. 管理员配置下,选择

  4. 选择您的域。

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

  6. 应用程序下,为 TensorBoard 行选择删除应用程序

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

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

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

注意事项

在使用 SageMaker with TensorBoard 时,请注意以下几点。

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

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

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