

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

# 准备训练作业以收集 TensorBoard 输出数据
<a name="debugger-htb-prepare-training-job"></a>

 SageMaker 人工智能机器学习的典型训练任务包括两个主要步骤：准备训练脚本和配置 AI SageMaker Python SDK 的 SageMaker AI 估算器对象。在本节中，您将了解从 SageMaker 训练作业中收集 TensorBoard-compatible 数据所需的更改。

## 先决条件
<a name="debugger-htb-prerequisites"></a>

以下列表显示了开始使用 SageMaker AI 的先决条件 TensorBoard。
+ 在您的 AWS 账户中使用 SageMaker Amazon VPC 设置的 AI 域。

  有关设置域名的说明，请参阅[使用快速设置登录到 Amazon SageMaker AI 域](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html)。您还需要添加域用户配置文件，以便个人用户访问 SageMaker AI TensorBoard 上的。有关更多信息，请参阅 [添加用户配置文件](domain-user-profile-add.md)。
+ 以下列表是在 SageMaker AI TensorBoard 上使用的最低权限集。
  + `sagemaker:CreateApp`
  + `sagemaker:DeleteApp`
  + `sagemaker:DescribeTrainingJob`
  + `sagemaker:Search`
  + `s3:GetObject`
  + `s3:ListBucket`

## 第 1 步：使用开源 TensorBoard 帮助工具修改训练脚本
<a name="debugger-htb-prepare-training-job-1"></a>

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

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

有关每个框架的回调的更多信息，请参阅以下资源。
+ 对于 PyTorch，请使用 [torch.utils.tensorboard。 SummaryWriter](https://pytorch.org/docs/stable/tensorboard.html#module-torch.utils.tensorboard)。另请参阅*PyTorch教程*中的 “[ TensorBoard 在中使用](https://pytorch.org/tutorials/recipes/recipes/tensorboard_with_pytorch.html#using-tensorboard-in-pytorch)” PyTorch 和 “[记录标量](https://pytorch.org/tutorials/recipes/recipes/tensorboard_with_pytorch.html#log-scalars)” 部分。或者，您可以使用 [TensorBoardX 摘要编写器](https://tensorboardx.readthedocs.io/en/latest/tutorial.html)。

  ```
  LOG_DIR="/opt/ml/output/tensorboard"
  tensorboard_callback=torch.utils.tensorboard.writer.SummaryWriter(log_dir=LOG_DIR)
  ```
+ 对于 TensorFlow，请使用 [tf.keras.callbacks 的 TensorBoard本机回调。 TensorBoard](https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoard)。

  ```
  LOG_DIR="/opt/ml/output/tensorboard"
  tensorboard_callback=tf.keras.callbacks.TensorBoard(
      log_dir=LOG_DIR, histogram_freq=1)
  ```
+ 对于《变形金刚》 PyTorch，你可以使用[变形金刚.integrations。 TensorBoardCallback](https://huggingface.co/docs/transformers/main/en/main_classes/callback#transformers.integrations.TensorBoardCallback)。

  对于带有 “变形金刚” TensorFlow，使用`tf.keras.tensorboard.callback`，然后将其传递给变形金刚中的 keras 回调。
**提示**  
您还可以使用其他容器本地输出路径。但是，在中[第 2 步：使用输出配置创建 SageMaker 训练估计器 TensorBoard 对象](#debugger-htb-prepare-training-job-2)，您必须正确映射路径， SageMaker AI 才能成功搜索本地路径并将 TensorBoard 数据保存到 S3 输出存储桶。
+ 有关使用 SageMaker 调试器 Python 库修改训练脚本的指导，请参阅[调整训练脚本，注册钩子](debugger-modify-script.md)。

## 第 2 步：使用输出配置创建 SageMaker 训练估计器 TensorBoard 对象
<a name="debugger-htb-prepare-training-job-2"></a>

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

**注意**  
此示例假设您使用的是 SageMaker Python 开发工具包。如果您使用低级 SageMaker API，则应在 [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)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 AI 超参数调整作业提供开箱即用的支持，因为 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html)API 未与映射的 TensorBoard 输出配置集成。要将该 TensorBoard应用程序用于超参数调整任务，您需要在训练脚本中编写用于将指标上传到 Amazon S3 的代码。将指标上传到 Amazon S3 存储桶后，您就可以在 A SageMaker I 上将该存储桶加载到 TensorBoard 应用程序中。