トレーニングジョブを準備して TensorBoard 出力データ設定を収集する
SageMaker での機械学習の一般的なトレーニングジョブは、トレーニングスクリプトの準備と SageMaker Python SDK の SageMaker 推定器オブジェクトの設定の 2 つの主なステップで構成されています。このセクションでは、SageMaker トレーニングジョブから TensorBoard 互換データを収集するために必要な変更を説明します。
前提条件
次のリストは、SageMaker with TensorBoard の使用を開始するための前提条件を示しています。
-
お客様の AWS アカウント内に Amazon VPC を使用してセットアップされている SageMaker ドメイン。
ドメインの設定方法については、「Onboard to Amazon SageMaker domain using quick setup」を参照してください。また、個々のユーザーが SageMaker の TensorBoard にアクセスするためのドメインユーザープロファイルを追加する必要があります。詳細については、「ユーザープロファイルの追加」を参照してください。
-
以下のリストは、SageMaker で TensorBoard を使用するための最小限のアクセス許可のセットです。
-
sagemaker:CreateApp
-
sagemaker:DeleteApp
-
sagemaker:DescribeTrainingJob
-
sagemaker:Search
-
s3:GetObject
-
s3:ListBucket
-
ステップ 1: オープンソースの TensorBoard ヘルパーツールを使用してトレーニングスクリプトを変更する
収集する出力テンソルとスカラーを決定し、TensorBoardX、TensorFlow サマリーライター、PyTorch サマリーライター、または SageMaker Debugger のいずれかのツールを使用してトレーニングスクリプトのコード行を変更してください。
また、トレーニングコンテナのコールバックのログディレクトリ (log_dir
) として TensorBoard データ出力パスを指定していることを確認してください。
フレームワークごとのコールバックについて詳しくは、次のリソースを参照してください。
-
PyTorch の場合は、torch.utils.tensorboard.SummaryWriter
を使用します。PyTorch チュートリアルの「Using TensorBoard in PyTorch 」および「Log scalars 」セクションも参照してください。TensorBoardX サマリーライター を使用することもできます。 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)
-
PyTorch を使用するトランスフォーマーの場合は、transformers.integrations.TensorBoardCallback
を使用できます。 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
)
注記
CreateHyperParameterTuningJob
API は TensorBoard 出力設定と統合されておらずマッピングされないため、TensorBoard アプリケーションは SageMaker ハイパーパラメータチューニングジョブをすぐにサポートしません。TensorBoard アプリケーションをハイパーパラメータチューニングジョブに使用するには、トレーニングスクリプトでメトリクスを Amazon S3 にアップロードするコードを記述する必要があります。メトリクスが Amazon S3 バケットにアップロードされると、SageMaker の TensorBoard アプリケーションにバケットをロードできます。