翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PyTorch トレーニングスクリプトを適合させる
モデル出力テンソルを収集を開始し、トレーニングの問題をデバッグするには、PyTorch トレーニングスクリプトに次の変更を加えます。
注記
SageMaker Debugger は、torch.nn.functional
torch.nn
PyTorch 1.12.0 の場合
PyTorch トレーニングスクリプトを持ち込んだ場合、トレーニングスクリプトに数行のコードを追加するだけで、トレーニングジョブを実行し、モデル出力テンソルを抽出できます。sagemaker-debugger
クライアントライブラリの「 フック API
-
フックを作成します。
(推奨) SageMaker AI 内のトレーニングジョブの場合
import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)
推定器内の DebuggerHookConfig、TensorBoardConfig、または Rules のいずれかSageMaker Python SDK を使用して Debugger でトレーニングジョブを開始するを使用して でトレーニングジョブを起動すると、SageMaker AI は
get_hook
関数によって取得される JSON 設定ファイルをトレーニングインスタンスに追加します。推定器に設定 API が含まれていない場合、フックで検索できる設定ファイルは存在せず、関数はNone
を返すことに注意してください。(オプション) SageMaker AI 以外のトレーニングジョブの場合
ローカルモードでトレーニングジョブを実行する際に、SageMaker Notebook インスタンス、Amazon EC2 インスタンス、または独自のローカルデバイス上で直接実行する場合は、
smd.Hook
クラスを使用してフックを作成します。ただし、この方法ではテンソルコレクションの保存のみ可能で、TensorBoard の可視化に使用できます。SageMaker デバッガーの組み込みルールはローカルモードで機能しません。このルールでは、リモートインスタンスからの出力をリアルタイムで保存するために SageMaker AI ML トレーニングインスタンスと S3 が必要であるためです。この場合smd.get_hook
API はNone
を返します。ローカルモードでテンソルを保存する手動フックを作成する場合は、以下のコードスニペットとロジックを使用して
smd.get_hook
API がNone
を戻すかどうかを確認し、smd.Hook
クラスを使用して手動フックを作成します。ローカルマシンの任意の出力ディレクトリを指定できることに注意してください。import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True) if hook is None: hook=smd.Hook( out_dir='
/path/to/your/local/output/
', export_tensorboard=True ) -
フックのクラスメソッドでモデルをラップします。
この
hook.register_module()
メソッドはモデルを取得して各レイヤーを繰り返し処理し、SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する の設定で指定した正規表現と一致するテンソルを検索します。このフックメソッドで収集できるテンソルは、重み、バイアス、アクティベーション、グラデーション、入力、出力です。hook.register_module(model)
ヒント
大規模なディープラーニングモデルから出力テンソル全体を収集すると、それらのコレクションの合計サイズが指数関数的に大きくなり、ボトルネックの原因になる可能性があります。特定のテンソルを保存したい場合は、
hook.save_tensor()
メソッドを使用することもできます。このメソッドは、特定のテンソルの変数を選択し、必要な名前を付けたカスタムコレクションに保存するのに役立ちます。詳細については、この手順の「ステップ 7」を参照してください。 -
損失関数をフックのクラスメソッドでワープします。
hook.register_loss
メソッドは損失関数をラップします。SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する で設定するsave_interval
ごとに損失値を抽出し、"losses"
コレクションに保存します。hook.register_loss(loss_function)
-
トレインブロックに
hook.set_mode(ModeKeys.TRAIN)
を追加します。これは、テンソルコレクションがトレーニングフェーズ中に抽出されることを示しています。def train(): ... hook.set_mode(ModeKeys.TRAIN)
-
検証ブロックを
hook.set_mode(ModeKeys.EVAL)
に追加します。これは、テンソルコレクションがト検証フェーズ中に抽出されることを示しています。def validation(): ... hook.set_mode(ModeKeys.EVAL)
-
カスタムスカラーを保存するには
hook.save_scalar()
を使用します。モデルにないスカラー値を保存できます。例えば、評価中に計算された精度の値を記録したい場合は、精度を計算する行の下に次のコード行を追加します。 hook.save_scalar("accuracy", accuracy)
カスタムスカラーコレクションに名前を付けるには、最初の引数に文字列を指定する必要があります。これは TensorBoard のスカラー値を視覚化するために使用される名前で、任意の文字列を指定することができます。
-
カスタムテンソルを保存するには
hook.save_tensor()
を使用します。 hook.save_scalar()
と同様に、独自のテンソルコレクションを定義して、追加のテンソルを保存できます。例えば、モデルに渡された入力画像データを抽出し、カスタムテンソルとして保存するには、次のコード行 ( "images"
はカスタムテンソルの名前の例、image_inputs
は入力画像データの変数の例) を追加します。hook.save_tensor("images", image_inputs)
カスタムテンソルの名前を付けるには、最初の引数に文字列を指定する必要があることに注意してください。
hook.save_tensor()
には、カスタムテンソルを保存するテンソルコレクションを指定するための 3 番目の引数collections_to_write
があります。デフォルト:collections_to_write="default"
。3 番目の引数を明示的に指定しない場合、カスタムテンソルは"default"
テンソルコレクションに保存されます。
トレーニングスクリプトの調整が完了したら、SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する に進みます。