本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
准备训练作业以收集 TensorBoard 输出数据
中的典型机器学习训练作业 SageMaker 包括两个主要步骤:准备训练脚本和配置 Python SageMaker 的 SageMaker 估计器对象。SDK在本节中,您将了解从 SageMaker 训练作业中收集 TensorBoard兼容数据所需的更改。
先决条件
以下列表显示了开始使用的 SageMaker 先决条件 TensorBoard。
-
在您的 AWS 账户中使用 Amazon 设置VPC的 SageMaker 域名。
有关设置域名的说明,请参阅使用快速设置登录到 Amazon SageMaker 域名。您还需要添加域用户配置文件以供个人用户访问 SageMaker。 TensorBoard 有关更多信息,请参阅 添加用户配置文件。
-
以下列表是在 TensorBoard 上使用的最低权限集 SageMaker。
-
sagemaker:CreateApp
-
sagemaker:DeleteApp
-
sagemaker:DescribeTrainingJob
-
sagemaker:Search
-
s3:GetObject
-
s3:ListBucket
-
第 1 步:使用开源 TensorBoard 帮助工具修改训练脚本
确保确定要收集哪些输出张量和标量,并使用以下任何工具修改训练脚本中的代码行: TensorBoardX、Summary Writer、 TensorFlow Summary Writer 或 SageMaker Debugger。 PyTorch
另外,请确保将 TensorBoard 数据输出路径指定为训练容器中回调的日志目录 (log_dir
)。
有关每个框架的回调的更多信息,请参阅以下资源。
-
对于 PyTorch,请使用 torch.utils.tensorboard。 SummaryWriter
。另请参阅PyTorch教程中的 “ TensorBoard 在中使用 ” PyTorch 和 “记录标量 ” 部分。或者,您可以使用 TensorBoardX 摘要编写器 。 LOG_DIR="/opt/ml/output/tensorboard" tensorboard_callback=torch.utils.tensorboard.writer.SummaryWriter(log_dir=LOG_DIR)
-
对于 TensorFlow,请使用 tf.keras.callbacks 的 TensorBoard本机回调。 TensorBoard
。 LOG_DIR="/opt/ml/output/tensorboard" tensorboard_callback=tf.keras.callbacks.TensorBoard( log_dir=LOG_DIR, histogram_freq=1)
-
对于《变形金刚》 PyTorch,你可以使用变形金刚.integrations。 TensorBoardCallback
。 对于带有 “变形金刚” TensorFlow,使用
tf.keras.tensorboard.callback
,然后将其传递给变形金刚中的 keras 回调。提示
您还可以使用其他容器本地输出路径。但是,在中第 2 步:使用 SageMaker 输出配置创建训练估算器 TensorBoard 对象,您必须正确映射路径 SageMaker 才能成功搜索本地路径并将 TensorBoard 数据保存到 S3 输出存储桶。
-
有关使用 SageMaker 调试器 Python 库修改训练脚本的指导,请参阅调整训练脚本以注册挂钩。
第 2 步:使用 SageMaker 输出配置创建训练估算器 TensorBoard 对象
在配置 SageMaker 框架估算器sagemaker.debugger.TensorBoardOutputConfig
时使用。此配置将您指定用于保存 TensorBoard 数据的 S3 存储桶与训练容器中的本地路径进行API映射(/opt/ml/output/tensorboard
)。将模块的对象传递给估算器类的 tensorboard_output_config
参数。以下代码片段显示了使用 TensorBoard 输出配置参数准备 TensorFlow 估算器的示例。
注意
此示例假设你使用的是 SageMaker Python SDK。如果您使用低级别 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 应用程序不 out-of-the-box支持 SageMaker超参数调整作业,因为CreateHyperParameterTuningJob
API未与映射的 TensorBoard 输出配置集成。要将该 TensorBoard应用程序用于超参数调整任务,您需要在训练脚本中编写用于将指标上传到 Amazon S3 的代码。将指标上传到 Amazon S3 存储桶后,您就可以将该存储桶加载到 TensorBoard 应用程序中 SageMaker。