准备收集 TensorBoard 输出数据的训练作业
SageMaker 机器学习的典型训练作业包括两个主要步骤:准备训练脚本和配置 SageMaker Python SDK 的 SageMaker 估算器对象。本节将介绍从 SageMaker 训练作业中收集与 TensorBoard 兼容数据所需的更改。
先决条件
以下列表显示了开始使用 SageMaker with TensorBoard 的先决条件。
-
在您的 AWS 账户中使用 Amazon VPC 设置的 SageMaker 域。
有关设置域的说明,请参阅使用快速设置功能登录 Amazon SageMaker 域。您还需要为单个用户添加域用户配置文件,以便访问 TensorBoard on SageMaker。有关更多信息,请参阅 添加用户配置文件。
-
以下列表显示了一组用于使用 TensorBoard on SageMaker 的最低权限。
-
sagemaker:CreateApp
-
sagemaker:DeleteApp
-
sagemaker:DescribeTrainingJob
-
sagemaker:Search
-
s3:GetObject
-
s3:ListBucket
-
步骤 1:使用开源 TensorBoard 辅助工具修改训练脚本
请您务必确定要收集哪些输出张量和标量,并使用以下任意工具修改训练脚本中的代码行: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 库修改训练脚本的指南,请参阅调整训练脚本,注册钩子。
步骤 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 应用程序不为 SageMaker 超参数调整作业提供开箱即用的支持,因为 CreateHyperParameterTuningJob
API 未与 TensorBoard 的映射输出配置集成。要将 TensorBoard 应用程序用于超参数调整作业,您需要在训练脚本中编写将指标上传到 Amazon S3 的代码。将指标上传到 Amazon S3 存储桶后,就可以将存储桶加载到 SageMaker 上的 TensorBoard 应用程序中。