在 Amazon SageMaker 中使用 TensorBoard 调试和分析训练作业
Amazon SageMaker with TensorBoard 是 Amazon SageMaker 的一项功能,它将 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
)。
有关每个框架的回调的更多信息,请参阅以下资源。
-
对于 PyTorch,使用 torch.utils.tensorboard.SummaryWriter
。另请参阅 PyTorch 教程中的在 PyTorch 中使用 TensorBoard 和日志标量 部分。或者,您也可以使用 TensorBoardX Summary Writer 。 LOG_DIR="/opt/ml/output/tensorboard" tensorboard_callback=torch.utils.tensorboard.writer.SummaryWriter(log_dir=LOG_DIR)
-
对于 TensorFlow,使用 TensorBoard 的本机回调,即 tf.keras.callbacks.TensorBoard
。 LOG_DIR="/opt/ml/output/tensorboard" tensorboard_callback=tf.keras.callbacks.TensorBoard( log_dir=LOG_DIR, histogram_freq=1)
-
对于 Transformers with PyTorch,可以使用 transformers.integrations.TensorBoardCallback
。 对于 Transformers with TensorFlow,使用
tf.keras.tensorboard.callback
,并将其传递给转换器中的 keras 回调。提示
您还可以使用其他容器本地输出路径。但在步骤 2:使用 TensorBoard 数据配置构建 SageMaker 训练启动器中,您必须正确映射路径,这样 SageMaker 才能成功搜索本地路径并将 TensorBoard 数据保存到 S3 输出存储桶。
-
有关使用 SageMaker Debugger Python 库修改训练脚本的指南,请参阅步骤 1:调整训练脚本以注册钩子。
步骤 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
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
函数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
导航到域详细信息页面
以下过程展示如何导航到域详细信息页面。
-
通过 https://console.aws.amazon.com/sagemaker/
打开 Amazon SageMaker 控制台。 -
在左侧导航窗格中,选择管理员配置。
-
在管理员配置下,选择域。
-
从域列表中,选择要在其中启动 TensorBoard 应用程序的域。
启动用户配置文件应用程序
以下过程说明如何启动作用域为用户配置文件的 Studio 应用程序。
-
在域详细信息页面上,选择用户配置文件选项卡。
-
确定要为其启动 Studio 应用程序的用户配置文件。
-
为所选用户配置文件选择启动,然后选择 TensorBoard。
选项 2:从 TensorBoard 登录页面启动 TensorBoard
以下过程说明如何从 TensorBoard 登录页面启动 TensorBoard 应用程序。
-
通过 https://console.aws.amazon.com/sagemaker/
打开 Amazon SageMaker 控制台。 -
在左侧导航窗格中,选择 TensorBoard。
-
在开始使用下,选择要在其中启动 Studio 应用程序的域。如果您的用户配置文件仅属于一个域,则看不到用于选择域的选项。
-
选择要为其启动 Studio 应用程序的用户配置文件。如果域中没有用户配置文件,请选择创建用户配置文件。有关更多信息,请参阅添加和删除用户配置文件。
-
选择打开 TensorBoard。
以下屏幕截图显示了 TensorBoard 在 SageMaker 控制台的左侧导航窗格中的位置,以及主窗格中的 SageMaker with TensorBoard 登录页面。
在 TensorBoard 中访问和可视化训练输出数据
通过将从 S3 存储桶收集的输出张量与训练期间或之后的训练作业成对加载,可以进行在线或离线分析。
在打开 TensorBoard 应用程序时,TensorBoard 将打开并显示 SageMaker Data Manager 选项卡。以下屏幕截图显示了 TensorBoard 应用程序中的“SageMaker Data Manager”选项卡的完整视图。
在 SageMaker Data Manager 选项卡中,您可以选择任意训练作业,并从 Amazon S3 加载与 TensorBoard 兼容的训练输出数据。
-
在搜索训练作业部分,使用筛选条件缩小要查找、加载和可视化的训练作业列表的范围。
-
在训练作业列表部分中,使用复选框选择要从中提取数据并可视化以进行调试的训练作业。
-
选择添加选定作业。选定作业将显示在跟踪的训练作业部分中,如以下屏幕截图所示。
注意
SageMaker Data Manager 选项卡仅显示使用 TensorBoardOutputConfig
参数配置的训练作业。确保您已使用此参数配置 SageMaker 估算器。有关更多信息,请参阅 步骤 2:使用 TensorBoard 数据配置构建 SageMaker 训练启动器。
注意
如果您是首次使用 SageMaker with TensorBoard,或者在之前的使用中未加载任何数据,则可能不会显示可视化选项卡。在添加训练作业并等待几秒钟后,选择右上角的顺时针圆形箭头来刷新查看器。成功加载作业数据后,可视化选项卡将出现。您也可以使用右上角的刷新按钮旁边的设置按钮来设置为自动刷新。
探究在 TensorBoard 中可视化的训练输出数据
在图形选项卡中,您可以在左侧窗格中看到已加载训练作业的列表。您也可以使用训练作业的复选框来显示或隐藏可视化项。TensorBoard 动态插件是动态激活的,具体取决于您如何将训练脚本设置为包括摘要写入器并传递张量和标量集合的回调,因此,图形选项卡也将动态显示。以下屏幕截图显示了每个选项卡的示例视图,其中包含两个训练作业的可视化,这两个训练作业收集了时间序列、标量、图形、分布和直方图插件的指标。
“时间序列” 选项卡视图
“标量”选项卡视图
“图表”选项卡视图
“分配”选项卡视图
“直方图”选项卡视图
删除未使用的 TensorBoard 应用程序
在 TensorBoard 中监控和试用作业后,请关闭 TensorBoard 应用程序。
-
打开 SageMaker 控制台。
-
在左侧导航窗格中,选择管理员配置。
-
在管理员配置下,选择域。
-
选择您的域。
-
选择您的用户配置文件。
-
在应用程序下,为 TensorBoard 行选择删除应用程序。
-
选择是,删除应用程序。
-
在文本框中键入
delete
,然后选择删除。 -
屏幕顶部将显示一条蓝色文本消息:正在删除默认值。
注意事项
在使用 SageMaker with TensorBoard 时,请注意以下几点。
-
您不能出于协作目的共享 TensorBoard 应用程序,因为 SageMaker 域不允许在用户之间共享应用程序。如果用户有权访问 S3 存储桶,则可以共享 S3 存储桶中保存的输出张量。
-
首次启动 TensorBoard 应用程序时,可视化插件可能不会出现。在 SageMaker Data Manager 插件中选择训练作业后,TensorBoard 应用程序会加载 TensorBoard 数据并填充可视化插件。
-
在处于不活动状态 1 小时后,TensorBoard 应用程序会自动关闭。如果您想在使用完该应用程序后将其关闭,请务必手动关闭 TensorBoard,以免为托管该应用程序的实例付费。有关如何删除应用程序的说明,请参阅删除未使用的 TensorBoard 应用程序。