

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# トレーニングジョブを準備して TensorBoard 出力データ設定を収集する
<a name="debugger-htb-prepare-training-job"></a>

SageMaker AI での機械学習の一般的なトレーニングジョブは、トレーニングスクリプトの準備と SageMaker AI Python SDK の SageMaker AI 推定器オブジェクトの設定の 2 つの主なステップで構成されています。このセクションでは、SageMaker トレーニングジョブから TensorBoard 互換データを収集するために必要な変更を説明します。

## 前提条件
<a name="debugger-htb-prerequisites"></a>

次のリストは、SageMaker AI with TensorBoard の使用を開始するための前提条件を示しています。
+  AWS アカウントの Amazon VPC でセットアップされた SageMaker AI ドメイン。

  ドメインの設定方法については、「[Onboard to Amazon SageMaker AI domain using quick setup](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、TensorFlow サマリーライター、PyTorch サマリーライター、または SageMaker Debugger のいずれかのツールを使用してトレーニングスクリプトのコード行を変更してください。

また、トレーニングコンテナのコールバックのログディレクトリ (`log_dir`) として TensorBoard データ出力パスを指定していることを確認してください。

フレームワークごとのコールバックについて詳しくは、次のリソースを参照してください。
+ PyTorch の場合は、[torch.utils.tensorboard.SummaryWriter](https://pytorch.org/docs/stable/tensorboard.html#module-torch.utils.tensorboard) を使用します。*PyTorch チュートリアル*の「[Using TensorBoard in PyTorch](https://pytorch.org/tutorials/recipes/recipes/tensorboard_with_pytorch.html#using-tensorboard-in-pytorch)」および「[Log scalars](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 の場合は、TensorBoard のネイティブコールバック、[tf.keras.callbacks.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 を使用するトランスフォーマーの場合は、[transformers.integrations.TensorBoardCallback](https://huggingface.co/docs/transformers/main/en/main_classes/callback#transformers.integrations.TensorBoardCallback) を使用できます。

  TensorFlow を使用するトランスフォーマーの場合は、`tf.keras.tensorboard.callback` を使用して、トランスフォーマーの keras コールバックに渡します。
**ヒント**  
別のコンテナのローカル出力パスを使用することもできます。ただし、[ステップ 2: TensorBoard 出力設定を使用して SageMaker トレーニング推定器オブジェクトを作成する](#debugger-htb-prepare-training-job-2) で、SageMaker AI が正常にローカルパスを検索して TensorBoard データを S3 出力バケットに保存するには、パスを正しくマッピングする必要があります。
+ SageMaker Debugger Python ライブラリを使用してトレーニングスクリプトを変更する方法については、「[フックを登録するためにトレーニングスクリプトを適応させる](debugger-modify-script.md)」を参照してください。

## ステップ 2: TensorBoard 出力設定を使用して SageMaker トレーニング推定器オブジェクトを作成する
<a name="debugger-htb-prepare-training-job-2"></a>

SageMaker AI フレームワーク推定器の設定には `sagemaker.debugger.TensorBoardOutputConfig` を使用します。この設定 API は、TensorBoard データを保存するために指定した S3 バケットをトレーニングコンテナ (`/opt/ml/output/tensorboard`) のローカルパスにマッピングします。モジュールのオブジェクトを推定器クラスの `tensorboard_output_config` パラメータに渡します。次のコードスニペットは、TensorBoard の出力設定パラメータを使用して TensorFlow 推定器を準備する例を示しています。

**注記**  
この例では、SageMaker Python SDK の使用を想定しています。低レベルの 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
)
```

**注記**  
[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 アプリケーションは SageMaker AI ハイパーパラメータチューニングジョブをすぐにサポートしません。TensorBoard アプリケーションをハイパーパラメータチューニングジョブに使用するには、トレーニングスクリプトでメトリクスを Amazon S3 にアップロードするコードを記述する必要があります。メトリクスが Amazon S3 バケットにアップロードされると、SageMaker AI の TensorBoard アプリケーションにバケットをロードできます。